文章目录
DNS的解析流程
什么是 DNS
DNS(Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于 TCP/IP 网络。
当我们在浏览器输入一个 URL 地址时,浏览器要向这个 URL 的主机名对应的服务器发送请求,就得知道服务器的 IP,对于浏览器来说,DNS 的作用就是将主机名转换成 IP 地址。
DNS域名解析流程
DNS 域名解析,简单地说就是把域名翻译成 IP 地址。例如:把 www.baidu.com 这个域名翻译成对应 IP 220.181.38.251,这里只是举个例子。
域名解析流程
上图中分 8 个步骤介绍了域名解析的流程,但在此之前会先检查本机的缓存配置+ hosts 解析,然后才真正执行上图的流程:
浏览器缓存检查
浏览器会首先搜索浏览器自身的 DNS 缓存,缓存时间比较短,大概只有1分钟,且只能容纳 1000 条缓存,看自身的缓存中是否有对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
操作系统缓存检查 + hosts 解析
如果浏览器的缓存里没有找到对应的条目,操作系统也会有一个域名解析的过程,那么浏览器先搜索操作系统的 DNS 缓存中是否有这个域名对应的解析结果,如果找到且没有过期则停止搜索,解析到此结束。
在 Linux 中可以通过 /etc/hosts 文件来设置,可以将任何域名解析到任何能够访问的IP 地址。如果在这里指定了一个域名对应的 IP 地址,那么浏览器会首先使用这个 IP地址。当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果,缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。
- 客户端通过浏览器访问域名为 www.baidu.com (http://www.baidu.com) 的网站,发起查询该域名的 IP 地址的 DNS 请求。该请求发送到了本地 DNS 服务器上。本地 DNS 服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。
- 本地 DNS 服务器向根服务器发送 DNS 请求,请求域名为 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- 根服务器经过查询,没有记录该域名及 IP 地址的对应关系。但是会告诉本地 DNS 服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com 服务器)。
- 本地 DNS 服务器向 .com 服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- com 服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地DNS 服务器,该域名可以在 baidu.com 域名服务器上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。
- 本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应关系,并将 IP 地址返回给本地 DNS 服务器。
- 本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
2.DNS主从配置: 需要两台机器: 一台为主dns服务器,一台为从DNS服务器
主服务器:
[root@rhcsa ~]# yum install bind bind-chroot bind-utils bind-lib -y
[root@rhcsa ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
# listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
allow-transfer {192.168.155.134; };
recursion yes;
pid-file "/run/named/named.pid";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "lsj.com" IN{
type master;
file "lsj.zone";
};
zone "155.168.192.in-addr.arpa" IN{
type master;
file "155.168.192.zone";
};
[root@rhcsa ~]# vim /var/named/chroot/var/named/lsj.zone
$TTL 1D
@ IN SOA dns1.lsj.com. test1.163.com(
10
1D
1H
1W
3H)
IN NS dns1.lsj.com.
IN NS dns2.lsj.com.
IN MX 10 mail.lsj.com.
dns1 IN A 192.168.155.100
dns2 IN A 192.168.155.134
mail IN A 192.168.155.232
ftp IN A 192.168.155.233
www IN A 192.168.155.234
ntp IN A 192.168.155.235
dhcp IN A 192.168.155.236
web IN CNAME dhcp
mail.openlab.com IN A 192.168.155.128
从服务器:
[root@rhcsa ~]# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };
# listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
recursion yes;
pid-file "/run/named/named.pid";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "lsj.com" IN{
type slave;
file "slaves/lsj.zone";
masters { 192.168.155.100; };
};
zone "155.168.192.in-addr.arpa" IN{
type slave;
file "slaves/155.168.192.zone";
masters { 192.168.155.100; };
};
[root@rhcsa ~]# systemctl restart named-chroot
3.使用httpd服务演示安全上下文值的设定(selinux)
[root@rhcsa ~]# systemctl restart firewalld
[root@rhcsa ~]# firewall-cmd --permanent --add-service=http
success
[root@rhcsa ~]# firewall-cmd --reload
success
[root@rhcsa ~]# setenforce 1
[root@rhcsa ~]# getenforce
Enforcing
[root@rhcsa ~]# vim /etc/httpd/conf.d/myhosts.conf
<Directory "/www/ip">
AllowOverride None
Require all granted
</Directory>
#<VirtualHost 192.168.255.100:80>
DocumentRoot "/www/ip/100"
#</VirtualHost>
#<VirtualHost 192.168.255.200:80>
# DocumentRoot "/www/ip/200"
#</VirtualHost>
<VirtualHost 192.168.255.100:80>
DocumentRoot "/www/ip/80"
ServerName 192.168.40.120
</VirtualHost>
"/etc/httpd/conf.d/myhosts.conf" 17L, 400C
[root@rhcsa ~]# mkdir -pv /www/80
mkdir: created directory '/www/80'
[root@rhcsa ~]# echo this is 80 > /www/80/index.html
[root@rhcsa ~]# systemctl restart httpd
[root@rhcsa 80]# chcon -t httpd_sys_content_t /www/ -R
[root@rhcsa 80]# ls -Z
4.使用web服务端口的改变来演示端口的设定(selinux)
[root@rhcsa ~]# mkdir /www/8888
[root@rhcsa ~]# echo this is 8888 > /www/8888/index.html
[root@rhcsa ~]# vim /etc/httpd/conf.d/myhosts.conf
<Directory "/www/ip">
AllowOverride None
Require all granted
</Directory>
#<VirtualHost 192.168.255.100:80>
DocumentRoot "/www/ip/100"
#</VirtualHost>
#<VirtualHost 192.168.255.200:80>
# DocumentRoot "/www/ip/200"
#</VirtualHost>
#<VirtualHost 192.168.255.100:80>
# DocumentRoot "/www/ip/80"
# ServerName 192.168.40.120
#</VirtualHost>
<VirtualHost 192.168.255.100:8888>
DocumentRoot "/www/ip/8888"
ServerName 192.168.40.120
</VirtualHost>
[root@rhcsa ~]# systemctl restart httpd
.168.40.120
#
<VirtualHost 192.168.255.100:8888>
DocumentRoot “/www/ip/8888”
ServerName 192.168.40.120
[root@rhcsa ~]# systemctl restart httpd