file "/etc/bind/phoenix.com";
also-notify{ 192.168.1.254; };
};file "/etc/bind/com.phoenix";
also-notify{ 192.168.1.254; };
}; 启动服务器:/etc/init.d/bind9 start
如果没报错,尝试host自己一下吧,比如:
host dns.phoenix.com
host 192.168.0.254
最后说一下dns转发,acl,及主从服务器数据安全传输:
转发就是自己并不直接解析,而是把所有的解析请求转发给自己ISP的服务器,自己本身充当了一个传话筒的角色,在ubuntu/debian系统上,转发和访问控制列表(acl)都是在/etc/bind/named.conf.options配置的,打开该文件,你会看到类似如下的结构:
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
看到forwarders结构没,其实结构已经有了,就是给注释掉了,没配置而已,我们在被注释掉的这几行下面添加上如下内容:
forwarders {
210.22.70.3;
210.22.70.227;
};
dnssec-enable yes;
allow-query {
127.0.0.1;
192.168.0.0/24;
192.168.1.0/24;
};
forwarders 是配置转发给上级服务器的地址,allow-query是限制允许向本机发起查询的子网段,即acl。
主从dns服务器数据库的安全传输,这里假设你的主服务器地址是192.168.0.254/16,从服务器地址是192.168.1.254/16:
首先你需要有两台逻辑独立的机器,物理机虚拟机皆可,都安装了bind9:
我们需要生成一个密匙用于加密传输:
dnssec-keygen -a hmac-md5 -b 128 -n host phoenix.com
然后我们需要新建个密匙文件,其格式如下:
key "transfer" {
algorithm hmac-md5;
secret "---HASHKEY---";
};
把---HASHKEY---部分替换成刚刚生成的密匙对中.private key里包含的hashkey字符串。把这个密匙文件复制到从服务器上(dnssec-keygen生成的密匙对可以删掉了,没有用);
在主服务器上修改/etc/bind/named.conf.local,在文件末尾添加:
include "/etc/bind/transfer";
server 192.168.1.254 {
keys { transfer; };
};
第一句话将刚刚生成的key文件包含进来,其后的结构指定了具有指定ip地址的服务器可以使用指定的key同步本(主)服务器的数据库。
看到本文开头配置主服务器中有also-notify没?那句话就是用来通知从服务器的。
现在我们只需要在从服务器上修改/etc/bind/named.conf.local,在文件末尾添加:
include "/etc/bind/transfer";
zone "phoenix.com" {
type slave;
file "/etc/bind/phoenix.com";
masters { 192.168.0.254; };
allow-notify { 192.168.0.254; };
};
zone "0.168.192.in-addr.arpa" {
type slave;
file "/etc/bind/com.phoenix";
masters { 192.168.0.254; };
allow-notify { 192.168.0.254; };
};
重启主从服务器,去从服务器上找找数据库传输过去没有吧。
双线解析:
很多服务器至少是有两块网卡的,很多企业也喜欢将两块网卡接到两个不同的ISP,这两块网卡所在的子网就不同,那如果我想就同一域名针对不同网卡给出不同的IP地址,这里我们需要用acl {}; 和 view {}; 语句:
注意,一旦你启用了view,bind将会要求你所有的子网都用view语句,包括默认的几个子网,比如127.0.0.0/8, 0.0.0.0/8和255.0.0.0/8 (0.0.0.0/8和255.0.0.0/8这两个子网是不存在的,有兴趣可以看看这两个反向搜索域对应的数据库文件,里面没主机记录,将这两个子网写在dns数据库里是为了防止对这两个子网的解析意外地传到根域服务器去,具体细节参考rfc1912),在debian/ubuntu系统上,我们需要先改/etc/bind/named.conf.default
acl "default" {然后我去回去改/etc/bind/named.conf.local
先是acl{},你可以把不同ISP所拥有的所有子网分门别类放到不同的acl里面去,bind根据dns查询的源IP给不同的解析结果,因为我只有两块网卡,所以这里我只添加两个acl和两个view,事实上你可以添加任意多的acl和view。
acl "lab_hosts" {
192.168.0.0/24;
};
acl "nc_hosts" {
192.168.1.0/24;
};
然后是view{}:
view "lab" {
match-clients { lab_hosts; };
zone "phoenix.com" {
type master;
file "/etc/bind/lab.phoenix.com";
also-notify { 192.168.0.253; };
};
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/com.phoenix.lab";
also-notify { 192.168.0.253; };
};
include "/etc/bind/transfer";
server 192.168.0.253 {
keys { transfer; };
};
};
view "nc" {
match-clients { nc_hosts; };
zone "phoenix.com" {
type master;
file "/etc/bind/nc.phoenix.com";
also-notify { 192.168.1.253; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/com.phoenix.nc";
also-notify { 192.168.1.253; };
};
include "/etc/bind/transfer";
server 192.168.1.253 {
keys { transfer; };
};
};
对应数据库自己改,注意两个view针对同一域名的正向解析数据库名字是不一样的喔,你需要建两个单独的数据库文件,加上两个反向数据库文件,一共四个。
测试:
在主dns上就能测试,把/etc/resolv.conf里的nameserver改成不同网卡对应的IP,host DNS服务器自己的域名试试,不同的nameserver返回不同的IP地址,看到这个效果,恭喜你配置成功。
如果你有配slave DNS,针对单一子网的slave DNS服务器没有必要也用view语句配置,只有在需要做多个子网的slave的情况下,slave DNS才需要用view语句,并且你需要将slave接入所有它备份的子网。
一本完整的bind管理员手册(英语):
http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.html
欢迎关注我的微博 http://weibo.com/pco18
您的顶帖是我发帖的动力↘