RHEL6: BIND DNS Server

参考文档

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下的文件有访问权限。