Contents
参考文档
1.鸟哥的Linux私房菜-DNS Server: http://linux.vbird.org/linux_server/0350dns.php
2.BIND-Documentation: https://kb.isc.org/article/AA-01031
3.RFC 1035 http://tools.ietf.org/html/rfc1035
4.RFC 1034 http://tools.ietf.org/html/rfc1034
安装
[root@server1 ~]# yum install bind bind-chroot bind-utils
Bind的配置文件在/etc/named.conf和/var/named/中。
设置监听网卡
监听所有网卡,在 /etc/named.conf 中修改成:
listen-on port 53 { any; };
修改防火墙规则
在/etc/sysconfig/iptables的适当位置增加规则。
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT
正解
定义Zone
要配置test.com这个domain的正解,首先要在/etc/named.conf中添加
zone "test.com" IN { type master; file "named.test"; };
NS记录
在/var/named/named.test中添加记录(文件需要自己建立)。
$TTL 3H @ IN SOA root root ( 20 ; serial 300 ; refresh 200 ; retry 900 ; expire 3H ) ; minimum @ NS master.test.com. master.test.com. A 192.168.122.100
NS记录是需要有的。一般指定DNS Server的IP为NS。
A记录
A记录是一个IPv4记录,可以将域名解析成IP地址。
在/var/named/named.test文件继续添加
hehe.test.com. A 192.168.122.50
这条记录表示hehe.test.com对应的IP是192.168.122.50(记得最后要加点号)
也可以写成
hehe A 192.168.122.50
同样表示slave.test.com对应IP是192.168.122.50;
CNAME记录
haha CNAME hehe
设置了CNAME之后,haha会解析成hehe,然后解析hehe的记录是192.168.122.50;
MX记录
MX记录设定一个domain的邮件服务器地址。
@ MX 5 mail mail A 192.168.122.50
客户端可以用dig命令查询
# dig -t mx test.com
最后的/var/named/named.test是这样的
$TTL 3H @ IN SOA root root ( 20 ; serial 300 ; refresh 200 ; retry 900 ; expire 3H ) ; minimum @ NS master.test.com. master.test.com. A 192.168.122.100 hehe A 192.168.122.50 haha CNAME hehe @ MX 5 mail mail A 192.168.122.50
反解
定义Zone
在/etc/named.conf中加上反解zone的定义。
zone "122.168.192.in-addr.arpa" IN { type master; file "named.arpa"; };
PTR
建立/var/named/named.arpa文件,加入以下内容。
$TTL 3H @ IN SOA root root ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS master.test.com. 100 PTR master.test.com. 10 PTR hehe.test.com. 30 PTR redhat.test.com. ~
用dig -x
view
View可以做到让来自不同IP的查询能得到不一样的结果。
用处好多啦,比如A网站在全球有多个服务器,想让来自中国的用户访问中国的服务器,米国的用户访问米国的服务器,那么设定不同的View,就可以让中国的用户拿到中国服务器的地址,米国的用户拿到米国服务器的地址。
1.在/etc/named.conf中配置acl,定义中国的网段和米国的网段。(这里纯粹瞎弄)
acl cn_host { 192.168.122.0/24; }; acl us_host { 192.168.100.0/24; };
2. 定义view
view "China" { match-clients { cn_host; }; allow-query { any; }; zone "test.com" IN { type master; file "named.test"; }; }; view "US" { match-clients { us_host; }; zone "test.com" IN { type master; file "named.test2"; }; };
3.分别配置两个view的解析记录。
修改/var/named/named.test
$TTL 3H @ IN SOA root root ( 20 ; serial 300 ; refresh 200 ; retry 900 ; expire 3H ) ; minimum @ NS master.test.com. master.test.com. A 192.168.122.100 hehe A 192.168.122.50 haha CNAME hehe @ MX 5 mail mail A 192.168.122.50
修改/var/named/named.test2
$TTL 3H @ IN SOA root root ( 20 ; serial 300 ; refresh 200 ; retry 900 ; expire 3H ) ; minimum @ NS master.test.com. master.test.com. A 192.168.122.100 hehe A 192.168.122.60 haha CNAME hehe @ MX 5 mail mail A 192.168.122.50
重启named服务后,从CN来的hehe.test.com查询会查到192.168.122.50,来自US的查询会得到192.168.122.60;
[root@server2 ~]# nslookup > server 192.168.122.108 Default server: 192.168.122.108 Address: 192.168.122.108#53 > hehe.test.com Server: 192.168.122.108 Address: 192.168.122.108#53 Name: hehe.test.com Address: 192.168.122.50 > server 192.168.100.108 Default server: 192.168.100.108 Address: 192.168.100.108#53 > hehe.test.com Server: 192.168.100.108 Address: 192.168.100.108#53 Name: hehe.test.com Address: 192.168.122.60
Master/Slave
Master上配置
zone "red.com" IN { type master; file "named.red"; also-notify { 192.168.122.92; }; };
Slaves上配置
zone "red.com" IN { type slave; masters { 192.168.122.30; }; file "slaves/named.red"; };
Cache-only (forwarding)
DNS Server本身没有zone记录,通过查询上层DNS服务器来提供服务。
配置很简单。
在Cache-only Server配置文件的options中,加上
dnssec-enable no; dnssec-validation no; dnssec-lookaside no; # 做实验的话要把上面三行设成 no. forward only; forwarders { 192.168.122.30; };
Troubleshooting
1. 权限
named的组需要对配置文件和/var/named下的文件有访问权限。