[原创] 基于RHEL5构建DDNS服务器

说起DDNS,很多朋友都不是很陌生,DDNS是动态DNS的简称,什么是动态DNS呢?
就是DNS的数据库中的资源记录可以动态变化的DNS. 我们可以在网上申请的免费域名,例如www.oray.net公司提供的域名解析服务就是通过DDNS的原理实现的.我们在家使用的ADSL拨号上网每次下线后重新登录可能获得的IP地址都不是相同的,那么构建个人站点和绑定域名就成为了一个难题,例如我的个人域名: yoyojacky.vicp.net是长期不变的,可是我的IP地址却在动态变化,电信供应商给我的地址一产生变化,用户就无法通过域名快速访问到我的站点了,那么如果使用了DDNS服务的话,我的IP地址再怎么变化,都能够快速的将IP地址与域名的对应关系写入到DNS服务器数据库中,那么用户查询的时候就不会查不到我的地址了.不就实现了动态IP构建站点的作用了吗?

另外,在企业中,因为我们自己构建的DNS服务器的正向和方向解析库里,都是我们自己手工添加的资源记录,这些资源记录手工添加的时候很麻烦,而且容易出错, 试想一下,如果我们的IP地址是通过DHCP获得的,那么DHCP服务器如果能够在分配IP地址给客户端的时候,就把分配给客户端的IP地址和客户端的主机名信息一同更新到DNS的数据库中,那样的话,我们的DNS就不用让管理员手工添加了.这样管理员不就很轻松了吗?
那么如何构建DDNS服务器呢?
我们通过在虚拟机上的RHEL5.0平台来实现这个功能.
1. 环境准备
虚拟机软件: vmware workstation 7.0或更高版本
RHEL5: 安装镜像,如rhel-5-server-i386-dvd.iso
SecureCRT软件或putty软件,实现远程连接,方便复制粘贴.
2. 安装rhel5的系统,请选择字符界面安装,软件包选择上可以选最基本配置,多数软件包都可以无需安装,只需要安装如下几个软件包:
DNS主服务器相关软件包:
[root@rhel5 ~]# rpm -qa |grep bind
bind-libs-9.3.3-7.el5
ypbind-1.19-7.el5
bind-utils-9.3.3-7.el5
bind-chroot-9.3.3-7.el5
bind-9.3.3-7.el5
还有如下DNS配置文件软件包:
[root@rhel5 ~]# rpm -qa |grep caching-nameserver
caching-nameserver-9.3.3-7.el5
DHCP软件包:
[root@rhel5 ~]# rpm -qa | grep dhcp
dhcpv6_client-0.10-33.el5
dhcp-3.0.5-3.el5
[root@rhel5 ~]#
3,规划服务器IP地址及提供分配的地址池范围,域名等信息.
本机主机名: rhel5
主机域名: bizsmooth.org
主机IP地址: 192.168.10.125
子网掩码: 255.255.255.0
地址池范围: 192.168.10.10–192.168.10.100
网关地址: 192.168.10.254
4. 配置DHCP服务器
配置文件我就用secureCRT复制粘贴出来,我的配置文件.
首先,配置一下DNS更新时使用的key,为什么要配置一下key呢?因为DNS是很敏感的服务,是IP数据库,不是谁都能来更新的,使用这个KEY就相当于在验证能够来更新DNS的服务器,例如,我允许哪台DHCP服务器来更新我的DNS数据,如果是授权的,那么就可以来更新了,谁是被授权的呢? 区分它们的方法就是: 谁有密钥,谁就是被授权的. 这也有个隐患,万一有人不小心泄露了这个key,那么意味着任何拥有key的DHCP就可以颠覆你的DNS服务器了….
生成key的方法如下:
[root@rhel5 ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n USER DDNS
Kddns.+157+43737
[root@rhel5 ~]# ls
anaconda-ks.cfg install.log.syslog

Kddns.+157+43737.private

Kddns.+157+43737.key

其中 Kddns.+157+43737.key 就是我们后面实验需要用到的文件.
我们查看一下内容:
[root@rhel5 ~]#
[root@rhel5 ~]# cat Kddns.+157+43737.key
DDNS. IN KEY 0 3 157 KL15AR7+p/SChnABmSWy3Q==
[root@rhel5 ~]#
发现内容很少,其中有一段信息是很关键的内容, 就是: KL15AR7+p/SChnABmSWy3Q== 这段加密的代码,切记要保存好.
下面先解释一下这个命令的作用:
上述dnssec-keygen命令的功能就是生成更新密钥,其中参数-a HMAC-MD5是指密钥的生
成算法采用HMAC-MD5;参数-b 128是指密钥的位数为128位;参数-n USER DDNS 的意思是生成的密钥关联到DDNS这个用户,这个用户不是本地帐户,可以认为是虚拟的用户.更多内容请你自己man dnssec-keygen,内容很详细也很周到.哈哈
5.配置DHCP服务器:
配置DHCP服务器就是咱们网高课程的内容了,不知道怎么配的同学,罚做俯卧撑…..
配置步骤如下:
[root@rhel5 ~]# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
cp: overwrite `/etc/dhcpd.conf’? y
[root@rhel5 ~]#
[root@rhel5 ~]# vim /etc/dhcpd.conf
编辑内容如下:
[root@rhel5 ~]# cat /etc/dhcpd.conf

ddns-update-style interim;

ignore client-updates;
################################################
# DDNS CONFIGURATION SECTION #
################################################

key DDNS { # 这里是定义key DDNS
algorithm HMAC-MD5; # 定义加密算法为: HMAC-MD5
secret KL15AR7+p/SChnABmSWy3Q==; # 这里是定义刚才生成的DNS更新时使用的KEY, 非常关键!!!
# 其中algorithm 后的是生成key的算法,key的生成是用
#dnssec-keygen -a HMAC-MD5 -b 128 -n USER DDNS生成的那个key的内容中的后半段哦.切记不要搞错了,关键步骤这里容易出错,如果实验失败,排错的时候优先考虑这里…
};
zone bizsmooth.org. { #这里定义允许执行DDNS更新的DNS区域.这里是bizsmooth.org这个区域.
primary 127.0.0.1; #这里定义的是被更新的DNS服务器地址是多少,由于DHCP和DNS是在一台机器上实验,所以写了本机.
key DDNS; # 这里定义更新使用的key相关验证模块.
}
zone 10.168.192.in-addr.arpa. { #这里定义反向更新的信息,参考正向的配置描述来理解吧.
primary 127.0.0.1;
key DDNS;
}

###############################################

subnet 192.168.10.0 netmask 255.255.255.0

#定义服务的网络

{

# — default gateway
option routers 192.168.10.254; #定义网关
option subnet-mask 255.255.255.0; # 定义子网掩码

# option nis-domain “domain.org”;
option domain-name “bizsmooth.org”; # 定义域名后缀
option domain-name-servers 192.168.10.125; # 定义DNS服务器IP地址

option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# — Selects point-to-point node (default is hybrid). Don’t change this unless
# — you understand Netbios very well
# option netbios-node-type 2;

range dynamic-bootp 192.168.10.10 192.168.10.100;

#定义地址池

default-lease-time 21600;
max-lease-time 43200;

# we want the nameserver to appear at a fixed address
# host ns {
# next-server marvin.redhat.com;
# hardware ethernet 12:34:56:78:AB:CD;
# fixed-address 207.175.42.254;
# }
}
[root@rhel5 ~]#
[root@rhel5 ~]# service dhcpd start
Starting dhcpd: [ OK ]
[root@rhel5 ~]# chkconfig dhcpd on
启动正常了记得配置dhcpd在开机时自动加载…
6. 配置DNS服务器:
a.配置/var/named/chroot/etc/named.caching-nameserver.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE – use system-config-bind or an editor
// to create named.conf – edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
// listen-on port 53 { 127.0.0.1; }; # 监听端口,注释了,默认就是TCP/UDP的53端口.
// listen-on-v6 port 53 { ::1; }; #ipv6没有启用,所以也关闭了.
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
query-source port 53;
// query-source-v6 port 53; #ipv6没有启用,所以监听端口也注释掉
// allow-query { localhost; }; #允许查询的客户端, 这里定义的是localhost,如果想定义为any也可以,我直接注释了.
};
logging {
channel default_debug {
file “data/named.run”;
severity dynamic;
};
};
view localhost_resolver {
// match-clients { localhost; }; #视图功能注释掉了,没有这个需要,简化一下.
// match-destinations { localhost; }; # 视图功能注释掉了
recursion yes;
include “/etc/named.rfc1912.zones”;
};

b. 修改/var/named/chroot/etc/named.rfc1912.zones区域配置文件.
[root@rhel5 etc]# vim named.rfc1912.zones

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// Following configuration is DDNS’s configuration.
////////////////////////////////////////////////////////////
key DDNS {
algorithm HMAC-MD5;
secret KL15AR7+p/SChnABmSWy3Q==;
};
///////////////////////////////////////////////////////////

zone “.” IN {
type hint;
file “named.ca”;
};

zone “localdomain” IN {
type master;
file “localdomain.zone”;
allow-update { none; };
};

zone “localhost” IN {
type master;
file “localhost.zone”;
allow-update { none; };
};

zone “0.0.127.in-addr.arpa” IN {
type master;
file “named.local”;
allow-update { none; };
};

zone “bizsmooth.org” IN {
type master;
file “bizsmooth.zone”;
allow-update { key DDNS; };
};

zone “10.168.192.in-addr.arpa” IN {
type master;
file “bizsmooth.local”;
allow-update { key DDNS; };
};
“named.rfc1912.zones” 69L, 1412C written
[root@rhel5 etc]#
关键的位置是在配置文件里面要有这段内容:
key DDNS {
algorithm HMAC-MD5;
secret “KL15AR7+p/SChnABmSWy3Q==”; #这里的密文我用双引号引起来了,因为这串乱码里面有/,在Linux中有特殊含义,所以需要用双引号引用,说明是字符串.不然启动DNS服务器的时候会报错.
};
还有这段内容:
zone “bizsmooth.org” IN {
type master;
file “bizsmooth.zone”;
allow-update { key DDNS; };
};

zone “10.168.192.in-addr.arpa” IN {
type master;
file “bizsmooth.local”;
allow-update { key DDNS; };
};
第一段内容是告诉DNS服务器,这个密钥是将来DHCP来验证时候使用的密钥,第二段内容不仅宣告了DNS服务器管理的区域,同时还通过allow-update来实现通过key DDNS来执行验证操作.
接着就是去配置正向区域文件数据库和反向区域文件数据库了.我这里简单的写入了几个简单的记录,如下所示:
[root@rhel5 named]# pwd
/var/named/chroot/var/named
[root@rhel5 named]#
[root@rhel5 named]# ls
bizsmooth.local localdomain.zone named.ca named.zero
bizsmooth.zone localhost.zone named.ip6.local slaves
data named.broadcast named.local
[root@rhel5 named]#
其中的bizsmooth.zone和bizsmooth.local就是正向和反向配置文件数据库.
我们看看bizsmooth.zone里面的内容:
$TTL 86400
@ IN SOA rhel5.bizsmooth.com. root.bizsmooth.com. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

IN NS rhel5.bizsmooth.com.
IN MX 10 rhel5.bizsmooth.com.
rhel5 IN A 192.168.10.125
www IN CNAME rhel5.bizsmooth.com.
在看看反向配置文件的内容:

About 李 伟斌

Just K.I.S.S To Be Or Not To Be, It's Your Qustion. --Keep It Simple & Stupid.
This entry was posted in Linux and tagged , , , , , , , , . Bookmark the permalink.

2 Responses to [原创] 基于RHEL5构建DDNS服务器

  1. 王 淑娟 says:

    李老师:以前您跟我提到过,一直没去做实验,看了下您的文章,好像觉得有点信心,回头做实验时找您咨询下。要是您把验证结果也写上去抓图就太全了,呵呵,辛苦了。

发表评论