DNS服务的配置。
 DNS的简介:
DNS和BIND的关系:DNS是一种网络通信的名称。BIND是提供DNS服务的软件。DNS使用TCP和UDP的53号端口,一般情况下为了查询速度使用的是UDP53端口。正向解析就是输入域名解析到IP地址,反向解析就是输入IP 地址解析到域名。正向解析和反向解析一般不需要配套配置,也就是说有一个正向解析不一定非要一个反向解析。事实上,需要正反解析成对的仅有邮件服务器。
 
 DNS的搜索流程:
当我们在浏览器中输入一个网址时,计算机是怎样查找到一个IP地址的呢?首先,计算机会查找缓存,如果缓存没有,那么查找hosts文件(linux中这个文件对应的是/etc/hosts),如果hosts文件也没有的话,那么就向顶域查找(根域),如果根域没有就会向该主机提供二级域的IP地址,然后主机再向二级域查找,如果二级域还不能查到,二级域就会向主机提供三级域的IP地址,然后主机再向三级域查找……,直到查找完成。当查找到后,主机会把该域名和IP地址的映射关系存入到缓存中,以便下一次对同一主机名称的查询请求,默认会在缓存中保留24小时。
 DNS基本配置:
第一步:安装软件:
[root@localhost ~]# rpm -ivh /misc/cd/Server/bind-9.3.4-10.P1.el5.i386.rpm
DNS服务器的主程序。
[root@localhost ~]# rpm –ivh /misc/cd/Server/bind-chroot-9.3.4-10.P1.el5.i386.rpm
将bind目录关在一个目录里面在。
[root@localhost ~]# rpm -ivh /misc/cd/Server/bind-utils-9.3.4-10.P1.el5.i386.rpm
DNS服务的工具包。
[root@localhost ~]# rpm -ivh /misc/cd/Server/caching-nameserver-9.3.4-10.P1.el5.i386.rpm
DNS缓存。
 
第二步:编辑配置文件:
[root@localhost ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
 
修改如下内容:(一个IP,三个any。)
        listen-on port 53 { 192.168.100.200; };      //修改为本机IP地址。
        allow-query     { any; };                      //允许所有人查询。
        match-clients      { any; };                   //允许任意客房端。
        match-destinations { any; };                   //允许任意目标。
 
编辑区域文件:
[root@localhost ~]# vi /var/named/chroot/etc/named.rfc1912.zones
 
新建一个正向rhel.com区域:
zone "rhel.com" IN {
        type master;               //设置主从。
        file "rhel.com.zone";   //配置文件的名称。
        allow-update { none; };
};
 
编辑区域配置文件:
 
[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# cp -p localhost.zone rhel.com.zone       //一定要加-p这个参数,否则发现不能解析,-p是复制后不更改文件的权限。
[root@localhost named]# vi rhel.com.zone
 
$TTL    86400
@               IN SOA @       root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
 
                IN NS           @
                IN A            127.0.0.1
                IN AAAA         ::1
www            IN A            192.168.100.200
mail             IN A            192.168.1.1
 
配置文件详解:
 
$TTL    86400   表示默认的TTL值。(单位:秒)
@               IN SOA @       root (
第一个@表示区域,第二个@表示主机名,SOA是主从认证、授权方面的记录,root是管理员邮箱,如果管理员邮箱是root@rhel.com,在这里可以写成root,如果写全就是root.rhel.com,因为@在这里表示本机的意思,所以就以.代替。
SOA的五个参数的含义:
42          // serial,这是一个序列号,主从之间更新的依据。
3H          // refresh,更新时间,从服务器多久主动请求更新一次。
15M              // retry,重试时间,当从服务器更新失败后,多久再更新。
1W         // expiry,失效时间,当从服务器多长时间没有成功更新时,就不再更新。
1D          // minimum,相当于TTL值。
 
这几个参数的大小限制如下:
serial<=2^32=4294967296
refresh>=retry*2
refresh+retry<expiry
expiry>=retry*10
expiry>=7 day
 
IN NS    @                      //NS记录,后面跟域名服务器的名称。@代表本机。前面的@可以省略。
www  IN A   192.168.100.200    //主机记录。
 
新建一个反向rhel.com区域:
[root@localhost ~]# vi /var/named/chroot/etc/named.rfc1912.zones
zone "100.168.192.in-addr.arpa" IN {
        type master;
        file "in-addr.rhel.com.zone";
        allow-update { none; };
};
 
[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# cp -p named.local in-addr.rhel.com.zone
[root@localhost named]# vi in-addr.rhel.com.zone
 
$TTL    86400
@       IN      SOA     localhost. root.localhost. (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
          IN      NS      localhost.
200       IN      PTR     www.rhel.com.
1         IN      PTR     mail.rhel.com
这里和正向区域的配置基本一样,只是多了一条PTR记录。
PTR的格式:前面是对应的IP地址,后面是主机名。
 
第三步:配置完成,重启服务。
[root@localhost named]# service named restart
 
第四步:测试:
 
在windows下:
 
D:\Users\chenbin>nslookup
默认服务器: UnKnown
Address: 202.43.150.244
 
> server 192.168.100.200              //更改DNS服务器
DNS request timed out.
    timeout was 2 seconds.
默认服务器: [192.168.100.200]
Address: 192.168.100.200
 
> www.rhel.com
服务器: [192.168.100.200]
Address:  192.168.100.200
名称:    www.rhel.com
Address: 192.168.100.200
 
> mail.rhel.com
服务器: [192.168.100.200]
Address: 192.168.100.200
名称:    mail.rhel.com
Address: 192.168.1.1
 
已经成功解析。或者这样测试:nslookup mail.rhel.com。但这样不能指定DNS服务器的地址(或者是我不知道而已)。
 
清除DNS缓存:
D:\Users\chenbin>ipconfig /flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。
 
在linux下:
首先,设置DNS服务器地址:
[root@linux3 ~]# vi /etc/resolv.conf
nameserver 192.168.100.200 //添加DNS SERVER地址。
 
使用nslookup测试:
[root@linux3 ~]# nslookup
> mail.rhel.com
Server:         192.168.100.200
Address:        192.168.100.200#53
 
Name:   mail.rhel.com
Address: 192.168.1.1
同样也可以使用 server命令更改dns地址。
> server 192.168.100.1
Default server: 192.168.100.1
Address: 192.168.100.1#53
 
使用dig测试:
[root@linux3 ~]# dig mail.rhel.com
 
; <<>> DiG 9.3.4-P1 <<>> mail.rhel.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27292
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
 
;; QUESTION SECTION:
;mail.rhel.com.                 IN      A
 
;; ANSWER SECTION:
mail.rhel.com.          86400   IN      A       192.168.1.1
 
;; AUTHORITY SECTION:
rhel.com.               86400   IN      NS      rhel.com.
 
;; ADDITIONAL SECTION:
rhel.com.               86400   IN      A       127.0.0.1
rhel.com.               86400   IN      AAAA    ::1
 
;; Query time: 16 msec
;; SERVER: 192.168.100.200#53(192.168.100.200)
;; WHEN: Wed Apr 7 07:09:28 2010
;; MSG SIZE rcvd: 105
 
使用host命令:
[root@linux3 ~]# host mail.rhel.com
mail.rhel.com has address 192.168.1.1
 
[root@linux3 ~]# host 192.168.100.200
200.100.168.192.in-addr.arpa domain name pointer www.rhel.com.
 
DNS的主辅服务器配置:
为了不间断的提供DNS查询,我们需要两台以上的DNS服务器,如果有多个DNS服务器,一般只要一台Master DNS,其他的都为Slave DNS服务器,Slave DNS没有数据库,它的数据库是由Master DNS提供。主、辅服务器之间必需能够相互传送区域文件信息。
 
第一步:配置主DNS服务器。
因为刚才已经配置好了主DNS服务器,这里就省略。
 
第二步:配置辅DNS服务器。
安装软件:
[root@linux3 ~]# cd /misc/cd/Server/
[root@linux3 Server]# rpm -ivh bind-9.3.4-10.P1.el5.i386.rpm
[root@linux3 Server]# rpm -ivh caching-nameserver-9.3.4-10.P1.el5.i386.rpm
[root@linux3 Server]# rpm -ivh bind-chroot-9.3.4-10.P1.el5.i386.rpm
修改配置文件:
[root@linux3 ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
listen-on port 53 { 192.168.100.201; };      //修改为本机地址。监听这个地址的53端口。
        allow-query     { any; };
        match-clients      { any; };
        match-destinations { any; };
新建区域:
[root@linux3 ~]# vi /var/named/chroot/etc/named.rfc1912.zones
zone "rhel.com" IN {
        type Slave;                               //设为辅服务器。
        file "slaves/rhel.com.zone";             //别忘了前面的slaves。还有后面的s。
        Masters {192.168.100.200;};   //指定主服务器。
        allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN {
        type Slave;
        file "slaves/in-addr.rhel.com.zone";
        Masters {192.168.100.200;};
        allow-update { none; };
};
 
因为辅服务器的区域配置文件是从主服务器上复制过来的,所以这里就不需要区域配置文件了。
 
重启服务:
[root@linux3 named]# service named restart
 
测试:(以windows为例)
D:\Users\chenbin>nslookup
默认服务器: www.rhel.com
Address: 192.168.100.200
 
> server 192.168.100.201
默认服务器: [192.168.100.201]
Address: 192.168.100.201
 
> mail.rhel.com
服务器: [192.168.100.201]
Address: 192.168.100.201
 
名称:    mail.rhel.com
Address: 192.168.1.1
DNS转发服务器的配置:
使用forward 和forwarders设置转发。forward用于指定转发方式,forwarders用于指定要转发到的服务器。转发方式有两种,一种是forward first,这是默认转发方式,当有查询请求时,首先转发到forwarders设置的转发器查询,如果查询不到,则再到本地服务器上查询;另一种是forward only,当有查询请求时,只转发到forwarders设置的转发器查询,查询不到也不在本地查询。forwarders后面跟的是要转发到的服务器地址,如有多个地址,则用分号隔开。
 
在所有区域上转发:
[root@linux3 named]# vi /var/named/chroot/etc/named.caching-nameserver.conf
在选项里添加:
     options {
        listen-on port 53 { 192.168.100.201; };
        listen-on-v6 port 53 { ::1; };
        forwarders {192.168.100.200;};             //如有多个地址用分号隔开。
重启服务后测试:
> mail.rhel.com
服务器: [192.168.100.201]
Address: 192.168.100.201
 
非权威应答:   //注意这里,因为不是本机查找到的所以会有这个非权威应答。
名称:    mail.rhel.com
Address: 192.168.1.1
 
 
在单个区域转发:
新建一个转发区域:
[root@linux3 named]# vi /var/named/chroot/etc/named.rfc1912.zones
zone "rhel.com"IN{
        type forward;
        forwarders {192.168.100.200;};
};
重启服务后测试。
DNS的子域授权配置:
配置主服务器。
[root@localhost ~]# rpm -ivh /misc/cd/Server/bind-9.3.4-10.P1.el5.i386.rpm
[root@localhost ~]# rpm -ivh /misc/cd/Server/bind-chroot-9.3.4-10.P1.el5.i386.rpm
[root@localhost ~]# rpm -ivh /misc/cd/Server/caching-nameserver-9.3.4-10.P1.el5.i386.rpm
[root@localhost ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
[root@localhost ~]# vi /var/named/chroot/etc/named.rfc1912.zones
 
[root@localhost ~]# cd /var/named/chroot/var/named/
[root@localhost named]# cp -p localhost.zone rhel.com.zone
[root@localhost named]# vi rhel.com.zone
添加如下几行:
xyz             IN NS           xyz.rhel.com       //xyz.rhel.com区域的解析由xyz.rhel.com主机来完成。.
xyz             IN A            192.168.100.201        //添加主机IP地址。
www             IN A            192.168.100.200
mail            IN A            192.168.100.1
 
 
子域的配置:
 
[root@linux3 ~]# rpm -ivh /misc/cd/Server/bind-9.3.4-10.P1.el5.i386.rpm
[root@linux3 ~]# rpm -ivh /misc/cd/Server/bind-chroot-9.3.4-10.P1.el5.i386.rpm
[root@linux3 ~]# rpm -ivh /misc/cd/Server/caching-nameserver-9.3.4-10.P1.el5.i386.rpm
 
[root@linux3 ~]# vi /var/named/chroot/etc/named.caching-nameserver.conf
[root@linux3 ~]# vi /var/named/chroot/etc/named.rfc1912.zones
[root@linux3 ~]# cd /var/named/chroot/var/named/
[root@linux3 named]# cp -p localhost.zone xyz.rhel.com.zone
[root@linux3 named]# vi xyz.rhel.com.zone
 
www             IN A            192.168.100.201
mail             IN A            192.168.10.10
添加两条A记录。
 
重启服务后测试。
 
 
DNS常用命令:
ipconfig /flushdns             //在windows系统下清除DNS缓存。
rndc flush                   //在liunx下清除DNS缓存。
nslookup                     //可用于在windowst和linux下测试DNS。
dig                              //用于在linux下测试DNS。
host                                   //用于在linux下测试DNS。
service named restart       //重启DNS服务。
service named status        //查看DNS状态。
netstat –ln                         //查看DNS的端口状态。
 
DNS排错:
一、          如果所有都做正确后,发现不能解析,看是不是防火墙的问题,把防火墙关闭再试试,曾经因为这个差点放弃了才想起来。
二、          从服务器的区域文件是放在/var/named/chroot/var/named/slaves目录下的,所以在新建区域时,区域文件前要加个slaves,不要忘了后面的s。
三、          要注意写主机名的时候别忘了后面的.了,这很重要。
四、          如果遇到不能解析时,也许是DNS缓存在做怪。
五、          如果遇到不能解析时,也许是复制区域配置文件时忘了加-p参数了,引起权限问题