DNS和DDNS的安装和配置
一、DNS简介
1、DNS服务器的工作原理
域名服务(DNS)是一种分布式数据库,它提供从机器名到数字IP地址的映射。
DNS服务最常用的软件是BIND(Berkeley Internet Name Domain),BIND提供了解析器和名字服务器软件,解析器作实际的查询工作,名字服务器负责响应。BIND将名字服务器分成三个部分:
1. 主服务器包含了一个域的全部数据
2. 次服务器则有效地从主服务器复制DNS数据库
3. 缓冲服务器通过缓冲查询来建立例外的DNS数据库
域名体系层次结构图如下

2、DNS的分类
1)唯高速缓存域名服务器(Cache-only Server)
不包含域名数据库,它每次从某台远程服务器取得域名服务器查询的信息。一旦取得一个回答,就将它放入高速缓存中,下次查询相同的信息就用此回答。
2)主域名服务器(primary Name Server)
主域名服务器是特定域所有信息的权威来源,从域管理员构造的本地文件中加载域信息,该文件包含服务器具有的部分域结构的最精确信息。主域名服务器需要配置一组完整的文件。
3)辅助域名服务器(Second Name Server)
辅助域名服务器用来从主域名服务器中转移一整套域信息,它是可选的配置选项。区文件从主域名服务器转移出来,作为磁盘文件保存在辅助域名服务器中。辅助域名服务器不需要配置本地区文件,只需要配置主配置文件(named.conf),高速缓存初始化文件(named.ca)和回送文件(named.local)。
3、本次实验各文件之间的关系示意图

二、安装DNS(Domain Name System)
yum install bind -y
systemctl start named #此时打开需要读取一个文件/etc/rndc.key文件,但这个文件默认不存在,所以需要在主机上敲键盘生成该文件,然后就可以打开服务
若是想查看某一个服务的端口,可以查看文件cat /etc/services | grep domain,以domain服务为例
主配置文件: /etc/name.conf
子配置文件: /etc/named.rfc1912.zones
数据目录: /var/named
三、配置
1、简单配置,非权威DNS
这里进行测试必须了解dig命令,dig命令是常用的域名查询工具,可以用来测试域名系统是否正常
当使用客户端dig www.baidu.com命令时,出现报错说连接超时,则需要查看服务端的端口,是否是回环端口,若是,则需要改变。
当出现dig状态是status: SERVFAIL,则表示地址解析的dns服务器也不知道该如何访问,则可添加下面配置的18行来进行修改,写入一个知道的ip地址
[root@server ~]
--> 11 listen-on port 53 { any; };
17 allow-query { any; };
18 forwarders { 172.25.254.250; };
[root@server ~]
客户端,进行地址解析
[root@localhost ~]
--> nameserver 172.25.254.170
测试
[root@localhost images]
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.qq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13418
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 11
...
;; Query time: 0 msec
;; SERVER: 172.25.254.250
;; WHEN: Sat Nov 25 09:53:52 EST 2017
;; MSG SIZE rcvd: 302
2、权威DNS的正向解析
通过域名得到相对应的ip地址
在一个没有连接外网的主机上进行dns服务器配置如下:
[root@server ~]
--> 11 listen-on port 53 { any; };
17 allow-query { any; };
[root@server ~]
此时,用客户端进行测试:
[root@localhost ~]
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 53264
修改服务端
可以直接在/etc/named.conf主配置文件里面修改,但会造成排错不好找,而且如果添加的很多之后,会使得文件太长。所以可以在该文件包含的文件/etc/named.rfc1912.zones文件中修改。
[root@server ~]
--> 25 zone "westos.com" IN {
26 type master;
27 file "named.westos.zone";
28 allow-update { none; };
29 };
[root@server ~]
[root@server named]
[root@server named]
--> $TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.com.
dns A 172.25.254.170
www A 172.25.254.50
[root@server 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
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
客户端重新进行测试:
[root@localhost ~]# dig www.westos.com
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> www.westos.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9458
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
...
;; QUESTION SECTION:
;www.westos.com. IN A
;; ANSWER SECTION:
www.westos.com. 86400 IN A 172.25.254.50
;; AUTHORITY SECTION:
westos.com. 86400 IN NS dns.westos.com.
;; ADDITIONAL SECTION:
dns.westos.com. 86400 IN A 172.25.254.170
;; Query time: 0 msec
;; SERVER: 172.25.254.170#53(172.25.254.170)
;; WHEN: Sat Nov 25 10:39:08 EST 2017
;; MSG SIZE rcvd: 93
- 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
3、权威DNS的反向解析
客户端输入dig -x ip,显示出想要的域名
[root@localhost ~]# dig -x 172.25.254.55
[root@server named]# vim /etc/named.rfc1912.zones
zone "254.25.172.in-addr.arpa" IN { ##反响解析应该注意地址应该反方向写
type master
file "westos.loopback"
allow-update { none
}
[root@server named]# cp -p named.loopback westos.loopback
[root@server named]# vim westos.loopback ##内容解释和2中一样
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0
1D
1H
1W
3H )
NS dns.westos.com.
dns A 172.25.254.55
55 PTR www.westos.com. ##测试输入的需要反响解析的ip所对应的域名内容
[root@server named]# systemctl restart named
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
此时再次进行测试:
[root@localhost ~]
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25237
;; QUESTION SECTION:
;55.254.25.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
55.254.25.172.in-addr.arpa. 86400 IN PTR www.westos.com.
;; AUTHORITY SECTION:
254.25.172.in-addr.arpa. 86400 IN NS dns.westos.com.
;; ADDITIONAL SECTION:
dns.westos.com. 86400 IN A 172.25.254.170
...
4、dns的双向解析
使内网和外网不同的人解析到不同的ip地址
[root@server named]
view localnet {
match-clients { 172.25.254.70; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
view othernet {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.inter";
include "/etc/named.root.key";
};
[root@server named]
[root@server named]
zone "westos.com" IN {
type master;
file "named.westos.inter";
allow-update { none; };
};
[root@server named]
[root@server named]
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.com.
dns A 1.1.1.170
www A 1.1.1.50
- 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
不同客户端进行测试
内网ip测试172.25.254.70:
[root@localhost ~]# dig www.westos.com
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58908
;; QUESTION SECTION:
;www.westos.com. IN A
;; ANSWER SECTION:
www.westos.com. 86400 IN A 172.25.254.50
;; AUTHORITY SECTION:
westos.com. 86400 IN NS dns.westos.com.
;; ADDITIONAL SECTION:
dns.westos.com. 86400 IN A 172.25.254.170
;; Query time: 0 msec
;; SERVER: 172.25.254.170#53(172.25.254.170)
;; WHEN: Sat Nov 25 11:48:40 EST 2017
;; MSG SIZE rcvd: 93
外网ip测试:
[root@server named]# dig www.westos.com
...
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50415
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.westos.com. IN A
;; ANSWER SECTION:
www.westos.com. 86400 IN A 1.1.1.50
;; AUTHORITY SECTION:
westos.com. 86400 IN NS dns.westos.com.
;; ADDITIONAL SECTION:
dns.westos.com. 86400 IN A 1.1.1.170
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Nov 25 11:48:03 EST 2017
;; MSG SIZE rcvd: 93
可以看出不同ip所得到的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
5、主从DNS服务器的同步
为了缓解主机的压力,可以创建一个辅助DNS的服务器,和主的DNS进行同步,使有的客户端可以通过辅助DNS得到结果
主DNS配置:
vim /etc/named.rfc1912.inter
also-notify { 172.25.254.175
systemctl restart named
辅助DNS配置:
vim /etc/named.conf any any
[root@dns-slave named]# vim /etc/named.rfc1912.zones
zone "westos.com" IN {
type slave
masters { 172.25.254.170
file "slaves/westos.com.inter"
allow-update { none
}
[root@dns-slave named]# systemctl restart named
测试:用两个外网主机,resolv.conf分别写为主和辅助的DNS,进行dig测试
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
6、DNS的远程更新
1)基于ip的更新
在主DNS上面更改
vim /etc/named.rfc1912.inter
allow-update { 172.25.254.175
systemctl restart named
测试:
在175主机上
输入nsupdate命令,进行同步
server 172.25.254.170 ##主DNS
update add bbs.westos.com 86400 A 1.1.1.3 ##添加
send
server 172.25.254.170
update delete www.westos.com ##删除
send
2)基于密钥的更新
cp -p /etc/rndc.key /etc/westos.key
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST westos
vim /etc/westos.key
将里面的名称改为westos,并将secret后面引号里面的具体数值改为生成的密钥
vim /etc/named.conf
添加
include "/etc/westos.key"
vim /etc/namde.rfc1912.inter
allow-update { key wesots
测试:
scp Kwestos.+157+07295.* root@172.25.254.175:/mnt
在175主机上运行命令
nsupdate -k Kwestos.+157+07295.key
进行和基于ip的一样的测试
四、DDNS
修改dns
vim /etc/named.conf
include "/etc/westos.key"
logging {
channel default_debug {
file "data/named.run"
severity dynamic
}
}
view localnet { #内网
match-clients { any
zone "." IN {
type hint
file "named.ca"
}
include "/etc/named.rfc1912.zones"
include "/etc/named.root.key"
}
vim /etc/named.rfc1912.zones
zone "westos.com" IN {
type master
file "named.westos.zone"
allow-update { key westos
}
vim named.westos.zone
$TTL 1D
@ IN SOA dns.westos.com. root.westos.com. (
1
1D
1H
1W
3H )
NS dns.westos.com.
dns A 172.25.254.170
- 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
修改dhcp
安装dhcp,修改配置文件
vim /etc/dhcp/dhcpd.conf
option domain-name "westos.com";
option domain-name-servers 172.25.254.170;
ddns-update-style interim;
subnet 172.25.254.0 netmask 255.255.255.0 {
range 172.25.254.197 172.25.254.210;
option routers 172.25.254.170;
}
key westos {
algorithm hmac-md5;
secret "GgUPXCeBC7rQOk2pw8XYmw==";
};
zone westos.com. {
primary 127.0.0.1;
key westos;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
重启两项服务,然后配置客户端
客户端的ip设为dhcp模式,并且配置主机名为www.westos.com,在进行dig www.westos.com会显示的是得到dhcp的ip的ip地址