1、 DNS
DNS(domain name system)域名系统,DNS的主要功能就是将主机名称转换成IP地址。
2、 FQDN
FQDN(fully qualified domain name) 完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。FQDN=hostname.domainname
3、 正解/反解
正解就是域名解析为IP地址,反解就是IP地址解析为域名。
4、 DNS查询的过程
当客户端程序要通过一个主机名称来访问网络中的一台主机时,它首先要得到这个主机名称所对应的IP地址,因为IP数据报中允许放置的是目地主机的IP地址,而不是主机名称。可以从本机的hosts文件中得到主机名称所对应的IP地址,但如果hosts文件不能解析该主机名称时,只能通过向客户机所设定DNS服务器进行查询了。
在linux系统中,可以设置hosts和dns的使用次序。
可以以不同的方式对DNS查询进行解析。第一种是本地解析,就是客户端可以使用缓存信息就地应答,这些缓存信息是通过以前的查询获得的;第二种是直接解析,就是直接由所设定的DNS服务器解析,使用的是该DNS服务器的资源记录缓存或者其权威回答(如果所查询的域名是该服务器管辖的);第三种是递归查询,即设定的DNS服务器代表客户端向其他DNS服务器查询,以便完全解析该名称,并将结果返回至客户端。第四种是迭代查询,即设定的DNS服务器向客户端返回一个可以解析该域名的其他DNS服务器,客户端再继续向其他DNS服务器查询。
详细介绍:http://book.51cto.com/art/200912/169285.htm
二、DNS搭建环境
操作系统 suse10
安装包 使用的是系统自带的安装包
bind-chrootenv-9.3.4-1.23      #将bind主程序关在dns的根目录下  
bind-utils-9.3.4-1.23          #客户端搜索主机的相关指令
bind-9.3.4-1.23              #DNS服务器主程序
bind-doc-9.3.4-1.23         
bind-libs-9.3.4-1.23 
bind-devel-9.3.4-1.23
bind-chrootenv的作用:chroot代表的是change to root,root代表的是根目录。早期的BIND默认将程序启动在/var/named中,但是该程序可以在根目录中到处转移,因此若BIND程序有问题,则该程序会造成整个系统的危害,为了避免这个问题,所以将某个目录指定为BIND程序的跟目录,由于是根目录,所以BIND程序不能离开该目录。如果该程序被***,最还的情况也就是在某个特定目录下的文件被破坏而已。Suse10默认将BIND锁定在/var/lib/named目录中。
三、 DNS安装与相关文件
1、 安装
rpm -ivh bind-chrootenv-9.3.4-1.23.i586.rpm
rpm -ivh bind-devel-9.3.4-1.23.i586.rpm
rpm -ivh bind-9.3.4-1.23.i586.rpm
rpm -ivh bind-doc-9.3.4-1.23.i586.rpm
rpm -ivh bind-libs-9.3.4-1.23.i586.rpm
rpm -ivh bind-utils-9.3.4-1.23.i586.rpm
2、 BIND的默认路径设置与chroot
BIND这个DNS服务器的设置需要有以下的文件:
(1)       配置文件:主要规范主机的设置、zone file的所在、权限的设置等。
(2)       数据库文件:记录主机名称与IP对应等。
Suse10的默认目录是这样的:
(1)       /etc/named.conf 这是配置文件。
(2)       /etc/sysconfig/named 有该文件控制是否启动chroot及额外的参数。
(3)       /var/lib/named    数据库文件默认放置的目录。
(4)       /var/run/named named程序执行时默认将pid-file放置在此目录。
出入系统安全性方面的考虑,suse10已经自动将BIND的相关程序chroot了。BIND的相关程序所需要的相关数据会放在以下的目录中:
(1)       /var/lib/named/etc/named.conf    配置文件
(2)       /var/lib/named/var/lib/named     数据库文件默认放置的目录
(3)       /var/lib/name/var/run/named     pid-file目录
      Suse10已经做好了一切链接对应,因此依旧可以使用/etc/named.conf设置DNS。依旧可以在/var/lib/named目录下修改数据库文件。
3、 DNS服务器的类型
DNS服务器的类型可分为三类:master slave cache-only
(1)       Master
    这种类型的DNS本身还有域名的配置文件(就是有zone),这个配置文件就是设置正解或者反解的“数据库”,所以它本身具有提供internet查询所需要的数据。
(2)       Slave
    Slave主机需要和master主机搭配使用,slave主机本身不需要配置数据库文件,需要下载master上的数据库文件。
(3)       Cache-only
            这种类型的DNS主机没有自己的数据库,仅用于帮助client端向外部DNS主机请求数据。
四、 DNS服务器配置
1、 DNS服务器配置环境
(1)       配置的是内部DNS服务器,因此不需要外部授权;
(2)       为了保证DNS服务器的可用性,需要配置为master/slave架构;
Master IP:10.10.0.200 slave ip :10.10.1.3
(3)       Client需要访问外部地址,若每次都要到根DNS服务器查询,效率太慢,因此要提供forward功能。
2、 Master服务器配置
(1)       配置文件
     options {                           #定义整个DNS服务器的相关环境
        directory "/var/lib/named";
        dump-file "/var/log/named_dump.db";
        statistics-file "/var/log/named.stats";
        forwarders { 202.106.0.20; 202.96.134.133; }; #转发功能
allow-query { any; };                        #允许所有client查询
allow-recursion { localnets; localhost; };       
 notify no;
};
zone "." in {                          #关于root(.)的设置
        type hint;                   #特殊的类别,专给root(.)使用
        file "root.hint";               #文件名的定义
};
       
zone "sxit.com.cn" in {                 #规范了sxit.com.cn的域
        type master;                 #master DNS
        file "sxit.com.cn.zone";        #数据库文件名
        allow-transfer { 10.10.1.3; };    #允许slave DNS下载数据库文件
};
zone "localhost" in {                   
        type master;
        file "localhost.zone";
}; 
   
zone "10.10.in-addr.arpa" in {          #规范了sxit.com.cn的反解数据库文件   
        type master;
        file "10.10.zone";
        allow-transfer { 10.10.1.3; };
}; 
zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};      
(2)        数据库文件
正反解得数据库文件可以简单那的分为以下几部分观察:
a 关于本领域的基础设置方面。例如缓存记忆时间(TTL)、域名(ORIGIN)等。
b 关于master/slave的认证方面(SOA)
c 关于本领域的域名服务器所在主机名称与IP对应(NS、A、PTR)
d 其他正反解相关的资源记录(RR)
 
         正解数据库文件 sxit.com.cn.zone
         $TTL 1W   #设置外部DNS服务器对您的DNS领域进行查询时,记录会放置在对方DNS服务器内的时间
@         IN SOA @   root ( #@代表的zone的意思,是由/etc/named.conf定义的,这里zone就是sxit.com.cn;root为管理员邮箱,代表root@sxit.com.cn
             42        ; serial (d. adams)  # 序号,slave更新数据库文件时使用
             2D        ; refresh    #slave 服务器更新时间
             4H        ; retry      #slave 更新失败,重试时间
             6W        ; expiry    #retry多久后宣告失败,不在更新
             1W )       ; minimum #可视为TTL
 
@        IN NS           www.sxit.com.cn.    #NS记录 注意这个NS记录必须有
 www      IN A            10.10.0.200       #A记录
oa       IN CNAME         www            #CNAME(别名)记录
bbs      IN CNAME        www
ftp      IN A           10.10.3.240
@       IN MX   10      mail             #域邮件服务器 MX记录
mail     IN A            10.10.3.1           
smtp     IN CNAME        mail
pop3     IN CNAME        mail
 
反解数据库文件
 
$TTL 1W
@                IN SOA          localhost.   root.localhost. (
                                42              ; serial (d. adams)
                                2D              ; refresh
                                4H              ; retry
                                6W              ; expiry
                                1W )            ; minimum
 
@        IN NS           dns.sxit.com.cn.
72.0     IN PTR          dns.sxit.com.cn.
3.1      IN PTR          www.sxit.com.cn.
1.3      IN PTR          mail.sxit.com.cn.
注意:正、反解数据库文件中的“.”,这个很容易出错,加“.”表示完整的主机名称,即hostname+domainname;如果没有加“.”,表示该名称仅为hostname。
(3)       启动服务
 Service named start
查看日志 tail -20 /var/log/message
Nov 12 11:41:13 suse-web named[20753]: starting BIND 9.3.4 -t /var/lib/named -u named
Nov 12 11:41:13 suse-web named[20753]: found 1 CPU, using 1 worker thread
Nov 12 11:41:13 suse-web named[20753]: loading configuration from '/etc/named.conf'
Nov 12 11:41:13 suse-web named[20753]: listening on IPv6 interfaces, port 53
Nov 12 11:41:13 suse-web named[20753]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 12 11:41:13 suse-web named[20753]: listening on IPv4 interface eth1, 10.10.0.200#53
Nov 12 11:41:14 suse-web named[20753]: command channel listening on 127.0.0.1#953
Nov 12 11:41:14 suse-web named[20753]: command channel listening on ::1#953
Nov 12 11:41:14 suse-web named[20753]: zone 10.10.in-addr.arpa/IN: loaded serial 42
Nov 12 11:41:14 suse-web named[20753]: zone 0.0.127.in-addr.arpa/IN: loaded serial 42
Nov 12 11:41:14 suse-web named[20753]: zone sxit.com.cn/IN: loaded serial 43
Nov 12 11:41:14 suse-web named[20753]: zone localhost/IN: loaded serial 42
Nov 12 11:41:14 suse-web named[20753]: running
查看服务端口
suse-web:/var/lib/named # netstat -na |grep :53
tcp         0      0 10.10.0.200:53          0.0.0.0:*               LISTEN     
tcp         0      0 127.0.0.1:53            0.0.0.0:*               LISTEN     
tcp         0      0 :::53                   :::*                    LISTEN     
udp         0      0 10.10.0.200:53          0.0.0.0:*                          
udp         0      0 127.0.0.1:53            0.0.0.0:*                          
udp         0      0 :::53                   :::*               
由日志和端口可知,服务正常启动了。
上边顺利启动的情况,如果出现问题怎么办?通常出现问题的原因如下:
a 语法设置错误:这个问题很好解决,因为在/var/log/message中有详细的说明,按照内容去修订即可。在服务启动时也会出现错误提示。
b 逻辑设置错误:这个问题解决起来比较困难,因为它主要是在你设置DNS主机的时候,对所产生的问题考虑不周全。例如忘记加上“.”,系统不会显示错误信息,但会造成查询的误判,而MX设置的主机名称错误时,也不会显示错误信息,但会造成邮件服务器收不到信的问题,这些错误都需要很详细的DNSclient的测试才能知道问题的所在。
如# service named restart
Shutting down name server BIND                                         done
Starting name server BIND startproc: exit status of parent of /usr/sbin/named: 1
                                                                      Failed
查看日志
Nov 12 12:24:40 suse-web named[25568]: loading configuration from '/etc/named.conf'
Nov 12 12:24:40 suse-web named[25568]: /etc/named.conf:51: missing ';' before 'listen-on-v6'
可发现错误时 在listen-on-v6前面 少个 “;”。修改即可。
 
3、 Slave服务器配置
(1)       配置文件
     zone "sxit.com.cn" in {         #规范了sxit.com.cn域
        type slave;               #slave DNS
        file "sxit.com.cn.zone";     #区域数据库文件名
        masters { 10.10.0.200; };    #master DNS IP
};
     zone "10.10.in-addr.arpa" in {
        type slave;
        file "10.10.zone";
        masters { 10.10.0.200; };
其他和masterDNS配置相同,不需要配置数据库文件。
(2)       启动服务
     Service named start
查看日志:
Nov 11 15:55:04 suse-web2 named[29211]: found 1 CPU, using 1 worker thread
Nov 11 15:55:04 suse-web2 named[29211]: loading configuration from '/etc/named.conf'
Nov 11 15:55:04 suse-web2 named[29211]: listening on IPv6 interfaces, port 53
Nov 11 15:55:04 suse-web2 named[29211]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 11 15:55:04 suse-web2 named[29211]: listening on IPv4 interface eth0, 10.10.1.3#53
Nov 11 15:55:04 suse-web2 named[29211]: command channel listening on 127.0.0.1#953
Nov 11 15:55:04 suse-web2 named[29211]: command channel listening on ::1#953
Nov 11 15:55:04 suse-web2 named[29211]: zone 0.0.127.in-addr.arpa/IN: loaded serial 42
Nov 11 15:55:04 suse-web2 named[29211]: zone localhost/IN: loaded serial 42
Nov 11 15:55:04 suse-web2 named[29211]: running
Nov 11 15:55:04 suse-web2 named[29211]: zone sxit.com.cn/IN: Transfer started.
Nov 11 15:55:04 suse-web2 named[29211]: transfer of 'sxit.com.cn/IN' from 10.10.0.200#53: connected using 10.10.1.3#8598
Nov 11 15:55:04 suse-web2 named[29211]: dumping master file: tmp-1EzbmRBqxu: open: permission denied
Nov 11 15:55:04 suse-web2 named[29211]: transfer of 'sxit.com.cn/IN' from 10.10.0.200#53: failed while receiving responses: permission denied
Nov 11 15:55:04 suse-web2 named[29211]: transfer of 'sxit.com.cn/IN' from 10.10.0.200#53: end of transfer
Nov 11 15:55:05 suse-web2 named[29211]: zone 10.10.in-addr.arpa/IN: Transfer started.
Nov 11 15:55:05 suse-web2 named[29211]: transfer of '10.10.in-addr.arpa/IN' from 10.10.0.200#53: connected using 10.10.1.3#58127
Nov 11 15:55:05 suse-web2 named[29211]: dumping master file: tmp-7j8ABKiol2: open: permission denied
Nov 11 15:55:05 suse-web2 named[29211]: transfer of '10.10.in-addr.arpa/IN' from 10.10.0.200#53: failed while receiving responses: permission denied
Nov 11 15:55:05 suse-web2 named[29211]: transfer of '10.10.in-addr.arpa/IN' from 10.10.0.200#53: end of transfer
查看日志可发现,DNS启动成功,但是数据文件传输失败,原因为 permission denied 。可知是权限设置问题。/var/lib/named这个目录named用户一定要有写权限的。
修改权限
chown -R named:named /var/lib/named/
chmod -R 750 /var/lib/named/
重启服务
service named restart
查看日志
Nov 11 16:10:01 suse-web2 /usr/sbin/cron[29585]: (root) CMD (/home/sxit/synuser/SynUser.sh >> /home/sxit/synuser/synuser.log)
Nov 11 16:13:40 suse-web2 named[29705]: starting BIND 9.3.4 -t /var/lib/named -u named
Nov 11 16:13:40 suse-web2 named[29705]: found 1 CPU, using 1 worker thread
Nov 11 16:13:40 suse-web2 named[29705]: loading configuration from '/etc/named.conf'
Nov 11 16:13:40 suse-web2 named[29705]: listening on IPv6 interfaces, port 53
Nov 11 16:13:40 suse-web2 named[29705]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 11 16:13:40 suse-web2 named[29705]: listening on IPv4 interface eth0, 10.10.1.3#53
Nov 11 16:13:40 suse-web2 named[29705]: command channel listening on 127.0.0.1#953
Nov 11 16:13:40 suse-web2 named[29705]: command channel listening on ::1#953
Nov 11 16:13:40 suse-web2 named[29705]: zone 0.0.127.in-addr.arpa/IN: loaded serial 42
Nov 11 16:13:40 suse-web2 named[29705]: zone localhost/IN: loaded serial 42
Nov 11 16:13:40 suse-web2 named[29705]: running
Nov 11 16:13:40 suse-web2 named[29705]: zone sxit.com.cn/IN: Transfer started.
Nov 11 16:13:40 suse-web2 named[29705]: transfer of 'sxit.com.cn/IN' from 10.10.0.200#53: connected using 10.10.1.3#55804
Nov 11 16:13:40 suse-web2 named[29705]: zone sxit.com.cn/IN: transferred serial 42
Nov 11 16:13:40 suse-web2 named[29705]: transfer of 'sxit.com.cn/IN' from 10.10.0.200#53: end of transfer
Nov 11 16:13:40 suse-web2 named[29705]: zone 10.10.in-addr.arpa/IN: Transfer started.
Nov 11 16:13:40 suse-web2 named[29705]: transfer of '10.10.in-addr.arpa/IN' from 10.10.0.200#53: connected using 10.10.1.3#60659
Nov 11 16:13:40 suse-web2 named[29705]: zone 10.10.in-addr.arpa/IN: transferred serial 42
Nov 11 16:13:40 suse-web2 named[29705]: transfer of '10.10.in-addr.arpa/IN' from 10.10.0.200#53: end of transfer
可以看到传输成功了。
此时查看/var/lib/named目录会发现存在sxit.com.cn.zone和10.10.zone文件,内容和master DNS相同。
五、 测试DNS服务器
1、 修改client端的DNS配置
 修改/etc/resolv.conf
nameserver 10.10.0.200
nameserver 10.10.1.3
2、 使用DNS查询指令测试(host、nslookup)
(1)host
host [-a] [FQDN] [server] #-a 列出该主机所有的相关信息。
host -l     [domain] [server] #-l 列出该domain所管理的所有主机名称的对应数据。
如:host -a www.sxit.com.cn
Trying "www.sxit.com.cn"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30204
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
 
;; QUESTION SECTION:
;www.sxit.com.cn.                IN      ANY
 
;; ANSWER SECTION:
www.sxit.com.cn.         604800 IN      A       10.10.0.200
 
;; AUTHORITY SECTION:
sxit.com.cn.             604800 IN      NS      www.sxit.com.cn.
 
Received 63 bytes from 10.10.0.200#53 in 0 ms
host -l sxit.com.cn        
sxit.com.cn name server www.sxit.com.cn.
ftp.sxit.com.cn has address 10.10.3.240
mail.sxit.com.cn has address 10.10.3.1
www.sxit.com.cn has address 10.10.0.200
注意host –l 命令在10.10.0.200上使用时,出现Host sxit.com.cn not found: 5(REFUSED)
; Transfer failed. 的错误,在10.10.1.3上使用时,正常,出现上边内容,原因在那呢?
还记得masterDNS上配置的这个么 allow-transfer { 10.10.1.3; }; 只有domain设置的允许allow-transfer ,才能列出该domain所管理的所有主机名称的对应数据。
(2)nslookup
# nslookup
> www.sxit.com.cn
Server:          10.10.0.200
Address:         10.10.0.200#53
 
Name:    www.sxit.com.cn
Address: 10.10.0.200
> mail.sxit.com.cn
Server:          10.10.0.200
Address:         10.10.0.200#53
 
Name:    mail.sxit.com.cn
Address: 10.10.3.1
> smtp.sxit.com.cn
Server:          10.10.0.200
Address:         10.10.0.200#53
 
smtp.sxit.com.cn         canonical name = mail.sxit.com.cn.
Name:    mail.sxit.com.cn
Address: 10.10.3.1
> 10.10.3.1
Server:          10.10.0.200
Address:         10.10.0.200#53
 
1.3.10.10.in-addr.arpa name = mail.sxit.com.cn.
测试可知master DNS服务器可用。
停掉master DNS,测试slave DNS ,测试过程同上。
DNS服务器搭建完成。