一、简介

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_UPDATER
   2:  #我此次配置的利用加密key来进行DNS和DHCP间的认证,所以先生成一个key。
   3:  [root@Master ~]# ls
   4:  Kdhcp_updater.+157+00141.key      Kdhcp_updater.+157+00141.private
   5:  #在当前目录中会生成两个key
   6:  [root@Master ~]# cat Kdhcp_updater.+157+00141.key
   7:  DHCP_UPDATER. IN KEY 0 3 157 ypvqSixjeGlarwFoRyX//w==
   8:  #来查看当中内容,最后一段就是我们需要的加密字符串。连个key文件中的字符串是一样的。

 

        现在我们利用这段加密字符串,来配置named.conf

   1:         key DHCP_UPDATER {                          #利用刚刚得到的key字符串来做一个定义key
   2:                  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; }; #同上,更新这个反向解析zone
  15:  };

 

到此DNS服务器的配置结束,重启一下服务。

   1:  [root@Master ~]# service named restart
   2:  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服务器同样定义key
  12:           algorithm hmac-md5;
  13:           secret ypvqSixjeGlarwFoRyX//w==;
  14:  };
  15:
  16:         zone test.local. {                              #定义DHCP可以发送的正向DNS
  17:            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" approved
   2:  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' A
   3:  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' TXT
   4:  Jul 14 21:29:19 Master dhcpd: Added new forward map from client2.test.local to 10.0.0.105
   5:  Jul 14 21:29:19 Master named[24550]: client 10.0.0.1#53722: signer "dhcp_updater" approved
   6:  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' PTR
   7:  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' PTR

2、通过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.105
   2:
   3:  ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 10.0.0.105
   4:  ;; global options: +cmd
   5:  ;; Got answer:
   6:  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10198
   7:  ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
   8:
   9:  ;; QUESTION SECTION:
  10:  ;105.0.0.10.in-addr.arpa.    IN    PTR
  11:
  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.1
  20:
  21:  ;; Query time: 1 msec
  22:  ;; SERVER: 10.0.0.1#53(10.0.0.1)
  23:  ;; WHEN: Sat Mar 22 15:59:03 2014
  24:  ;; 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结尾的文件,修改下即可。

 

后记,写着东西挺累,排版更累。很多不尽完善的地方,大家将就着看吧!