在CentOS下配置DDNS并实现动态更新
由于项目需要,最近在CentOS 6系统中配置了一个DDNS(Dynamic DNS)服务器,
从而实现了动态对域名的添加删除等操作,记录一下步骤,备忘。
第一步 安装BIND
BIND全称是Berkeley Internet Name Daemon,是现今互联网上最常用的DNS服务
器软件,现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。
在CentOS上安装BIND非常的简单,只需要使用root权限执行:
yum install bind bind-utils
就可以安装好BIND以及DNS相关的一些工具,包括dig以及nsupdate等,需要注意的是,在CentOS上,BIND实际的服务名是named,因此需要使用:
service named start|stop|restart
来对BIND进行操作。
第二步 配置静态DNS
在配置动态DNS之前,首先配置一个静态的DNS,来测试一下BIND能否正常工作。
打开/etc/named.conf文件:
vim /etc/named.conf
在文件的末尾,加上:
zone “mytest.com” IN {
type master;
file “mytest.com”;
allow-update { none; };
};
这里,声明了一个新的zone:”mytest.com”,并且指明了zone文件为”mytest.com”,根据文件上方指定的目录,默认的zone文件存放在/var/named目录下。
因此,我们需要在这个目录下,新建一个”mytest.com”文件,用来存放zone描述。
vim /var/named/mytest.com
在文件中输入以下内容:
$TTL 1D ;声明了TTL时间为1天
@ IN SOA @ mytest.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
$ORIGIN mytest.com. ;表示接下来的配置都已mytest.com.为根
;如果不写这一行,就需要写全整个域名
;如test1.mytest.com.而不是下面的test1
NS @ ;NS记录,指向根
@ A 127.0.0.1 ;根,指向127.0.0.1
test1 A 1.1.1.1 ;A记录test1,指向1.1.1.1
test2 A 2.2.2.2 ;A记录test2,指向2.2.2.2
保存文件,需要注意的是,named运行时是以named组的named用户来执行的,因此必须给named这个用户访问/var/named/mytest.com这个文件的权限,我们直接把这个文件的所有者设置为named。
chown named:named /var/named/mytest.com
好了,设置完成,启动named。
service named start
启动完成之后,来测试一下:
dig test1.mytest.com @127.0.0.1
看一下结果:
...
;; ANSWER SECTION:
test1.mytest.com. 86400 IN A 1.1.1.1
...
指向了1.1.1.1,说明静态DNS配置成功。
第三步 配置动态DNS
首先,我们需要生成一个Key,用于更新记录的授权。这里使用了HMAC-MD5算法来生成Key。运行:
dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 512 -n HOST mytest.com
会得到2个文件,分别以.key和.private结尾:
Kmytest.com.+157+54894.key Kmytest.com.+157+54894.private
我们需要的是.private Key的内容:
;Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: Tf2lJsSSrSMcu2RvfnLWqwno9drVpQFLk8XkR7BIYWuQF17q/miYa6HfDhDaUCH2x4Bc3ea/Q6Bntod9/sLGdg==
Bits: AAA=
Created: 20141206031434
Publish: 20141206031434
Activate: 20141206031434
在/etc/named.conf中,zone “mytest.com”之前加上:
key “mytestcom” {
algorithm hmac-md5;
secret “Tf2lJsSSrSMcu2RvfnLWqwno9drVpQFLk8XkR7BIYWuQF17q/miYa6HfDhDaUCH2x4Bc3ea/Q6Bntod9/sLGdg==”;
};
其中key的名字随便起,secret就是刚刚生成的Key那个字段。
然后继续修改文件末尾zone的定义:
zone “mytest.com” IN {
type master;
file “mytest.com”;
allow-update { key mytestcom; };
允许mytestcom的key对zone进行更新。
同时,由于动态更新需要在/var/named写入jnl文件。所以需要将/var/named的所有者更改为named:
chown named:named /var/named
同时,selinux也有可能限制named写入文件,需要关闭:
# setsebool named_write_master_zones true
设置完成后。重启named:
# service named restart
第四步 动态更新DNS
使用nsupdate命令对DNS进行更新:
# nsupdate
> server 127.0.0.1 53
> zone mytest.com
> key mytestcom Tf2lJsSSrSMcu2RvfnLWqwno9drVpQFLk8XkR7BIYWuQF17q/miYa6HfDhDaUCH2x4Bc3ea/Q6Bntod9/sLGdg==
> update add test3.mytest.com 600 A 3.3.3.3
> send
完成后使用dig测试一下:
dig test3.mytest.com @127.0.0.1
结果:
;; ANSWER SECTION:
test3.mytest.com. 600 IN A 3.3.3.3
成功!