网络出现的早期是使用IP地址通信的,那时就几台主机通信。可是随着接入网络主机的增多,这种数字标识的地址很是不便于记忆,UNIX上就出现了创建一个叫作hosts的文件(Linux和Windows也继承保留了这个文件)。这个文件中记录着主机名称和IP地址的对应表。这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就能够访问这个IP的主机了。css
可是后来主机太多了,没法保证全部人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,并且把全部地址解析记录造成的文件都同步到全部的客户机彷佛也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。html
首先,客户端先在本地缓存查找有没有域名缓存,若是没有,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:数据库
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;vim
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;centos
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机 所在网络的DNS服务器发出应答信息,DNS服务器收到应答后如今缓存中存储,而后,将解析结果发给客户机。浏览器
(4)若没有找到,则返回错误信息。缓存
第一步:客户端用户从浏览器输入www.baidu.com网站网址后回车,系统会查询本地hosts文件及DNS缓存信息,查找是否存在网址对应的IP解析记录。若是有就直接获取到IP地址,而后访问网站,通常第一次请求时,DNS缓存是没有解析记录的;服务器
第二步:若是客户端没有DNS缓存或hosts没有对应www.baidu.com网站网址的域名解析记录,那么,系统会把浏览器的解析请求,交给客户端本地设置的DNS服务器地址解析(此DNS为LDNS,即Local DNS),若是LDNS服务器的本地缓存有对应的解析记录,就会直接返回IP地址;若是没有,LDNS会负责继续请求其它的DNS服务器;网络
第三步:LDNS会从DNS系统的“.”根开始请求www.baidu.com域名的解析,通过一系列的查找各个层次DNS服务器,最终会查找到www.baidu.com域名对应的受权DNS服务器,而这个受权DNS服务器,正是该企业购买域名时用于管理域名解析的服务器。这个服务器有www.baidu.com对应的IP解析记录,若是此时都没有,就表示企业的运维人员么有给www.baidu.com域名作解析;架构
第四步:baidu.com域名对应的受权DNS服务器会把www.baidu.com对应的最终IP解析记录发给LDNS;
第五步:LDNS把收到来自受权DNS服务器关于www.baidu.com对应的IP解析记录发给客户端浏览器,而且在LDNS本地把域名和IP的对应解析缓存起来,以便下一次更快的返回相同的解析请求的记录;
第六步:客户端浏览器获取到了www.baidu.com的对应IP地址,接下来浏览器会请求得到的IP地址对应的Web服务器,Web服务器接收到客户的请求并响应处理,将客户请求的内容返回给客户端浏览器;
至此,一次访问浏览网页的完整过程就完成了
主DNS服务器:就是一台存储着原始资料的DNS服务器。
从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也称辅助DNS服务器。
缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。
转发器:这台DNS发现非本机负责的查询请求时,再也不向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。
[root@xinlibao xlb1.com]# dig -t A baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37773 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 6 ;; QUESTION SECTION: #查询的内容 ;baidu.com. IN A ;; ANSWER SECTION: #相应的内容,通常会获得至少一条A 记录,不然就尚未定义。 baidu.com. 347 IN A 111.13.101.208 ;; AUTHORITY SECTION: #受权信息 baidu.com. 22823 IN NS ns7.baidu.com. baidu.com. 22823 IN NS ns4.baidu.com. baidu.com. 22823 IN NS ns3.baidu.com. baidu.com. 22823 IN NS ns2.baidu.com. baidu.com. 22823 IN NS dns.baidu.com. ;; ADDITIONAL SECTION: #每一个受权服务器的IP dns.baidu.com. 22823 IN A 202.108.22.220 ns2.baidu.com. 22823 IN A 61.135.165.235 ns3.baidu.com. 22823 IN A 220.181.37.10 ns4.baidu.com. 22823 IN A 220.181.38.10 ns7.baidu.com. 22823 IN A 119.75.219.82 caishikou.redirect. 3600 IN A 127.0.0.1 ;; Query time: 35 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) #查询的dns服务器 ;; WHEN: Sun Nov 26 21:23:41 2017 ;; MSG SIZE rcvd: 247
DNS智能解析简单的来讲就是根据DNS服务器根据客户端请求IP的不一样来给客户端返回不一样的服务器地址,好比说电信用户访问www.baidu.com的时候DNS服务器会返回给用户电信服务器,网通用户访问www.baidu.com的时候DNS服务器会返回给用户网通服务器,这样就解决了南北用户访问过慢或电信用户访问网通服务器过慢的问题,国内著名的DNSpod实现的也是这样的一个功能,而BIND9自带的VIEW视图功能就能够彻底实现这个功能。VIEW视图能够说是BIND9一个最强大的功能之一,他能够彻底按照你要求来实现DNS服务器对不一样IP、不一样网段的智能解析工做。
Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为普遍的DNS.
配置yum源。
我用的系统是centos6.8,使用centos6.8自带的yum源便可,同时确保机器能够解析外网域名,并能链接公网。
Yum安装bind yum install bind-utils bind bind-devel bind-chroot -y 检查: [root@dns ~]# rpm -qa|grep bind bind-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-chroot-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-devel-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-libs-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-utils-9.8.2-0.62.rc1.el6_9.4.x86_64 编辑主配置文件以前copy一份cp /etc/named.conf{,.bak} 编辑主配置文件vi /etc/named.conf(配置文件,定义bind进程的工做属性,区域的定义。) options { version "1.1.1"; listen-on port 53 {any;}; #表示监放任何ip对53端口的请求 directory "/var/named/chroot/etc/"; pid-file "/var/named/chroot/var/run/named/named.pid"; allow-query { any; }; #表示接收任何来源查询dns Dump-file "/var/named/chroot/var/log/binddump.db"; Statistics-file "/var/named/chroot/var/log/named_stats"; zone-statistics yes; memstatistics-file "log/mem_stats"; empty-zones-enable no; forwarders {202.106.196.115;8.8.8.8; }; }; key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; logging { channel warning { file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m; severity warning; print-category yes; print-severity yes; print-time yes; }; channel general_dns { file "/var/named/chroot/var/log/dns_log" versions 10 size 100m; severity info; print-category yes; print-severity yes; print-time yes; }; category default { warning; }; category queries { general_dns; }; }; include "/var/named/chroot/etc/view.conf";
编辑/etc/rndc.key(实现让远程工做的密钥文件)
key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; };
编辑/etc/rndc.conf(rndc的配置文件)
key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; };
编辑/var/named/chroot/etc/view.conf
view "View" { zone "xlb.com" { type master; file "xlb.com.zone"; allow-transfer { 10.255.253.211; }; notify yes; also-notify { 10.255.253.211; }; }; };
编辑/var/named/chroot/etc/xlb.com.zone
$ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2000 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. shanks A 1.2.3.4 op A 1.2.3.4
修改权限
[root@dns ~]# cd /var && chown -R named.named named/ [root@dns var]# /etc/init.d/named start Starting named: [ OK ]
域名解析验证
[root@dns var]# dig @127.0.0.1 shanks.xlb.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 shanks.xlb.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18531 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.4 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.4 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 23 17:34:15 2017 ;; MSG SIZE rcvd: 81
[root@dns ~]# dig @172.16.1.128 shanks.xlb.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @172.16.1.128 shanks.xlb.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39717 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.4 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.40 ;; Query time: 0 msec ;; SERVER: 172.16.1.128#53(172.16.1.128) ;; WHEN: Thu Nov 23 18:04:51 2017 ;; MSG SIZE rcvd: 81
编辑主配置文件vim /etc/named.conf ##直接复制粘贴便可
options { listen-on port 53 {any;}; allow-recursion {"none";}; recursion yes; allow-query {any;}; max-cache-ttl 900; directory "/var/named"; pid-file "/var/named/named.pid"; dump-file "/var/named/named_dump.db"; statistics-file "/var/named/named.status"; }; include "/var/named/view/test1_view/ip"; include "/var/named/view/test1_view/view.conf";
编辑配置文件/var/named/view/test1_view/ip
##文件test1_view是没有的须要手动建立
mkdir /var/named/view/test1_view/ -p ##编辑配置文件ip acl test1_view{ 192.168.1.110; }; acl test2_view{ 172.16.1.50; }; ##编辑view.conf文件 view "test1" { match-clients { test1_view;}; zone "xlb.com" in { type master; file "/var/named/xlb.com/zone.xlb.com"; allow-update{none;}; }; }; view "test2" { match-clients { test2_view;}; zone "xlb.com" in { type master; file "/var/named/xlb.com/zone.xlb1.com"; allow-update{none;}; }; };
编辑/var/named/xlb.com/zone.xlb.com
##建立目录: mkdir /var/named/xlb.com/ -p ##编辑 /var/named/xlb.com/zone.xlb.com $ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2000 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. shanks A 1.2.3.5 op A 1.2.3.6
##编辑 /var/named/xlb.com/zone.xlb1.com
$ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2005 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. op A 192.168.122.2 shanks A 192.168.122.2
编辑master节点vim /var/named/chroot/etc/group2.viewlnh.com.zone
$ORIGIN . $TTL 3600 ; 1 hour viewlnh.com IN SOA op.viewlnh.com. dns.viewlnh.com. ( 2005 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.viewlnh.com. $ORIGIN viewlnh.com. op A 192.168.122.2 view A 192.168.122.2
配置完成后能够检查语法
named-checkconf
修改文件所属,加载配置。
chown named.named /var/named/* rndc reload
验证IP地址192.168.1.110
验证 IP地址192.168.1.110 [root@xinlibao xlb.com]# dig -t A op.xlb.com @192.168.1.110 #这是我本机ip就是dns服务器ip ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @192.168.1.110 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 418 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;op.xlb.com. IN A ;; ANSWER SECTION: op.xlb.com. 3600 IN A 1.2.3.6 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; Query time: 0 msec ;; SERVER: 192.168.1.110#53(192.168.1.110) ;; WHEN: Mon Nov 27 09:54:38 2017 ;; MSG SIZE rcvd: 58 [root@xinlibao xlb.com]# dig -t A shanks.xlb.com @192.168.1.110 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @192.168.1.110 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12427 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.5 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.6 ;; Query time: 0 msec ;; SERVER: 192.168.1.110#53(192.168.1.110) ;; WHEN: Mon Nov 27 09:56:14 2017 ;; MSG SIZE rcvd: 81
验证ip地址172.16.1.50
[root@xinlibao xlb.com]# dig -t A shanks.xlb.com @172.16.1.50 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @172.16.1.50 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20873 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 192.168.122.2 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 192.168.122.2 ;; Query time: 0 msec ;; SERVER: 172.16.1.50#53(172.16.1.50) ;; WHEN: Mon Nov 27 09:58:20 2017 ;; MSG SIZE rcvd: 81 [root@xinlibao xlb.com]# dig -t A op.xlb.com @172.16.1.50 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @172.16.1.50 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23688 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;op.xlb.com. IN A ;; ANSWER SECTION: op.xlb.com. 3600 IN A 192.168.122.1 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; Query time: 0 msec ;; SERVER: 172.16.1.50#53(172.16.1.50) ;; WHEN: Mon Nov 27 10:00:06 2017 ;; MSG SIZE rcvd: 58