两种方法实现DNS主从服务器数据同步
两种方法实现DNS 主从服务器数据同步为了保证更好地进行域名解析服务,一般在网络中设置主、从两台DNS 服务器。由于当前各ISP 间的桥接存在带宽瓶颈,为了使不同ISP 的用户快速访问高校内部网站,很
两种方法实现DNS 主从服务器数据同步
为了保证更好地进行域名解析服务,一般在网络中设置主、从两台DNS 服务器。由于当前各ISP 间的桥接存在带宽瓶颈,为了使不同ISP 的用户快速访问高校内部网站,很多学校在配置域名服务器时都采用了BIND 9的VIEW 功能。其实现原理如下:对于发出域名解析请求的不同源IP 地址,针对同一域名解析到不同的目的IP 地址,即用户通过最短路径到达欲访问的网站。举例来说,对于校内同一台服务器,教育网用户发出的访问请求解析到的域名IP 地址是位于教育网上的服务器地址,网通用户解析到的域名IP 地址是网通上的服务器地址,这样使用户能够访问到最快的服务器。
主域名服务器使用的VIEW 分界,按照不同查询来源地址来回应不同的答案,这对于一般的查询工作是非常高效的。但是当从服务器进行SOA 查询或者做Transfer 时,如果主服务器看到客户端请求,只能回应该客户端所在的VIEW ,而不能顺利完成其他VIEW 的同步。保证主从域名服务器的数据同步,就是为域名服务正常工作提供保障。因此,如何保证域名系统的主从服务器的数据同步性,就显得极为重要。本文分别利用BIND 9的
TRANSFER-SOURCE 功能和TSIGKEY 功能,阐述了这一问题的两种不同的解决方案。 触发同步的过程
首先介绍主从服务器的同步过程。触发同步过程的原因有4种:1. 从域名服务器刚刚启动;2. 主域名服务器的Serial 值增大;3. 执行了rndc reload命令;4. 到了主从服务器的同步更新时间。
主从域名服务器开始同步(见图1):
1. 主服务器向从服务器发送notify 消息
2. 从服务器收到主服务器发送notify 消息,向主服务器返回一个notify response消息。
3. 从服务器向主服务器发送SOA query消息。
4. 主服务器向从服务器返回SOA response消息。
5. 从服务器收到SOA response消息后,比对自身的Serial 值,如果发现主服务器的Serial 值大于自身的Serial 值,那么就发送Zone transfer request消息。
6. 主服务器返回Zone transfer response消息。
7. 主服务器执行Zone transfer。
两种主从服务器的数据同步法
根据主从服务器的同步步骤,要解决域名服务器的同步问题,主要问题是如何标识主服务器的notify 消息,即notify 消息隶属于哪个VIEW 、从服务器如何识别notify 消息。同样,notify response消息、SOA query、SOA response消息、Zone transfer request消息、Zone transfer response消息、Zone transfer的数据也存在类似的问题。Bind 9提供了两种标识此类信息的方法:1. 利用TRANSFER-SOURCE 功能,从服务器需要设置和VIEW 一一对应的IP 地址;2. 利用TSIGKEY 功能对消息进行加密。
利用TRANSFER-SOURCE 功能
环境假定:授权domain 是test.lcu.edu.cn;
,主DNS 的IP 地址是210.44.112.66(DNS包含Internet 和Cernet 两个VIEW) ;
从DNS 的IP 地址是210.44.112.67(对应Cernet View)和210.44.112.68(对应Internet View) 。
1. 对主DNS 的配置
include “/etc/cernet.cfg”; //指定教育网地址文件, 可以根据自己的配置来进行灵活配置。 view “cernet” { //定义了一个Cernet view
match-clients {!210.44.112.68;cernet; }; //cernet是cernet.cfg 定义的教育网ACL zone "." IN {
type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type master;
file “cernet.zone” ;
allow-transfer { 210.44.112.67; };//使用210.44.112.67作Cernet zone transfer };
};
view "internet" {
match-clients {!210.44.112.67; any; };
recursion no;
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type master;
file "internet.zone";
allow-transfer { 210.44.112.68; }; //使用210.44.112.68作Internet zone transfer };
};
2. 对从服务器的配置
include “/etc/cernet.cfg”; //指定教育网地址文件, 可以根据自己的配置来进行灵活配置。 view “cernet” {
match-clients {cernet; }; //cernet是cernet.cfg 定义的教育网ACL
zone "." IN {
type hint;
file "named.root";
,};
zone “test.lcu.edu.cn” {
type slave;
file “slave.cernet.zone” ;
masters { 210.44.112.66; };
allow-source { 210.44.112.67; };//和主DNS 配置对应
};
};
view "internet" {
match-clients {any; };
recursion no;
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type slave;
file "slave.internet.zone";
masters { 210.44.112.66; };
allow-source { 210.44.112.68; }; //和主DNS 配置对应
};
};
3. 配置分析
在主服务器端配置VIEW 中的match-client 和allow-transfer 标示信息,在从服务器端配置VIEW 中的masters 和allow-source 标识信息,这样做可以解决主从服务器同步问题。 利用TSIGKEY 功能
环境假定:授权域domain 是test.lcu.edu.cn ;
主DNS 的IP 地址是210.44.112.66(DNS包含Internet 和Cernet 两个VIEW) ; 从DNS 的IP 地址是210.44.112.67。
1. 对主服务器的配置
include “/etc/cernet.cfg”; //指定教育网地址文件, 可以根据自己的配置来进行灵活配置。 view “cernet” { //定义了一个Cernet view
match-clients { key cernetkey; cernet; }; //范围是匹配这些用 cernetkey 加密 的以及 cernet 地址(?)
allow-transfer { key cernetkey; };
//只允许用 cernetkey 加密过的 zone transfer 请求
,server 210.44.112.67 { keys cernetkey; }; // 向从服务器发送消息时,用 cernetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type master;
file “cernet.zone” ;
};
};
view "internet" {
match-clients {key internetkey; any; };
recursion no;
allow-transfer { key internetkey; }; // 只允许用 internetkey 加密过的 zone transfer 请求
server 210.44.112.67 { keys internetkey; }; // 向从服务器发送消息时,用 internetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type master;
file "internet.zone";
};
};
2. 对从服务器的配置
include “/etc/cernet.cfg”; //指定教育网地址文件, 可以根据自己的配置来进行灵活配置。 view “cernet” { //定义了一个Cernet view
match-clients { key cernetkey ;cernet; }; //范围是匹配这些用 cernetkey 加密的,以及 cernet 地址
allow-transfer {none };
// 禁止任何 zone transfer 请求
server 210.44.112.66 { keys cernetkey; };
// 向主服务器发送消息时,用 cernetkey 加密
zone "." IN {
,type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type slave;
masters {210.44.112.66;};
file “cernet.zone” ;
};
};
view "internet" {
match-clients {key internetkey; any; };
recursion no;
allow-transfer { none}; // 禁止任何 zone transfer 请求
server 210.44.112.66 { keys internetkey; };
// 向主服务器发送消息时,用 internetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type slave;
masters {210.44.112.66;};
file "internet.zone";
};
};
使用dnssec-keygen 命令生成 TSIG key。具体命令如下:
/usr/sbin/dnssec-keygen -a alg -b bits [-n type] [options] name
3. 配置分析
使用TSIG 对主从DNS 配置,VIEW 和KEY 一一对应,从而解决了主从服务器间的消息标示问题。
两方法的优缺点
两种方法比较而言,使用TRANSFER-SOURCE 功能,需要多设置几个IP 地址,配置相对简单,原理容易理解,但是造成一定的IP 地址浪费。使用TSIG KEY方法,要准备KEY 文件,并且KEY 文件和VIEW 要一一对应,做起来比较繁琐。
配置技巧
配置过程中的技巧及常见问题:
,1. 在配置文件中使用include 语句,增加文件的可读性。像各种ACL ,KEY 文件都可以使用include 语句,在很大程度上减小了主配置文件的大小。
例:include ”/etc/cernet.cfg”;
2. 开始配置服务器时,关掉Linux 的SElinux 功能,因为SElinux 功能会带来意想不到的麻烦。
3. 遇到问题时,多使用tail –f /var/log/messages查看日志。
4.BIND 工作不正常时,如果发现日志中有permission denied的字样,可以把所有的配置文件权限改大,规避问题。
5. 使用rndc reload test.lcu.edu.cn. IN cernet重载cernet View下的test.lcu.edu.cn 。修改ZONE 文件之后,一定要记得将Serial 值改大,然后执行rndc reload,才能实现数据同步。
6. 如果有部分外部域名解析不正常的情况,又没有充分的排错时间,可以使用forward 语句规避问题。如
options {
…
forwarders {202.102.128.68; //连通的两个DNS 服务器
202.102.152.3;
};
…
}.
7. 主从服务器的时区和时钟要一致,使用ntpdate 同步时间。
(作者单位为聊城大学网络信息中心)