分类: LINUX
2009-10-17 15:19:14
互为主从的DNS服务器
Author: Jaylin Zhou
Date: 10/14/2009
环境:三两台装有Red Hat Enterprise Linux 5 update 3的机器。
要求:三台机器分别为A、B和C。用A和B做DNS服务器,C做客户端。当解析sina.com域名时,A为主DNS服务器,B为辅助DNS服务器;当解析yahoo.com域名时,B为主DNS服务器,A为辅助DNS服务器。
A有两个网卡:eth0(192.168.1.4),eth1(192.168.2.4)
B有两个网卡:eth0(192.168.1.10),eth1(192.168.2.10)
C有两个网卡:eth0(192.168.1.6),eth1(192.168.2.6)
这里用192.168.1.0/24做sina.com的解析,用192.168.2.0/24做yahoo.com的解析。
要在A和B上安装下面几个包:
bind-utils-9.3.4-10.P1.el5
bind-chroot-9.3.4-10.P1.el5
bind-9.3.4-10.P1.el5
caching-nameserver-9.3.4-10.P1.el5
首先在A上配置sina.com的正向及反向解析(sina.com的主DNS服务区)
第一步,修改/etc/named.caching-nameserver.conf文件的下面几个地方:
listen-on port 53 { 127.0.0.1; 192.168.1.4; };
allow-query { localhost; any; };
view localhost_resolver {
match-clients { localhost; any; };
match-destinations { localhost; any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
第二步,在/etc/named.rfc1912.zones文件中添加下面两个zone:
zone "sina.com" IN {
type master;
file "sina.com.zone";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "sina.com.local";
allow-update { none; };
};
第三步,在/var/named/chroot/var/named/目录下创建下面两个文件,并把所有者和所有组分别改为root和named:
# touch sina.com.zone sina.com.local
# chown root.named sina.com.zone sina.com.local
第四步,编辑sina.com.zone文件和sina.com.local文件:
# vi sina.com.zone
$TTL 86400
@ IN SOA server1.sina.com. root (括号中的内容中略)
IN NS server1.sina.com.
localhost IN A 127.0.0.1
server1 IN A 192.168.1.4
server2 IN A 192.168.1.10
# vi sina.com.local
$TTL 86400
@ IN SOA server1.sina.com. root@example.com(括号中的内容略)
IN NS server1.sina.com.
4 IN PTR server1.sina.com.
10 IN PTR server2.sina.com.
第五步,在/etc/resolv.conf文件中更改DNS服务器:
nameserver 192.168.1.4
第六步,启动named服务。
在B上配置sina.com的正向及反向解析(sina.com的辅助DNS服务区)
第一步,修改/etc/named.caching-nameserver.conf文件的下面几个地方:
listen-on port 53 { 127.0.0.1; 192.168.1.10; };
allow-query { localhost; any; };
view localhost_resolver {
match-clients { localhost; any; };
match-destinations { localhost; any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
第二步,在/etc/named.rfc1912.zones文件中添加下面两个zone:
zone "sina.com" IN {
type slave;
file "slaves/sina.com.zone";
masters { 192.168.1.4; };
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/sina.com.local";
masters { 192.168.1.4; };
};
第三步,在/etc/resolv.conf文件中更改DNS服务器:
nameserver 192.168.1.10
第四步,启动named服务。
这时候sina.com的主DNS服务器和辅助DNS服务器的配置完毕了。接下来配置yahoo.com的DNS服务器。
首先在B上配置yahoo.com的正向及反向解析(yahoo.com的主DNS服务区)
第一步,修改/etc/named.caching-nameserver.conf文件的下面几个地方:
listen-on port 53 { 127.0.0.1; 192.168.1.10; 192.168.2.10; };
allow-query { localhost; any; };
view localhost_resolver {
match-clients { localhost; any; };
match-destinations { localhost; any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
第二步,在/etc/named.rfc1912.zones文件中再添加下面两个zone:
zone "yahoo.com" IN {
type master;
file "yahoo.com.zone";
allow-update { none; };
};
zone "2.168.192.in-addr.arpa" IN {
type master;
file "yahoo.com.local";
allow-update { none; };
};
第三步,在/var/named/chroot/var/named/目录下创建下面两个文件,并把所有者和所有组分别改为root和named:
# touch yahoo.com.zone yahooo.com.local
# chown root.named yahoo.com.zone yahoo.com.local
第四步,编辑yahoo.com.zone文件和yahoo.com.local文件:
# vi yahoo.com.zone
$TTL 86400
@ IN SOA server1.yahoo.com. root (中间内容略)
IN NS server1.yahoo.com.
localhost IN A 127.0.0.1
server1 IN A 192.168.2.10
server2 IN A 192.168.2.4
# vi yahoo.com.local
$TTL 86400
@ IN SOA server1.yahoo.com. root.localhost (中间内容略).
IN NS server1.yahoo.com.
4 IN PTR server2.yahoo.com.
10 IN PTR server1.yahoo.com.
第五步,在/etc/resolv.conf文件中更改DNS服务器:
nameserver 192.168.2.10
第六步,重新启动named服务。
在A上配置yahoo.com的正向及反向解析(yahoo.com的辅助DNS服务区)
第一步,修改/etc/named.caching-nameserver.conf文件的下面几个地方:
listen-on port 53 { 127.0.0.1; 192.168.1.4; 192.168.2.4; };
allow-query { localhost; any; };
view localhost_resolver {
match-clients { localhost; any; };
match-destinations { localhost; any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
第二步,在/etc/named.rfc1912.zones文件中添加下面两个zone:
zone "yahoo.com" IN {
type slave;
file "slaves/yahoo.com.zone";
masters { 192.168.1.10; };
};
zone "2.168.192.in-addr.arpa" IN {
type slave;
file "slaves/yahoo.com.local";
masters { 192.168.2.10; };
};
第三步,重新启动named服务。
至此,yahoo.com的主DNS服务器和辅助DNS服务器的配置完毕了。
用C机器测试
首先修改/etc/resolv.conf文件:
nameserver 192.168.1.4
其实nameserver可以是A和B的任何一个网卡的IP。
ping server1.sina.com
ping server2.sina.com
ping server1.yahoo.com
ping server2.yahoo.com
都成功。
Trouble-shooting:
1. 编辑yahoo.com.zone文件时,SOA前的@不能删掉。如果删除了,named-checkzone的时候会报错“no owner”。
2. 如果启动named服务时出现permission deny字样,有可能是SELinux的问题。解决方法:
# restorecom -R /var/named/chroot/etc/*
3. 修改了yahoo.com.zone文件后,就算执行rndc reload,也不能生效。解决方法:
将辅助DNS中的slaves目录下同步得到的文件删除,再重新reload一下,然后在客户端上执行rndc flush,将DNS缓存清空。
4. 主DNS服务器和辅助DNS服务器Transfer的时候如果不能同步,查看日志,发现有permission deny或者directory not writable的字样,可能是某个文件的所有者和所有组出错。例如slaves目录的所有者和所有组应该为named和named。
还有一个原因可能导致不能同步。编辑named.rf1912.conf文件时,
zone{}里面
type slave;
file "slaves/xxxx";
可能忘记写slaves了。
5. 如果启动named服务时出现下面的报错提示
dns_rdata_fromtext: jaylin.com.local:10: near 'client.jaylin.com.': bad dotted quad
zone 1.168.192.in-addr.arpa/IN: loading master file jaylin.com.local: bad dotted quad
localhost_resolver/1.168.192.in-addr.arpa/IN: bad dotted quad
那么很有可能是因为在jaylin.com.local文件里,错误的将PTR写成了A,即将反向解析的文件格式(通常以.local结尾)和正向解析的文件格式(通常以.zone结尾)弄混了。这里强调一下,正向解析的文件模板为/var/named/chroot/var/named/localhost.zone文件,反向解析的文件模板为/var/named/chroot/var/named/named.local文件。