两种方法实现DNS主从服务器数据同步
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
两种方法实现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是;
主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 “” {
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 "" 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 “” {
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 "" 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是;
主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 “” {
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 "" 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 “” {
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 "" 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 . IN cernet重载cernet View下的。
修改ZONE文件之后,一定要记得将Serial值改大,然后执行rndc reload,才能实现数据同步。
6.如果有部分外部域名解析不正常的情况,又没有充分的排错时间,可以使用forward 语句规避问题。
如
options {
…
forwarders {202.102.128.68; //连通的两个DNS服务器
202.102.152.3;
};
…
}.
7.主从服务器的时区和时钟要一致,使用ntpdate同步时间。
(作者单位为聊城大学网络信息中心)。