当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > Linux系统下的动态DNS服务配置方法详解

Linux服务器
Linux上双网卡绑定方法(Suse9SP3)
Linux操作系统调优参数的意义
Linux下使用SSH客户端及其Sftp文件传送
教你恢复被误删除的Linux文件
SQL Server注入大全及防御
Linux无法解析域名的解决办法
Linux系统下安装和配置MyEclipse的方法
Ubuntu下VirtualBox 1.4.0设置文件共享
Windows与Linux系统共享StarDict字典文件
修改Linux下相关的登陆信息
Windows通过SecureCRT远程登录Linux主机
Linux操作系统如何修改SWAP交换区的大小
Linux操作系统下为Apache目录添加密码
Linux时间设置与同步(NTP)
Linux内核补丁AMD旁路转换缓冲(TLB)错误
Linux架设DHCP服务器的方法
Fedora 8下Apache配置与管理
Linux操作系统下用单网卡捆绑双IP的方法
Ubuntu Linux系统环境变量配置文件
SUSE Linux中将Tomcat作为Service运行

Linux服务器 中的 Linux系统下的动态DNS服务配置方法详解


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 149 ::
收藏到网摘: n/a

在网络管理中,对于DNS服务的管理是一项基础性的工作。随着用户规模的扩大,频繁地手工修改DNS的区域数据库文件不是一件轻松的工作。关于动态DNS(DDNS)的研究逐渐引起了人们的关注,不同的平台都推出了自己的解决方案。本文将详细介绍Linux环境下DDNS的解决方案,即由InternetSoftwareConsortium(ISC)开发的BIND-DNS和DHCP(DynamicHostConfigureProtocol,动态主机配置协议)协同工作,进而共同实现DDNS的方法。

在Linux下实现动态DNS不仅需要Bind8以上的DNS软件,还要有DHCPServerv3.0以上版本,因为只有3.0以上的版本才完全实现了对DDNS的支持。因此,本文的实现环境采用SlackwareLinux9.0作为DDNS服务器,其上同时运行DNS和DHCP服务,其中DNSServer采用Bind9.2.2,DHCPServer采用DHCPServerv3.0pl2。

下面详细介绍Linux环境下安全、动态DNS的实现方法。

创建密钥

要实现DNS的动态更新,首先要考虑的是怎样保证安全地实现DDNS。由ISC给出的方法是创建进行动态更新的密钥,在进行更新时通过该密钥加以验证。为了实现这一功能,需要以root身份运行以下命令:

root@slack9:/etc#dnssec-keygen-aHMAC-MD5-b128-nUSERmyddns

Kmyddns.+157+37662

上述dnssec-keygen命令的功能就是生成更新密钥,其中参数-aHMAC-MD5是指密钥的生成算法采用HMAC-MD5;参数-b128是指密钥的位数为128位;参数-nUSERmyddns是指密钥的用户为myddns。

该命令生成的一对密钥文件如下:

-rw——1rootroot48Jan1418:26Kmyddns.+157+37662.key

-rw——1rootroot81Jan1418:26Kmyddns.+157+37662.private

可以查看刚生成的密钥文件内容:

root@slack9:/etc#catKmyddns.+157+37662.key

myddns.INKEY021574gEF1Mkmn5hrlwYUeGJV3g==

root@slack9:/etc#catKmyddns.+157+37662.private

Private-key-format:v1.2

Algorithm:157(HMAC_MD5)

Key:4gEF1Mkmn5hrlwYUeGJV3g==

仔细阅读该密钥文件就会发现,这两个文件中包含的密钥是一样的,该密钥就是DHCP对DNS进行安全动态更新时的凭据。后面需要将该密钥分别添加到DNS和DHCP的配置文件中。

修改DNS的主配置文件

密钥生成后就要开始对/etc/named.conf文件进行编辑修改,主要目的是将密钥信息添加到DNS的主配置文件中。本文给出修改后的/etc/named.conf的一个实例:

options{directory"/var/named";file://指定区域数据库文件的存放目录};zone"."IN{typehint;file"caching-example/named.ca";};zone"localhost"IN{typemaster;file"caching-example/localhost.zone";allow-update{none;};};zone"0.0.127.in-addr.arpa"IN{typemaster;file"caching-example/named.local";allow-update{none;};};keymyddns{algorithmHMAC-MD5.SIG-ALG.REG.INT;file://指明生成密钥的算法secret4gEF1Mkmn5hrlwYUeGJV3g==;file://指明密钥};zone"tcbuu.cn"IN{typemaster;file"tcbuu.cn";file://正向区域文件名tcbuu.cn,后文会用到该文件allow-update{keymyddns;};file://指明采用keymyddns作为密钥的用户可以动态更新该区域“tcbuu.cn”};zone"1.22.10.in-addr.arpa"IN{typemaster;file"tcbuu.cn.arpa";//反向区域文件名tcbuu.cnallow-update{keymyddns;};file://指明采用keymyddns作为密钥的用户可以动态更新该区域“1.22.10.in-addr.arpa”};
在/etc/named.conf中可以定义多个区域,只要在允许动态更新的区域中增加allow-update{keymyddns;}指令,即可实现动态更新,并且只有拥有keymyddns实体(在本文的实现中该实体就是拥有同样密钥的DHCP服务器)才能实现对该区域进行安全地动态更新。相比原来只限定IP地址的方法,该方法要安全得多。

至此完成对DNS服务器的配置,可以执行#named运行DNS服务。

修改DHCP的配置文件

DHCP的主要功能是为DHCP客户动态地分配IP地址、掩码、网关等内容。正是由于DHCP的动态特性,在实现DDNS时,DHCP成为首选方案。

给出修改后的/etc/dhcpd.conf的一个实例:

#dhcpd.conf#SampleconfigurationfileforISCdhcpd#optiondefinitionscommontoallsupportednetworks...optiondomain-name"tcbuu.cn";optiondomain-name-servers10.22.1.123;default-lease-time600;max-lease-time800;ddns-update-styleinterim;file://指明实现动态DNS的方法为interimsubnet10.22.1.0netmask255.255.255.0{range10.22.1.6010.22.1.69;//地址池optionbroadcast-address10.22.1.255;optionrouters10.22.1.100;}keymyddns{//指明密钥生成的算法及密钥algorithmHMAC-MD5.SIG-ALG.REG.INT;secret4gEF1Mkmn5hrlwYUeGJV3g==;}zonetcbuu.cn.{primary10.22.1.123;keymyddns;//指明更新时采取的密钥keymyddns}zone1.22.10.in-addr.arpa.{primary10.22.1.123;keymyddns;//指明更新时采取的密钥keymyddns} 
说明:

1.ddns-update-styleinterim

由ISC开发的DHCP服务器目前主要支持interim方法来进行DNS的动态更新,另外一种称为ad-hoc的方法基本上已经不再采用。因此,实际上,interim方法是目前Linux环境下通过DHCP实现安全DDNS更新的惟一方法。

2.keymyddns{//指明密钥生成的算法及密钥

algorithmHMAC-MD5.SIG-ALG.REG.INT;

secret4gEF1Mkmn5hrlwYUeGJV3g==;

}

此段内容与/etc/named.conf中的完全一样。需要注意的是,在编辑/etc/dhcpd.conf时,{}的末尾没有“;”,这是与/etc/named.conf中不一样的地方。

3.在/etc/dhcpd.conf中指明的区域名称后面一定要以“.”结尾。因此zonetcbuu.cn.中的cn和zone1.22.10.in-addr.arpa.中的arpa后面一定要有“.”。

/etc/dhcpd.conf配置完成,可以执行#dhcpd将DHCP服务运行起来。

测试DDNS

经过上述服务器的配置,现在可以检测一下DDNS的实现过程。

当DNS配置成支持动态更新后,在/var/named/目录下会多出两个以.jnl结尾的二进制格式区域文件。这两个文件是当前正在工作的区域文件的运行时文件,所有动态更新的纪录都会最先反映到这两个文件中,然后经过大约15分钟左右才将更新的内容反映到文本形式的区域文件中,即以.jnl结尾的区域文件中是最新的内容。

在本文所举实例中,/var/named/目录下的区域文件为:

tcbuu.cn正向区域文件。

tcbuu.cn.arpa反向区域文件。

tcbuu.cn.arpa.jnl临时工作的二进制正向区域文件(新增)。

tcbuu.cn.jnl临时工作的二进制反向区域文件(新增)。

1.以Windows2000作为DHCP客户端测试

(1)设客户机的主机名为kill-virus,执行ipconfig/all显示所获得的IP地址为10.22.1.69。

(2)在客户端执行nslookup测试。

C:\DocumentsandSettings\Administrator>nslookup

DefaultServer:slack9.tcbuu.cn

Address:10.22.1.123

>kill-virus.tcbuu.cn//测试客户机FQDN在区域文件中是否存在

Server:slack9.tcbuu.cn

Address:10.22.1.123

Name:kill-virus.tcbuu.cn

Address:10.22.1.69//测试结果,表明该资源纪录存在

(3)在客户机kill-virus上执行ipconfig/release释放获得的IP地址。

(4)在客户机kill-virus上执行ipconfig/renew重新获得IP地址。

(5)用nslookup显示区域数据库中的内容。

C:\DocumentsandSettings\Administrator>nslookup

DefaultServer:slack9.tcbuu.cn

Address:10.22.1.123

>lstcbuu.cn//显示区域数据库中的资源纪录

[ftp.tcbuu.cn]

tcbuu.cn.NSserver=slack9.tcbuu.cn

D2501A10.22.1.60

dellpcA10.22.1.100

kill-virusA10.22.1.61file://IP地址发生变化

slack9A10.22.1.123

以上测试说明同一台客户机kill-virus通过DHCP服务可以先后获得IP地址,并与动态DNS服务器建立联系,使该客户机的主机名与获得的IP地址一同作为一条纪录动态地更新到正向区域文件中去。可以采用同样的方法测试反向区域的更新,不再赘述。

2.用LinuxDHCP客户端测试

在LinuxDHCP客户端进行测试时,需要执行dhcpcd守护进程。如果要进行动态更新,还需要加上-h参数。执行的命令格式如下:

#dhcpcd-hMyLinux

其中-h后面跟的是本机的主机名,用来通过DHCP服务注册到DDNS服务器的区域文件中,是进行动态更新必不可少的。

动态更新后的区域数据库文件

通过查看正向区域数据库文件/var/named/tcbuu.cn和反向区域数据库文件/var/named/tcbuu.cn,可以了解区域数据库文件到底更新了哪些内容。

#cat/var/named/tcbuu.cn

$ORIGIN.

$TTL36000;10hours

tcbuu.cnINSOAslack9.tcbuu.cn.root.slack9.tcbuu.cn.(

2004011402;serial

3600;refresh(1hour)

1800;retry(30minutes)

36000;expire(10hours)

36000;minimum(10hours)

)

NSslack9.tcbuu.cn.

$ORIGINtcbuu.cn.

dellpcA10.22.1.100

ftpCNAMEslack9

$TTL300;5minutes

kill-virusA10.22.1.61

TXT"3156e87eb0180675cfb5e3e8ad026e78b3"

$TTL36000;10hours

slack9A10.22.1.123

wwwCNAMEslack9

以上区域文件的书写格式与更新前相比变化较大,说明该文件已被更新过了。这里还要说明的是,在动态更新的客户端kill-virus的A纪录下多了一条同名的TXT类型的纪录。TXT类型纪录是BIND-DNS和DHCP专门用来实现DDNS的辅助性资源纪录,它的值是哈希标示符字符串,该字符串的值还可以在/var/state/dhcp/dhcpd.leases文件中找到。

总的来说,在Linux下通过DHCP实现安全DDNS的过程可分为三步:第一,创建进行安全动态更新的密钥;第二,修改DNS的主配置文件/etc/named.conf,目的是定义采用动态更新的密钥及指定可以动态更新的区域;第三,修改DHCP的配置文件/etc/dhcpd.conf,目的是定义采用动态更新的密钥及指定动态更新哪些区域。

上一页[1][2][3][4][5]