一、简介
DDNS全名Dynamic Domain Name Server,动态域名解析服务。是由DNS和DHCP服务器组合来提供服务,简单来说就是通过DHCP服务器分配的IP地址可以动态更新到DNS服务上,免除了手动指定的麻烦。
二、平台介绍
软件包都用了centos自带源安装的
centos6.4 x64
dhcp-4.1.1-31.P1.el6.x86_64
bind-9.8.2-0.10.rc1.el6.x86_64
三、服务器端配置过程
1、DNS服务器配置
我在之前的文章中已经写过如何配置DNS服务器了,这里就不再浪费空间了。那我就直接配置DNS服务器了。
1: [root@Master ~]#dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER2: #我此次配置的利用加密key来进行DNS和DHCP间的认证,所以先生成一个key。3: [root@Master ~]# ls4: Kdhcp_updater.+157+00141.key Kdhcp_updater.+157+00141.private5: #在当前目录中会生成两个key6: [root@Master ~]# cat Kdhcp_updater.+157+00141.key7: DHCP_UPDATER. IN KEY 0 3 157 ypvqSixjeGlarwFoRyX//w==8: #来查看当中内容,最后一段就是我们需要的加密字符串。连个key文件中的字符串是一样的。
现在我们利用这段加密字符串,来配置named.conf
1: key DHCP_UPDATER { #利用刚刚得到的key字符串来做一个定义key2: algorithm hmac-md5;3: secret "ypvqSixjeGlarwFoRyX//w==";4: };5: zone "test.local" IN {6: type master;7: file "test.local.zone";8: allow-update { key DHCP_UPDATER;}; #定义允许更新这个正向解析zone,使用定义的key来认证9:10: };11: zone "0.0.10.in-addr.arpa" IN {12: type master;13: file "10.0.0.arpa.zone";14: allow-update { key DHCP_UPDATER; }; #同上,更新这个反向解析zone15: };
到此DNS服务器的配置结束,重启一下服务。
1: [root@Master ~]# service named restart2: Stopping named: [ OK ]3: Starting named: [ OK ]
2、DHCP服务器配置
DHCP服务器安装配置比较简单,我就简要介绍下。配置文件在/etc/dhcpd/dhcpd.conf
1: subnet 10.0.0.0 netmask 255.255.255.0 { #定义一个网段2: range 10.0.0.101 10.0.0.105; #地址池范围3: option domain-name-servers 10.0.0.1; #DNS服务地址4: option domain-name "test.local"; #域名5: option routers 10.0.0.1; #网关地址6: option broadcast-address 10.0.0.255; #广播地址7: default-lease-time 600; #默认租约时间8: max-lease-time 7200; #最大租约时间9: }10: 上面的部分都是DHCP配置内容,下面部分是针对的DDNS的配置11: key DHCP_UPDATER { #和DNS服务器同样定义key12: algorithm hmac-md5;13: secret ypvqSixjeGlarwFoRyX//w==;14: };15:16: zone test.local. { #定义DHCP可以发送的正向DNS17: primary 127.0.0.1;18: key DHCP_UPDATER;19: }20:21: zone 0.0.10.in-addr.arpa. { #同上,反向22: primary 127.0.0.1;23: key DHCP_UPDATER;24: }补充两个参数,刚刚忘加上了。1: ddns-update-style interim;
2: ignore client-updates;同理,重启DHCP服务。1: [root@Master ~]# service dhcpd restart
2: Shutting down dhcpd: [ OK ]
3: Starting dhcpd: [ OK ]
四、客户端配置
linux客户端比较特别,需要设置一下dhclient.conf这个文件来更新客户机的FQDN。
1: [root@client2 ~]# hostname -A ;hostname -I
2: client2.test.local
3: 10.0.0.105
4: [root@client2 ~]# cat /etc/dhcp/dhclient.conf #如果没有这个这个文件,手动创建一个
5: send fqdn.fqdn "client2";
6: send fqdn.encoded on;
7: send fqdn.server-update on;
客户端测试命令
1: [root@client2 ~]# dhclient -r && dhclient
五、测试验证
1、通过日志来查看,正反向地址都更新到DNS服务器上了。
1: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53029: signer "dhcp_updater" approved2: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53029: updating zone 'test.local/IN': adding an RR at 'client2.test.local' A3: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53029: updating zone 'test.local/IN': adding an RR at 'client2.test.local' TXT4: Jul 14 21:29:19 Master dhcpd: Added new forward map from client2.test.local to 10.0.0.1055: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53722: signer "dhcp_updater" approved6: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53722: updating zone '0.0.10.in-addr.arpa/IN': deleting rrset at '105.0.0.10.in-addr.arpa' PTR7: Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53722: updating zone '0.0.10.in-addr.arpa/IN': adding an RR at '105.0.0.10.in-addr.arpa' PTR2、通过dig解析命令来查看是否能成功解析。
正向解析已成功
1: [root@client2 ~]# dig -t A client2.test.local
2:
3: ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t A client2.test.local
4: ;; global options: +cmd
5: ;; Got answer:
6: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32799
7: ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
8:
9: ;; QUESTION SECTION:
10: ;client2.test.local. IN A
11:
12: ;; ANSWER SECTION:
13: client2.test.local. 300 IN A 10.0.0.105
14:
15: ;; AUTHORITY SECTION:
16: test.local. 86400 IN NS master.test.local.
17:
18: ;; ADDITIONAL SECTION:
19: master.test.local. 86400 IN A 10.0.0.1
20:
21: ;; Query time: 0 msec
22: ;; SERVER: 10.0.0.1#53(10.0.0.1)
23: ;; WHEN: Sat Mar 22 15:55:45 2014
24: ;; MSG SIZE rcvd: 89
反向解析已成功
1: [root@client2 ~]# dig -x 10.0.0.1052:3: ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 10.0.0.1054: ;; global options: +cmd5: ;; Got answer:6: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 101987: ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 18:9: ;; QUESTION SECTION:10: ;105.0.0.10.in-addr.arpa. IN PTR11:12: ;; ANSWER SECTION:13: 105.0.0.10.in-addr.arpa. 300 IN PTR client2.test.local.14:15: ;; AUTHORITY SECTION:16: 0.0.10.in-addr.arpa. 86400 IN NS master.test.local.17:18: ;; ADDITIONAL SECTION:19: master.test.local. 86400 IN A 10.0.0.120:21: ;; Query time: 1 msec22: ;; SERVER: 10.0.0.1#53(10.0.0.1)23: ;; WHEN: Sat Mar 22 15:59:03 201424: ;; MSG SIZE rcvd: 110六、补充
启动DDNS服务器后,在DNS目录中会创建以jnl文件结尾的文件。此文件是用来临时存储动态DNS记录,一般过段时间会同步到zone文件中,不过默认多少时间和如何定义我没有查到相关信息。暂时先存疑吧。
最后说说会出现的一些故障吧,我遇到过2个故障:
1、连接拒绝,后来发现是我DNS监听在“listen-on port 53 { 10.0.0.1; };”上,而我的dhcp中的更新地址写的而是 “primary 127.0.0.1”。所以导致更新失败。
1: Master dhcpd: Unable to add forward map from client2.test.local to 10.0.0.105: connection refused
2、还有一个错误日志我找不到了,大致问题就是DNS目录权限问题。无法写入jnl结尾的文件,修改下即可。
后记,写着东西挺累,排版更累。很多不尽完善的地方,大家将就着看吧!