有了上面的理论基础后,我们就开始来搭建DNS服务器,首先看看正向解析及反向解析的书写格式。正反向解析的文件都是放在数据库中的,数据库中的每一个条目称作一个资源记录(Resource Record, RR)。
资源记录的格式:
NAME:名称 TTL(可省略) IN:表示internet RRT:资源记录类型 VALUE:数据
一般将TTL(生存时间)定义在文件的最开头处,内容的写法就像下面的样子:
<code> (缓存) 类型 数据 NAME [TTL] IN RRT VALUE www.feiyu.com. IN A 1.1.1.1 </code>
每个文件都有一个资源记录类型SOA(Start Of Authority): 起始授权记录,出现在第一条,表明本区域内如何完成数据同步,无论正反向解析中,都是第一条,格式如下:
<code> ZONE NAME TTL IN SOA FQDN ADMINISTRATOR_MAILBOX ( serial number ;序列号 refresh ;刷新时间 retry ;重试时间 expire ;缓存时间 na ttl ) ;否定缓存时间 </code>
时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒
邮箱格式:因为@在此文件中有特殊意义,是以一个通配符表示zone,所以要将一般的admin@feiyu.com 写法改为-> admin.magedu.com这种格式。
以下为示例:
<code> feiyu.com. 600 IN SOA ns1.feiyu.com. admin.feiyu.com. ( 20150420 ;序号,一般用时间表示,“;”(分号)表示注释信息,序列号最长不能超过十位 1H 5M 1W 1D ) </code>
NS(Name Server): ZONE NAME –> FQDN(从区域名到主机名)无优先级,在区域内部定义主从,修改数据只能在主服务器上修改,正反解中都要保留。
邮件服务的定义格式与上面的区别:
<code> MX(Mail eXchanger): ZONE NAME --> FQDN,邮件服务器有优先级, 优先级 ZONE NAME TTL IN MX pri(优先级) VALUE 优先级:0-99,数字越小级别越高,先找优先级低的 feiyu.com. 600 IN MX 10 mail.feiyu.com. 成对出现的 mail.feiyu.com. 600 IN A 1.1.1.3 </code>
记住:MX只能定义在正向,ns正反都可以,A表示正向解析,PTR表示反向解析,下面开始来写;
所以,常见的正解文件的写法就像下面这样子:
<code> # 常见的正解文件 RR 相关信息 [domain] IN [[RR type] [RR data]] 主机名. IN A IPv4 的 IP 地址 主机名. IN AAAA IPv6 的 IP 地址 领域名. IN NS 管理这个领域名的服务器主机名字. 领域名. IN SOA 管理这个领域名的七个重要参数(容后说明) 领域名. IN MX 顺序数字 接收邮件的服务器主机名字 主机别名. IN CNAME 实际代表这个主机别名的主机名字. </code>
定义配置文件/etc/named.conf :
<code> /etc/named.conf 写法 区域: zone "ZONE NAME" IN { IN为关键字 type {master|slave|hint|forward}; 主,从,根,转发 }; **每个地址都要加“ ;” “{”与文字间要有空格 主区域: file "区域数据文件"; *可以使用相对路径 从区域: file "区域数据文件"; masters { master1_ip; }; *指明主服务器地址 options { directory "/var/named"; /*路径定义,以下为其的相对路径*/ /*recursion no; /*允许递归,默认开启*/ allow-recursion {192.168.0.0/16; }; /*定义递归网段*/ /*allow-query 拒绝传送 */ /*allow-transfer 定义在此则允许所有主机进行传送*/ notify yes; /*修改序列号会通知从服务器*/ }; zone "." IN { /*解析根*/ type hint; file "named.ca"; /*named.ca文件由bind人提供,为root的正解文件*/ /*allow-transfer { none;}; /*没有从服务器不传送*/ }; zone "localhost" IN { /*解析自己*/ type master; file "named.localhost"; allow-transfer { none; }; /*没有从服务器不传送*/ }; zone "0.0.127.in-addr.arpa" IN { /*反向解析自己*/ type master; file "named.loopback"; allow-transfer {none;}; }; zone "feiyu.com" IN { /*正向解析feiyu域*/ type master; /*类型*/ file "feiyu.com.zone"; /* 相对路径,/var/named下定义的文件*/ allow-transfer { 192.168.1.2;}; /* 允许此ns服务器进行区域传送*/ }; zone "1.168.192.in-addr.arpa" IN { /*反向解析feiyu域,将ip反过来写*/ type master; file "192.168.1.zone"; allow-transfer {192.168.1.2; 192.168.1.1;}; /*允许从服务进行区域传送*/ }; 以下定义正向解析文件/var/named/feiyu.com.zone : $TTL 600 #生存周期 feiyu.com. IN SOA ns1.feiyu.com. admin.feiyu.com. ( 20150421 ;每次修改文件后 ,序号都要加1 1M 5M 2D 1H) IN NS ns1 #ns记录,此处为简写,省略了域,完整为ns1.feiyu.com. IN NS ns2 IN MX 10 mail ns1 IN A 192.168.1.1 ns2 IN A 192.168.1.2 mail IN A 192.168.1.2 #解析mail服务器 www IN A 192.168.1.1 #www服务器有两个ip www IN A 192.168.1.3 ftp1 IN CNAME www #设置别名 ftp IN A 192.168.1.1 建立反向文件/var/named/192.168.1.zone文件: $TTL 600 1.168.192.in-addr.arpa. IN SOA ns1.feiyu.com. admin.feiyu.com. ( 20150418 1H 5M 2D 6H) IN NS ns1.feiyu.com. ;ns记录保留,不能简写 IN NS ns2.feiyu.com. 1 IN PTR ns1.feiyu.com. 1 IN PTR ftp.feiyu.com. 2 IN PTR ns2.feiyu.com. 1 IN PTR www.feiyu.com. 2 IN PTR mail.feiyu.com. 3 IN PTR www.feiyuu.com. [root@struggle named]# chgrp named feiyu.com.zone #修改文件属组 [root@struggle named]# chmod 640 feiyu.com.zone #修改文件权限 [root@struggle named]# chgrp named 192.168.1.zone [root@struggle named]# chmod 640 192.168.1.zone </code>
建立好文件后,重启服务,注意从服务器必须在另一个主机上,下面开始验证:
验证会需要用到几个命令,DNS 的正、反解查询指令: host, nslookup, dig
host:
选项与参数:
-a :代表列出该主机所有的相关信息,包括 IP、TTL 与除错讯息等等
-l :若后面接的那个 domain 设定允许 allow-transfer 时,则列出该 domain
所管理的所有主机名对应数据!
server:这个参数可有可无,当想要利用非 /etc/resolv.conf 内的 DNS 主机
来查询主机名与 IP 的对应时,就可以利用这个参数了!
<code> [root@localhost named]# host -a tianfeiyu.com Trying "tianfeiyu.com" ;; ->>HEADER<</code>
竟然失败了,这样的响应是因为管理 tianfeiyu.com领域的 DNS 并不许我们的领域查询,毕竟我们不是 tianfeiyu.com 的系统管理员,当然没有权限可以读取整个 tianfeiyu.com 的领域设定!
<code> 2.nslookup [root@localhost named]# nslookup > 120.114.100.20 #设置DNS服务器 Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: 20.100.114.120.in-addr.arpa name = mail-smtp-proxy.ksu.edu.tw. 20.100.114.120.in-addr.arpa name = mail.ksu.edu.tw. 20.100.114.120.in-addr.arpa name = mail-out-r2.ksu.edu.tw. Authoritative answers can be found from: 100.114.120.in-addr.arpa nameserver = dns1.ksu.edu.tw. 100.114.120.in-addr.arpa nameserver = dns2.ksu.edu.tw. 100.114.120.in-addr.arpa nameserver = dns3.twaren.net. dns2.ksu.edu.tw internet address = 120.114.150.1 dns1.ksu.edu.tw internet address = 120.114.50.1 > set q=any #设定资源记录类型 > www.tianfeiyu.com Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: www.tianfeiyu.com Address: 121.42.101.40 Authoritative answers can be found from: tianfeiyu.com nameserver = dns9.hichina.com. tianfeiyu.com nameserver = dns10.hichina.com. dns9.hichina.com internet address = 140.205.228.13 dns9.hichina.com internet address = 42.120.221.13 dns9.hichina.com internet address = 140.205.81.13 dns10.hichina.com internet address = 42.120.221.23 dns10.hichina.com internet address = 140.205.81.23 dns10.hichina.com internet address = 140.205.228.23 > exit </code>
3.dig (最重要的一个)
选项与参数:
@server :如果不以 /etc/resolv.conf 的设定来作为 DNS 查询,可在此填入其他的 IP
options:相关的参数很多,主要有 +trace, -t type 以及 -x 三者最常用
+trace :就是从 . 开始追踪,在 19.1.2 里面谈过了!回头瞧瞧去!
-t type:查询的数据主要有 mx, ns, soa 等类型,相关类型 19.4 来介绍
-x :查询反解信息,非常重要的项目!
用法在下面展示。
<code> [root@localhost named]# named-checkconf *下面三项检查语法错误(检查主配置文件) [root@localhost named]# named-checkzone "." /var/named/named.ca (检查域) zone ./IN: has 0 SOA records zone ./IN: not loaded due to errors. [root@localhost named]# named-checkzone "localhost" /var/named/named.localhost zone localhost/IN: loaded serial 0 OK [root@localhost named]# named-checkzone "0.0.127.in-addr.arpa" /var/named/named.loopback zone 0.0.127.in-addr.arpa/IN: loaded serial 0 OK [root@struggle named]# service named configtest zone localhost/IN: loaded serial 0 zone 0.0.127.in-addr.arpa/IN: loaded serial 0 #定义ns服务器为本身,要不然会解析互联网上的主机,此文件比较繁琐,要是出现问题,请看前一篇关于此文件的介绍 [root@struggle named]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.1.1 [root@struggle named]# dig -t A www.feiyu.com #使用dig查询,解析www.feiyu.com的A记录 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.2 <<>> -t A www.feiyu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<解析结果 www.feiyu.com. 600 IN A 192.168.1.1 ------> ;; AUTHORITY SECTION: feiyu.com. 600 IN NS ns1.feiyu.com. ;; ADDITIONAL SECTION: ns1.feiyu.com. 600 IN A 192.168.1.1 ;; Query time: 2 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Apr 17 04:28:39 2015 ;; MSG SIZE rcvd: 97 [root@struggle named]# dig -t CNAME ftp.feiyu.com #解析ftp的别名 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.2 <<>> -t CNAME ftp.feiyu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<解析结果 ;; AUTHORITY SECTION: feiyu.com. 600 IN NS ns1.feiyu.com. ;; ADDITIONAL SECTION: ns1.feiyu.com. 600 IN A 192.168.1.1 ;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Apr 17 04:31:59 2015 ;; MSG SIZE rcvd: 83 [root@struggle named]# dig -t NS feiyu.com #解析feiyu.com域的ns服务器 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.2 <<>> -t NS feiyu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<解析结果 ;; ADDITIONAL SECTION: ns1.feiyu.com. 600 IN A 192.168.1.1 ;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Apr 17 04:33:33 2015 ;; MSG SIZE rcvd: 61 [root@struggle named]# dig -t MX feiyu.com #解析邮箱服务器 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.2 <<>> -t MX feiyu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<解析结果 ;; ADDITIONAL SECTION: mail.feiyu.com. 600 IN A 192.168.1.2 ------->解析结果 ns1.feiyu.com. 600 IN A 192.168.1.1 -------->解析结果 ;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Apr 17 04:34:09 2015 ;; MSG SIZE rcvd: 98 全部解析成功,ok了!</code>
请看下节:
DNS服务器的搭建及配置详解(三)