一、概念介绍
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/namedpid-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记录必须有
wwwIN A 10.10.0.200 #A记录
oaIN CNAME www #CNAME(别名)记录
bbsIN CNAME www
ftpIN A 10.10.3.240
@IN MX 10 mail #域邮件服务器 MX记录
mailIN A 10.10.3.1
smtpIN CNAME mail
pop3IN 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.0IN PTR dns.sxit.com.cn.
3.1IN PTR www.sxit.com.cn.
1.3IN 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
tcp0 0 10.10.0.200:53 0.0.0.0:* LISTEN
tcp0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp0 0 :::53 :::* LISTEN
udp0 0 10.10.0.200:53 0.0.0.0:*
udp0 0 127.0.0.1:53 0.0.0.0:*
udp0 0 :::53 :::*
由日志和端口可知,服务正常启动了。
上边顺利启动的情况,如果出现问题怎么办?通常出现问题的原因如下:
a 语法设置错误:这个问题很好解决,因为在/var/log/message中有详细的说明,按照内容去修订即可。在服务启动时也会出现错误提示。
b 逻辑设置错误:这个问题解决起来比较困难,因为它主要是在你设置DNS主机的时候,对所产生的问题考虑不周全。例如忘记加上“.”,系统不会显示错误信息,但会造成查询的误判,而MX设置的主机名称错误时,也不会显示错误信息,但会造成邮件服务器收不到信的问题,这些错误都需要很详细的DNSclient的测试才能知道问题的所在。
如# service named restart
Shutting down name server BINDdone
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上使用时&#xff0c;出现Host sxit.com.cn not found: 5(REFUSED)
; Transfer failed. 的错误&#xff0c;在10.10.1.3上使用时&#xff0c;正常&#xff0c;出现上边内容&#xff0c;原因在那呢&#xff1f;
还记得masterDNS上配置的这个么 allow-transfer { 10.10.1.3; }; 只有domain设置的允许allow-transfer &#xff0c;才能列出该domain所管理的所有主机名称的对应数据。
&#xff08;2&#xff09;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.cncanonical name &#61; 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 &#61; mail.sxit.com.cn.
测试可知master DNS服务器可用。
停掉master DNS&#xff0c;测试slave DNS &#xff0c;测试过程同上。
DNS服务器搭建完成。