搭建DNS服务器

本实验从搭建dns只缓存服务器,到搭建权威DNS服务器、实现DNS反向解析、泛域名解析、主备DNS服务器、创建子域,直到实现智能服务器。通过各个实验演示DNS实际场景应用,最后总结DNS相关知识概念

搭建正向的主权威DNS服务器

以192.168.34.108为DNS服务器,192.168.34.103为客户端
安装bind包

1
[root@ansible ~]#yum -y install bind

修改配置文件

1
[root@ansible ~]#vi /etc/named.conf

将监听端口改为localhost或者注释掉;默认只监听127.0.0.1的53端口,会导致只能为本机提供DNS服务,注释或修改为localhost就可以监听所有网卡的53端口。
将allow-query修改为any;默认只允许本机查询,any为内置关键字,意为所有主机均可查询。

1
[root@ansible ~]#vi /etc/named.rfc1912.zones

在文件中添加一个域

1
2
3
4
zone "msq.com"{
type master;
file "msq.com.zone";
};

创建域对应的区域数据库文件
复制一个模板文件

1
[root@node01 ~]#cp -p /var/named/{named.localhost,msq.com.zone}

编译该文件

1
2
3
4
5
6
7
8
9
10
11
[root@node01 ~]#cat /var/named/named.msq.com 
$TTL 1D
@ IN SOA dns1 admin (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.34.108
www A 8.8.8.8

启动服务

1
[root@node01 ~]#systemctl start named

在客户端查询

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
[root@ansible ~]#dig www.msq.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.msq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52646
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIO

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.msq.com. IN A

;; ANSWER SECTION:
www.msq.com. 86400 IN A 8.8.8.8

;; AUTHORITY SECTION:
msq.com. 86400 IN NS dns1.msq.com.

;; ADDITIONAL SECTION:
dns1.msq.com. 86400 IN A 192.168.34.108

;; Query time: 1 msec
;; SERVER: 192.168.34.108#53(192.168.34.108)
;; WHEN: Fri Nov 23 20:30:24 CST 2018
;; MSG SIZE rcvd: 91

此时得到正确解析

搭建反向的权威DNS服务器

修改配置文件

1
2
3
4
5
[root@ansible ~]#vi /etc/named.rfc1912.zones
zone "34.168.192.in-addr.arpa" {
type master;
file "192.168.34.zone";
};

增加区域数据库文件

1
2
3
4
5
6
7
8
[root@node01 ~]#cat /var/named/192.168.34.zone 
$TTL 1D
@ IN SOA dnsserver admin (0 1D 1H 1W 3H)
NS dnsserver
dnsserver A 192.168.34.7
100 PTR www.msq.com
200 PTR mail.msq.com
101 PTR blog.msq.com

重启服务

1
[root@node01 ~]#systemctl restart named

实现DNS主从复制

修改主服务器配置,指向从服务器并对从服务器做解析

1
2
3
4
5
[root@node01 ~]#vi /etc/named.conf
options{
...
allow-transfer {192.168.34.101;};
}
1
2
3
4
[root@node01 ~]#vi /var/named/msq.com.zone
...
NS dns2
dns2 A 192.168.34.103

配置从服务器

1
2
3
[root@ansible ~]#cat /ec/named.conf
...
allow-transfer {none;};
1
2
3
4
5
6
[root@node01 ~]#cat /etc/named.rfc1912.zones
zone "msq.com" {
type slave;
masters {192.168.34.108;};
file "slaves/msq.com.zone.slave";
};

开启服务后,即可做到DNS主从同步,注意:在更改主服务器配置后,需要将serails改成一个大一点的数字,才能再重新加载配置时推送到从服务器。

创建子域

子域和主与不在同一服务器
在主域数据库文件中增加名字解析

1
2
3
4
[root@node01 ~]#vi /var/named/msq.com.zone 
...
shandong NS dns4
dns4 A 192.168.34.103

在192.168.34.103这台从服务器上增加新域

1
2
3
4
5
[root@ansible ~]#vi /etc/named.rfc1912.zones
zone "shandong.msq.com" {
type master;
file "shandong.msq.com.zone";
};

创建域数据库文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@ansible ~]#vi /var/named/shandong.msq.com.zone 
$TTL 1D
@ IN SOA dns4 admin (
13 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns4
dns4 A 192.168.34.108
www A 88.88.88.88
@ MX 10 mailsrv
mailsrv A 114.114.114.11
@ A 2.2.2.6
* A 3.3.3.6

子域和主域在同一服务器
在配置文件中增加一个域

1
2
3
4
5
6
[root@node01 ~]#vi /etc/named.rfc1912.zones
...
zone "beijing.msq.com" {
type master;
file "beijing.msq.com.zone";
};

为beijing域新增域数据库文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node01 ~]#cat /var/named/beijing.msq.com.zone 
$TTL 1D
@ IN SOA dns4 admin (
13 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns4
dns4 A 192.168.34.108
www A 88.88.88.88
@ MX 10 mailsrv
mailsrv A 114.114.114.11
@ A 2.2.2.6
* A 3.3.3.6

此时,一个子域就添加成功了

DNS区域转发功能开启

在转发服务器开启转发功能

1
2
3
4
[root@node01 ~]#vi /etc/named.conf
...
forword first;
forwarders {192.168.34.103;};

注意
实现区域转发功能,需要在/etc/named.conf中关闭两项安全功能

1
2
dnssec-enable no;
dnssec-validation no;

实现智能DNS

在主配置文件曾加acl设置
在DNS主配置文件中增加三个acl权限设定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@node01 ~]#cat /etc/named.conf
acl shandong {
192.168.34.0/24;
};
acl beijing {
172.18.0.0/16;
};
acl hangzhou {
any;
};
...
view view_beijing {
match-clients {beijing;};
include "/etc/named.rfc1912.zones";
};
view view_shandong {
match-clients {shandong;};
include "/etc/named.rfc1912.zones.sd";
};
view view_hangzhou {
match-clients {hangzhou;};
include "/etc/named.rfc1912.zones.hz";
};

注意:一旦使用了view,所有的zone都只能定义在view内,否则无效!

增加三个相应的库配置文件

1
2
3
[root@node01 ~]#ls /etc/named.rfc*
/etc/named.rfc1912.zones.bj /etc/named.rfc1912.zones.sd
/etc/named.rfc1912.zones.hz

其内容为

1
2
3
4
5
[root@node01 ~]#cat /etc/named.rfc1912.zones.bj
zone "msq.com" {
type master;
file "msq.com.zone.bj"; #此处不同
};

增加三个对应的域数据库文件

1
2
3
[root@node01 ~]#ls /var/named/msq.com.zone.*
/var/named/msq.com.zone.bj /var/named/msq.com.zone.sd
/var/named/msq.com.zone.hz

为显示区别,将其中的A记录分别解析为不同的IP地址

1
2
3
4
5
6
7
8
9
10
11
[root@node01 ~]#cat /var/named/msq.com.zone.hz 
$TTL 1D
@ IN SOA dns1 admin (
14 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.34.108 #此处的地址解析设为不同的IP地址
www A 3.3.3.3

配置完毕,在客户端分别以三个网段的ip去解析www.msq.com,会得到不同的地址,说明不同区域的用户会访问离自己的最近的DNS服务器。实现智能DNS服务器搭建

DNS服务器搭建知识汇总

与数据库文件内容详解

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
[root@node01 ~]#cat /var/named/msq.com.zone 
$TTL 1D
@ IN SOA dns1 admin (
当前数据库名 固定写法 起始授权记录 DNS服务器名 管理员邮箱
11 ; serial,版本号,主从复制时用
1D ; refresh,从服务器的拉取间隔
1H ; retry,拉取失败时的重试时间
1W ; expire,若一直拉取失败,从服务器的生命周期,超过此时长,从服务器的数据不再供查询
3H ) ; minimum,若果用户查询的域名无法解析,规定时间内由缓存服务器恢复用户同样求情,本服务器不再响应。
NS dns1 #name server解析到本域的dns服务器,需要配合A记录解析成IP
NS dns2
dns2 A 192.168.34.101
dns1 A 192.168.34.108
www CNAME websrv
websrv A 1.1.1.1
websrv A 5.5.5.5
websrv A 9.9.9.9
@ A 2.2.2.2
* A 3.3.3.3-
#配置邮件服务器解析
@ MX 10 mailsrv1
#本域域名 记录类型 优先级;数字越小优先级越高 名字
@ MX 20 mailsrv2
mailsrv1 A 10.10.10.11 #对名字做A记录解析到IP地址
mailsrv2 A 11.11.11.11

rndc工具小结

rndc常用命令:

1
2
3
4
5
6
7
8
9
10
11
用法:rndc COMMAND
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录