自建DNS总结

DNS查询过程以及DNS服务器类别

DNS查询过程

1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

DNS服务器类别

主域名服务器

负责维护这个区域的所有域名信息,是特定的所有信息的权威信息源

辅助域名服务器

当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为备份服务提供域名解析服务。辅助域名服务器中的区域文件内的数据是从另外一台域名服务器复制过来的,并不是直接输入的,也就是说这个区域文件只是一份副本,这里的数据是无法修改的。

缓存服务器

可运行域名服务器软件但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的回答,一旦获取一个答案,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。

转发服务器

负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到就把请求依次转发到指定的域名服务器,直到查询到结果为止,否则返回无法映射的结果。

搭建一套DNS服务器,负责解析qq.com域名(自行设定主机名及IP)

(1)、能够对一些主机名进行正向解析和逆向解析;

(2)、对子域cdn.qq.com进行子域授权,子域负责解析对应子域中的主机名;

(3)、为了保证DNS服务系统的高可用性,请设计一套方案,并写出详细的实施过程

先来个架构图:

先来安装bind

1
2
3
4
5
6
7
8
[root@DNS2 ~]# yum install bind

[root@DNS2 ~]# rpm -qa |grep bind #查看安装的包和版本
bind-9.8.2-0.47.rc1.el6_8.4.x86_64
bind-libs-9.8.2-0.47.rc1.el6_8.4.x86_64
PackageKit-device-rebind-0.5.8-26.el6.x86_64
bind-utils-9.8.2-0.47.rc1.el6_8.4.x86_64
[root@DNS2 ~]#

我是两台DNS测试机一起安装的,这里只列出其中同一台的安装操作命令。

主配置文件之一:/etc/named.conf

主配置文件之二:/etc/named.rfc1912.zones

在文件尾部加上一下内容,这里就实现了能够对qq.com域名进行正向解析和逆向解析

1
2
3
4
5
6
7
8
9
10
11
zone "qq.com" IN {
type master;
file "qq.com.zone";
allow-transter { 192.168.0.244; }; #这里这行IP是从DNS服务器的IP
};

zone "0.168.192.in-addr.arpa" IN {
type master
file "0.168.192.zone";
allow-transter { 192.168.0.244; }; #这里这行IP是从DNS服务器的IP
};

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[root@centos named]# dig -x 192.168.0.116

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> -x 192.168.0.116
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31489
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;116.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
116.0.168.192.in-addr.arpa. 3600 IN PTR www.qq.com.
116.0.168.192.in-addr.arpa. 3600 IN PTR ns1.qq.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 3600 IN NS ns1.qq.com.

;; ADDITIONAL SECTION:
ns1.qq.com. 3600 IN A 192.168.0.116

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Feb 28 13:50:38 2017
;; MSG SIZE rcvd: 120

[root@centos named]# dig -t A www.qq.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.4 <<>> -t A www.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31217
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.qq.com. IN A

;; ANSWER SECTION:
www.qq.com. 3600 IN A 192.168.0.116

;; AUTHORITY SECTION:
qq.com. 3600 IN NS ns1.qq.com.

;; ADDITIONAL SECTION:
ns1.qq.com. 3600 IN A 192.168.0.116

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Feb 28 13:51:04 2017
;; MSG SIZE rcvd: 82

[root@centos named]#

接下来配置对子域cdn.qq.com进行子域授权,子域负责解析对应子域中的主机名

另外启动一台,安装bind

vim /etc/named.conf

vim /etc/named.rfc1912.zones 加入以下内容

1
2
3
4
zone "cdn.qq.com" IN {
type master;
file "cdn.qq.com.zone";
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
vim /var/named/cdn.qq.com.zone
$TTL 3600
$ORIGIN cdn.qq.com.
@ IN SOA ns1.cdn.qq.com. admin.qq.com. (
122701
2H
10M
1W
1D )
IN NS ns1
ns1 IN A 192.168.20.51
www IN A 192.168.20.199
# chown :named /var/named/cdn.qq.com.zone
# chmod 640 /var/named/cdn.qq.com.zone
检查named配置文件及区域配置文件:
# named-checkconf
# named-checkzone cdn.qq.com /var/named/cdn.qq.com.zone
# systemctl start named.service
在主域S1上的配置:
# vim /var/named/qq.com.zone
cdn IN NS ns1.cdn
ns1.cdn IN A 192.168.20.51
# rndc reload
测试解析:
# dig -t A www.cdn.qq.com

DNS服务器主从

其实不难,就是很多细节要注意,我先贴配置文件吧

主机 192.168.0.116

/etc/named.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
options {
listen-on port 53 { 192.168.0.116; };
// 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";
allow-query { any; };
recursion yes;

dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";

// managed-keys-directory "/var/named/dynamic";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

从机 192.168.0.117

/etc/named.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
options {
listen-on port 53 { 192.168.0.117; };
// 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";
allow-query { any; };
recursion yes;

dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";

// managed-keys-directory "/var/named/dynamic";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

打开辅助DNS服务器的/etc/named.rfc1912.zones文件,添加两个区域记录,这两个记录是主DNS服务器配置文件里已经存在的记录,一个是正向解析记录,一个是反向解析记录

type: slave,表示此时DNS服务器为辅助DNS服务器,于是下面一行就要定义主DNS服务器的IP地址,辅助DNS服务器才知道去哪里同步数据。辅助DNS服务器的资源类型数据文件通常保存在slaves目录,只需定义一个名称,文件内容通常是自动生成。

1
2
3
4
5
6
7
8
9
10
11
zone "qq.com" IN {
type slave;
file "slaves/qq.com.zone";
masters { 192.168.0.116; };
};

zone "0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.0.116.zone";
masters { 192.168.0.116; };
};

修改主DNS服务器的数据文件,添加一条辅助DNS服务器记录,给辅助DNS服务器授权。

正向解析文件
vim /var/named/qq.com.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$TTL 3600
$ORIGIN qq.com.
@ IN SOA ns1.qq.com. admin.qq.com. (
2016122703
2H
10M
1W
1D )
IN NS ns1
ns1 IN A 192.168.0.116
www IN A 192.168.0.116
cdn IN NS ns1.cdn
ns1.cdn IN A 192.168.0.117
IN NS ns2
ns2 IN A 192.168.0.117

添加了一条NS记录,值为,ns2.qq.com.,对应的A记录也要增加一条,把IP地址指向对应的辅助DNS服务器的IP地址。修改完成后,记得要把序列号的值加1,用于通知辅助DNS服务器自动更新数据文件。

修改反向解析文件/var/named/0.168.192.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 3600
$ORIGIN 0.168.192.in-addr.arpa.
@ IN SOA ns1.qq.com. nsadmin.qq.com. (
16122702
1H
10M
3D
12H )
IN NS ns1.qq.com.
116 IN PTR ns1.qq.com.
116 IN PTR www.qq.com.
IN NS ns2.qq.com.
117 IN PTR ns2.qq.com.

同样的也增加了两条记录,一条辅助DNS服务器的NS记录和对应的PTR记录。修改完成后记得所序列号的值加1,用于通知辅助DNS服务器自动更新数据文件。

最后两边都把named服务重启一下,再rndc reload 就好

0%