实验环境:CentOS6.0
ServerIP:192.168.0.1
ClientIP:192.168.0.2
Port:53 [相关服务端口可以在/etc/service中查看]
 
#yum install bind bind-chroot -y
 
示例1:
具有forwarding的Caching only DNS服务器的配置:
 
#vim /etc/named.conf
***********************************************************************************
options {
        listen-on port 53 { any; };     //监听在这台主机系统上的任何一个网络接口
        directory               "/var/named";     //数据库(zone file)默认放置的目录
        dump-file               "/var/named/data/cache_dump.db";     //一些统计信息输出的文件
        statistics-file         "/var/named/data/named_stats.txt";     //一些统计信息输出的文件
        memstatistics-file      "/var/named/data/named_mem_stats.txt";       //一些统计信息输出的文件
        allow-query     { any; };     //针对客户端,任何人都能查询DNS
        recursion yes;     //将自己视为客户端的一种查询模式
        forward only;     //让DNS服务器仅进行forward  
        forwarders {     //将DNS查询请求转递给哪些上层DNS服务器
        168.95.1.1;
        139.175.10.20;
        };
};
***********************************************************************************
 
#/etc/init.d/named start
#netstat -tunlp|grep named    (查看53端口)
#tail -n 30 /var/log/messages (每次启动查看下拥有重要信息的日志文件)
 
测试:
将客户端的/etc/reslov.conf内DNS的IP配置成该服务器IP即可,dig解析出来的正确数据中,SERVER的IP是192.168.0.1即可。
 
 
示例2:DNS服务器配置:
 
1.DNS的环境规划
 
正解区域:Linux.jjf
反解区域:192.168.0.0/24
DNS服务器自己寻找.(root)
 
故,需要配置的文件如下:
1>named.conf (主配置文件)
2>named.linux.jjf (主要的linux.jjf的正解文件)
3>named.192.168.0 (主要的192.168.0.0/24的反解文件)
4>named.ca (有bind软件提供的.的正解文件)
 
2.主配置文件/etc/named.conf的设置
 
#vim /etc/named.conf
******************************************************************************************************************
options {
        listen-on port 53 { any; };
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        allow-transfer  { none; };      //不允许Slave DNS对整个领域的数据进行传送
        };
 
zone "." IN {
        type hint;
        file "named.ca";
 
};
 
zone "linux.jjf" IN {                   //文件名无限制,便于记忆即可
        type master;
        file "named.linux.jjf";
};
 
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.0";
};
******************************************************************************************************************
 
3.最上层.(root)数据库文件的设置
 
#vim /var/named/named.ca
 
该文件基本不用修改,有BIND软件自己提供。当然,也可以在网站下载最新的数据文件ftp://rs.internic.net/domain/named.root
 
 
4.正解数据库文件的设置
 
注:
 
1>正解文件一定要有的RR标志:
.关于本区域的基础设置方面:缓存记忆时间(TTL)、域名(ORIGN)等;
.关于Master/Slave的认证方面(SOA);
.关于本区域的域名服务器所在主机名与IP对应(NS、A);
.关于其它正反解相关的资源记录(A、MX、CNAME等).
2>配置正解数据库文件时一定要从首行开始、若首行有空格,则代表延续前一个domain的意思。
3>@这个符号代表Zone(域)的意思。点(.)很重要,因为它代表FQDN而不是仅有hostname。
 
#vim /var/named/named.linux.jjf
******************************************************************************************************************
;对整个域相关性较高的设置包括NS、A、MX、SOA等标志的设置
$TTL 600
@                       IN SOA           master.linux.jjf.   287523394.qq.com. (2013010101 3H 15M 1W 1D);
@                       IN NS            master.linux.jjf.      ;DNS服务器名称
master.linux.jjf.       IN A             192.168.0.1            ;DNS服务器IP
@                       IN MX            10 www.linux.jjf.      ;领域名的邮件服务器
 
;针对192.168.0.1这部主机的所有相关正解设置
www.linux.jjf.          IN A            192.168.0.1
centos.linux.jjf.       IN CNAME        www.linux.jjf.
ftp.linux.jjf.          IN CNAME        www.linux.jjf.
forum.linux.jjf         IN CNAME        www.linux.jjf.
 
;其他几部主机的主机名正解设置
slave.linux.jjf.        IN A            192.168.0.2
sust.linux.jjf.         IN A            192.168.0.2
client1.linux.jjf.      IN A            192.168.0.3
client2                 IN A            192.168.0.4     ;简化的写法
;加上了.表示这是个完整的主机名(FQDN),即就是“hostname+domain name”,如果没有加点的话,表示仅为hostname而已。
*******************************************************************************************************************
 
5.反解数据库文件的设置:
 
#vim /var/named/named.192.168.0
*******************************************************************************************************************
$TTL 600
@       IN SOA  master.linux.jjf.       287523394.qq.com.       (2013010101 3H 15M 1W 1D)
@       IN NS   master.linux.jjf.
1       IN PTR  master.linux.jjf.
 
1       IN PTR  www.linux.jjf.
2       IN PTR  slave.linux.jjf.
2       IN PTR  sust.linux.jjf.
3       IN PTR  client1.linux.jjf.
4       IN PTR  client2.linux.jjf.
*******************************************************************************************************************
 
6.DNS的启动、查看与防火墙
#/etc/init.d/named restart
#tail -n 30 /var/log/messages|grep named
#iptables -A INPUT -p UDP -i $EXTIF --dport 53 --spost 1024:65534 -j ACCEPT
#iptables -A INPUT -p TCP -i $EXTIF --dport 53 --spost 1024:65534 -j ACCEPT
 
7.测试与更新数据
 
修改客户端/etc/reslov.conf文件:nameserver 192.168.0.1
在客户端用dig进行检测,正解、反解的结果是否是我们所预想的结果。
 
更新数据的步骤:
.先针对要更改的那个Zone的数据库文件去做更新,就是加入RR的标志;
.在更改该zone file 的序号(Serial),使其变大,该序号会影响Master/Slave判定是否更新;
.重启named即可。
 
 
示例3:Master/Slave DNS协同工作
 
Master 192.168.0.1中以下更改均在示例2的基础上
 
#vim /etc/named.conf
********************************************************************************************************************
在域文件选项下添加allow-transfer {192.168.0.2}:
如:
zone "linux.jjf" IN {                  
        type master;
        file "named.linux.jjf";
        allow-transfer { 192.168.0.2; }; //新添加的项
};
 
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.0";
        allow-transfer { 192.168.0.2; }; //新添加的项
};
********************************************************************************************************************
 
#vim /var/named/named.linux.jjf
********************************************************************************************************************
修改:
序列号  2013010101——>2013010102
 
添加:
@  IN NS slave.linux.jjf.
slave.linux.jjf.  IN A 192.168.0.2
********************************************************************************************************************
 
#vim /var/named/named.192.168.0
********************************************************************************************************************
修改:
序列号2013010103——>2013010102
 
添加:
@ IN NS slave.linux.jjf.
2 IN PTR  slave.linux.jjf.
********************************************************************************************************************
 
#/etc/init.d/named restart
#tail -n 30 /var/log/messages |grep named
 
 
Slave DNS的配置192.168.0.2:
 
#yum install bind bind-chroot -y
 
#vim /etc/named.conf
*******************************************************************************************************************
options {
        listen-on port 53 { any; };
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        allow-transfer  { none; };      
        };
 
zone "." IN {
        type hint;
        file "named.ca";
 
};
 
zone "linux.jjf" IN {                   
        type slave;
        file "slaves/named.linux.jjf"; //该数据文件由bind程序自动依据master数据建立,存储于/var/named/slaves/下
        masters { 192.168.0.1; };
};
 
zone "0.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/named.192.168.0.1";//该数据文件由bind程序自动依据master数据建立,存储于/var/named/slaves/下
        masters { 192.168.0.1; };
};
**********************************************************************************************************************
 
#/etc/init.d/named restart
#tail -n 30 /var/log/messages  
查看日志关于bind的详细信息,slave会自动从master中获取zone file,如果日志提示权限问题,可能会是写入全限问题,修改即可。一般而言,bind会自动处理/var/named/slaves的权限,使之有效执行数据的同步传输。
 
 
示例4.DNS服务器的子域授权
 
 
1.上层master DNS服务器:只需要添加zone file 的NS与A即可
 
#vim /var/named/named.linux.jjf
*********************************************************************************************************************
修改:
序号2013010102——>2013010103
 
添加:
 
key.linux.jjf. IN NS dns.key.linux.jjf. //将域key.linux.jjf授权给dns.key.linux.jjf
dns.key.linux.jjf. IN A 192.168.0.3
**********************************************************************************************************************
Slave DNS无需改动,应为主机重启bind后,Slave会自己同步。
 
#/etc/init.d/named restart
#tail -n 30 /var/log/messages|grep named
此时dig dns.key.linux.jjf肯定不通,因为已经将key.linux.jjf域授权给dns.key.linux.jjf,而dns.key.linux.jjf并未设置ok。
 
2.下层DNS服务器:需要有完整的Zone相关设置      (192.168.0.3)
 
# yum install bind bind-chroot -y
 
#vim /etc/named.conf
**********************************************************************************************************************
options {
        listen-on port 53 { any; };
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        allow-transfer  { none; };      
        };
 
zone "." IN {
        type hint;
        file "named.ca";
 
};
zone "key.linux.jjf" IN {
type master;
file "named.key.linux.jjf";
};
*********************************************************************************************************************
 
#vim /var/named/named.key.linux.jjf
*********************************************************************************************************************
$TTL 600
@       IN SOA          dns.key.linux.jjf.      287523394.qq.com. (2013010101  3H 15M 1W 1D)
@       IN NS           dns.key.linux.jjf.
dns     IN A            192.168.0.3
www     IN A            192.168.0.3
@       IN MX           10 www.key.linux.jjf.
********************************************************************************************************************
 
#/etc/init.d/named restart
#tail -n 30 /var/log/messages|grep named
#iptables -A INPUT -p UDP -i $EXTIF --dport 53 --spost 1024:65534 -j ACCEPT
#iptables -A INPUT -p TCP -i $EXTIF --dport 53 --spost 1024:65534 -j ACCEPT
 
此时,无论客户端的DNS设置的是哪一个,都可以dig通dns.key.linux.jjf
 
 
示例5.依据不同接口给予不同的DNS主机名(通过view功能)
 
建立名为intranet的名字代表客户端为192.168.0.0/24的来源;
建立名为internet的名字代表客户端为非192.168.0.0/24的来源;
intranet使用的zone file 为前面所建立的zone file,internet使用的zone file则在原本的文件名后面累加inter的扩展名,并修订各标志的结果
 
#vim /etc/named.conf
*******************************************************************************************************************
options {
        listen-on port 53 { any; };
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        allow-transfer  { none; };      //不允许Slave DNS对整个领域的数据进行传送
};
acl intranet { 192.168.0.0/24; };
acl internet { ! 192.168.0.0/24; any; }; //!代表反向选择
 
view "lan" { //只是个名字而已
match-clients  { "intranet"; }; //内网来源
zone "." IN {
        type hint;
        file "named.ca";
 
};
 
zone "linux.jjf" IN {                  
        type master;
        file "named.linux.jjf";
allow-transfer { 192.168.0.2; };
};
 
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.0";
allow-transfer { 192.168.0.2; };
};
};
 
view "wan" {
match-clients  { "internet"; }; //外网来源
zone "." IN {
        type hint;
        file "named.ca";
 
};
 
zone "linux.jjf" IN {                  
        type master;
        file "named.linux.jjf.inter"; //文件名字一定不能相同
allow-transfer { 192.168.0.2; };
};
 
};
****************************************************************************************************************
 
#vim /var/named/named.linux.jjf.inter
****************************************************************************************************************
;修改序列号
;修改对应的、外网能解析到的DNS IP  (即本机主机名所对应的IP地址)
;对整个域相关性较高的设置包括NS、A、MX、SOA等标志的设置
$TTL 600
@                       IN SOA           master.linux.jjf.   287523394.qq.com. (2013010103 3H 15M 1W 1D);
@                       IN NS            master.linux.jjf.      
master.linux.jjf.       IN A             192.168.1.1           
@                       IN MX            10 www.linux.jjf.      
 
;针对192.168.0.1这部主机的所有相关正解设置
www.linux.jjf.          IN A            192.168.1.1
centos.linux.jjf.       IN CNAME        www.linux.jjf.
ftp.linux.jjf.          IN CNAME        www.linux.jjf.
forum.linux.jjf         IN CNAME        www.linux.jjf.
 
;其他几部主机的主机名正解设置
slave.linux.jjf.        IN A            192.168.1.2
sust.linux.jjf.         IN A            192.168.1.2
client1.linux.jjf.      IN A            192.168.1.3
client2                 IN A            192.168.1.4     
****************************************************************************************************************
 
#/etc/init.d/named restart
查看日志信息无误后、就可以使用了。
 
 
 
示例6.利用RNDC控制DNS服务器(利用密钥进行管理控制)
 
1.先建立密钥的相关数据
 
#rndc-confgen
注:
*******************************************************************************************************************
执行rndc-confgen没反应,这是由于rndc-confgen 调用 /dev/random,而/dev/random又通过/proc/interrupts 产生随机数不足,导致
rndc-confgen 一直等待
解决方法1:
手动生成一个 randomfile 文件,如test(向test输入若干数据即可)
# rndc-confgen -r test 
解决方法2:
#rndc-confgen -r /dev/urandom
********************************************************************************************************************
 
2.建立rndc.key文件
 
#vim /etc/rndc.key
*********************************************************************************************************************
key "rndc-key" {
       algorithm hmac-md5;
       secret "NocOScUIwsE1LNa0gJZUWA==";
};
*********************************************************************************************************************
 
3.修改named.conf
*********************************************************************************************************************
放于options之外!
controls {
       inet 127.0.0.1       port 953
       allow { 127.0.0.1; } keys { "rndc-key"; };
 };
*********************************************************************************************************************
 
4.#/etc/init.d/named restart
 
利用man rndc 查看相关用法即可
 
 
例7.搭建DDNS服务器
 
DDNS提供机制,让客户端能够自己到DDNS服务器上面实现IP与主机名对应的修改。
 
1.DDNS Server端的设置
 
#dnssec-keygen -a [算法] -b [密码长度] -n [类型]  名称
 
#cd /etc/named/
#dnssec-keygen -a HMAC-MD5 -b 512 -n HOST  linux
 
#vim /etc/named.conf
*****************************************************************************************************
key "linux" {
        algorithm hmac-md5;
        secret "4m/1Fa1aKfbfoJiLtFA+MSEGZ/97EXe5gXw16eJDBz97+gEM1Y/+t48j BdpasaZ5w2gfy6snO1hzcSiCzAt3ag==";
 
};
 
 zone "linux.jjf" IN {
                type master;
                file "named.linux.jjf";
                allow-transfer { 192.168.0.2; };
                allow-update { key linux; };
 
        };
********************************************************************************************************
 
#chmod g+w /var/named
#chown named /var/named/named.linux.jjf
#/etc/init.d/named restart
#setsebool -P named_write_master_zones=1
 
 
2.客户端的更新
 
将服务器端产生的两个密钥拷贝到客户端目录中
 
#nsupdate -k Klinux.+157+52335.private
> server 192.168.0.1
> update delete client2.linux.jjf
> update add client10.linux.jjf 600 A 192.168.0.4
> send
这样客户端就可以随时依据情况更改所授权域的主机名修改。
 
 
 
注:
 
1.通常DNS是以UDP这个传输速度较快的协议查询的,但是万一没有办法查询到完整的信息时,就会再次以TCP这个协议来重新查询;
2.DNS采用阶梯式管理机制;
3.从主机名查询到IP的流程称为:正解(A);
4.从IP反解析到主机名的流程称为:反解(PTR),只有ISP有权力设置反解;
5.SOA:即就是开始验证的缩写;
6:NS:即名称服务器,一般后面记录的数据是DNS服务器;
7.一台简单的正解DNS服务器,基本上要有两个Zone才行:一个是hint(记录.的Zone)、一个是关于自己域的正解Zone;
8.在网络正常的情况下,客户端永远只访问客户端自己设置的第一台DNS服务器;
9.客户端在使用“dhcp”模式获取IP时,dhcp服务器默认会设置客户端/etc/reslov.conf内DNS的IP,可以使用PEERDNS=no参数取消此功能。
10.在RHEL6中,/etc/init.d/named的启动脚本已经通过mount --bind /var/named /var/named/chroot/var/named进行了目录绑定。
11.cache-only DNS Server这是一种没有自己公开的DNS数据库的服务器,只需要.这个zone file,只有缓存搜寻结果的功能,完全由对外的查询来提供它的数据源,查询服务一律从自己的缓存和.找起,在公司中,一般出于安全考虑建立该服务器于防火墙中。
12.forwarding DNS服务器相对于cache-only DNS Server而言,没有.这个zone file,将原本自己要往.查询的任务丢给上层DNS服务器去处理即可。
13.dig命令输出结果格式如下:
[domain] [ttl] IN [[RR type]  [RR data]]
[待查数据] [暂存时间(秒)]  IN [[资源类型] [资源内容]]
14.正解文件RR相关信息
[domain] IN [[RR type] [RR data]]
主机名. IN A IPV4的IP地址
主机名. IN AAAA IPV6的IP地址
域名. IN NS 管理这个域名的服务器主机名字
域名. IN SOA 管理这个域名的七个重要参数
域名. IN MX 顺序数字 接收邮件的服务器主机名
主机别名. IN CNAME 实际代表这个主机别名的主机名字
15.SOA后面接的七个参数(按顺序):
 
Master DNS 服务器主机名
管理员的E-mail、但由于@在zone file中有特别含义,故用.代替@
序号——Serial(数据库文件的序号,序号越大代表数据库文件越新)、不能超过2的32次方,即4 294 967 296
更新频率——Refresh>=2*Retry(秒)、
失败重新尝试时间——Retry(秒)、Refresh+Retry<Expire
失效时间(秒),持续失败该时间后,Slave将不更新数据 Expire>=Retry*10  Expire>=7Days
缓存时间(秒)即就是TTL
 
16.进行反解时,要注意的就是要将IP反转过来写,并且结尾加上.in-addr.arpa.才行;而后面的主机名尽量使用完整的FQDN,即加上小数点(.)
17.一个IP可以对应多个主机名、一个主机名可以对应多个IP;
18.由INTERNIC负责维护.,全世界共有13台管理.的DNS服务器;
19.对于Master和Slave在网络上的地位是相同的,并不是只有当Master宕机后才用Slave。
20.当外部DNS Server设置错误时,本地的DNS Server可能会包“lame server”的提示,可以在option选项中添加选项,取消这种错误提示
如:
logging {
                category lame-servers { null; };
        };
21.启动时,日志报错“couldn't add command channel 127.0.0.1#953:not found”通常是由于rndc key设置有问题所致。