实现DNS主从服务器数据同步方法 [ 网站地图 ]

发表于:2010-1-5 浏览:738 作者: 来源:互联网

关键字:DNS主从服务器,数据同步

描述:  为了保证更好地进行域名解析服务,一般在网络中设置主、从两台DNS服务器。由于当前各ISP间的桥接存在带宽瓶颈,为了使不同ISP的用户快速访问高校内部网站,很多学校在配置域名服务器时都采用了BIND9的

  为了保证更好地进行域名解析服务,一般在网络中设置主、从两台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配置对应

  };

  };

{[csc:pagelist]}

  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同步时间。


站长资讯网 做中国最丰富的资讯网站 沪ICP备05004089号