前言:随着网络的不断扩张,用户的数量不断增多,频繁修改 DNS 数据库中的记录真的很麻烦,也给管理员带来了不少麻烦事,所以采用动态 DNS 是最好的解决方案。 Linux 下用动态 DNS 服务的话,修需要 bind8.0 以上的软件,还要 DCCP service v3.0 以上的版本,因为只有 3.0 以上的版本才完全实现了对 DDNS 的支持。因此我们本实验的环境是在 RedHat as 4.2 上完成的。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.      创建密钥:要实现 DNS 的动态更新,为了保证其安全性,需要创建动态更新的密钥,让其在进行更新时通过密钥加以验证。为了实现这一功能,需要一 root 用户的身份登录,创建密钥,注意密钥的存放路径,应该是在 /var/named/chroot/etc 下,截图如下

     <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

    上述 dnssec-keygen 命令的功能就是生成更新密钥,其中参数 -a HMAC-MD5 是指密钥的生成算法采用 HMAC-MD5 ;参数 -b 128 是指密钥的位数为 128 位;参数 -n USER ddns-key 是指密钥的用户为 ddns-key

2.      运行上面那条命令后产生的密钥名称为 Kddns-key.+157+63785 ,那么查看一下该名称的公钥和私钥如下:

    

3.      由于我们待会需要的是密钥里面的信息,即是密钥里面的密文,所以我们可以查看一下公钥和私钥的密文:如下图所示
  

可以从上面的内容可以看出两把钥匙的内容是相同的 该密钥就是 DHCP DNS 进行安全动态更新时的凭据。后面需要将该密钥分别添加到 DNS DHCP 的配置文件中。

4.      编辑 named.conf 主配置文件,增加一个域为 redhat.com ,反向查找为 0.168.192.in-addr.arpa ,同时写入密钥文件的内容,截图如下:
   

注意:将密钥文件的写入是最为重要的, secret 里面得内容是我们上面第 3 所看到的内容,对于 DNS 的配置不清楚的话,可以查看《 DNS 服务器的架设》文档。

5.      DNS 中区域文件的配置如下: yangzexin.redhat.com 的区域配置文件如下:
  

192.168.10.in-addr.arpa 的区域配置文件如下:

  

6.      dhcpd.conf 配置文件进行修改,修改结果如下图所示:

 
注意需要添加红色的部分,这也是提供跟 DNS 验证的东东。至于 DHCP 服务器的配置那就请看《单区域 DHCP 服务器的架设》,而且这个是比较简单的。

7.      启动 DHCP 服务和 DNS 服务,截图如下:
   
  

8.      启动 windows2003 的自动获取 IP 地址和 windows XP 客户端自动获取 IP 地址:截图如下:
  
  

9.  查看 DHCP 服务器中 dhcpd.leasej 记录,查看是不是以上两个 IP 地址别主机所申请了,如下图所示:
  
 

从上面可以看出以上的两台主机在 DHCP 服务器上申请的 IP 地址,同时还向 DNS 服务器发出请求更新(红色部分)。

10.  查看 DNS 日志信息和 DNS 记录的更新情况。
 

DHCP 服务器 192.168.10.100 DNS 服务器提出请求更新,并且将记录添加到了 DNS 的区域文件中去:下面看一下 DNS 的区域文件:
  

11. 查看在客服端能不能对其进行解析,解析情况如下:

   

二.该实验过程中所碰到的问题:

1. 一台主机用了双网卡,同时这两台主机的两块网卡采用了自动获取 IP 地址,结果 DNS 区域文件中的记录总是只有一条记录,这个是为什么呢?

  答:查看了一下 dhcp 服务器向 DNS 服务器提出申请信息时的日志文件,如下图所示:
     

从图中我们可以看出“ update failed: RRset exists(value dependent) ……”从这句话可以看出:由于其中一块网卡的 IP 地址所对应的主机名在这里已经注册了,假设为 abc.redhat.com    192.168.10.198 DNS 中注册了,而此时另一块网卡的 Ip 地址为 192.168.10.196 ,也想进行注册,可是 DNS 是不允许的,因为这块网卡的主机名也是 abc, 这样子的话网络就出现了重命名的现象,所以就只能注册一个,另外一个注册不了。(这个只是个人的见解,也不知道对不对,不过我想应该是没有错的吧!)然而上面的就是后来改成了单网卡,注册成功,而且没有问题。

2. 在做实验的过程中,碰到了下面截图的问题。
 

从这个图中我们很清楚的知道,签名是无效的,也就是 DHCP DNS 请求更新的时候,签名是无效的!结果失败了。

答:其实签名无效是因为在写 dhcpd.conf named.conf 的文件时,密码的匹配和格式的不正确所导致的,因为上面那些密文都是手写进去的,所以结果出现了错误。特别是些如得格式一定要正确。(注:不同版本的 Linux 系统可能写法有所不同的)

    签名无效的另外一个原因就是 DHCP 服务器和 DNS 服务器的时间不同步的问题,导致签名错误,如果 DHCP DNS 分别在不同的机器上实施的话,那么就会产生该问题的,这也是应该值得注意的问题。

3. 在做实验的过程中,碰到了下面截图的问题 .
   

   答:从图中的信息可以看出是权限不够的问题,所以无法创建关于正向查找区域和反向查找区域的日志文件。那么权限在哪里修改呢?看下图几个地方:请确认可以一下其所有组权限和所有组:

            

       上面这个图是我修改过的,原本就是属于 named 组的,但是作为 named 组却没有写入的权限,所以结果就用这么一条命令 chmod 770 var 将其改了,那么在 var 下的子文件呢,也是要进行修改的,因为上面的两个日志文件是存在 named 目录下的,所以现在得看一下 var 目录下的 named 目录的权限了;

           

      上面 named 文件夹的权限也是我修改过的,因为 named 文件夹是属于 named 这个组的,但是这个组却没有写入权限,所以也将其改为 770 的权限了,这样子话,就能够顺利自动的创建正向查找区域和反向查找区域的日志文件了,截图如下:

             

提示:其实有时我们的 dns 配置是没有错误的,但是 DNS 就是跑不起来,其实这个跟 named 用户和 named 组有很大的关系,因为 DNS 能够跑起来,很大程度上是靠 named 用户和 named 组来启动的,从上面的截图可以看出自动产生的系统区域文件都是属于 named 用户和 named 组的,所以这个也是很重要的,有时是用 root 用户和 root 组的,要记得把他们修改过来,特别是在复制模板的时候,要将其所属者和所属组改成 named 用户和 named 组。其实在这个实验中并没有拷贝模板问题,因为安装软件包的时候就已经默认将一切都给搞定了。如果你是在 relhat 5.0 的环境下来搭建 DNS 服务器的时候,是没有已经存在的区域文件,酷似都要去 /usr/share/doc/bind-*/sample/* 目录下拷贝那些文件到 /etc/named/chroot/etc /etc/named/chroot/var/named 目录下,将其所属用户和组改为 named ,默认好像是 root 的,而且要注意权限问题。