本文大纲:

理论部分:

    1、什么是DNS

    2、DNS层次介绍及基础内容

    3、DNS的工作原理及过程

域名服务器配置实战:

    4、主域名服务器配置

    5、辅域名服务器配置

    6、缓存域名服务器配置


1、什么是DNS?
( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。
DNS原理和CentOS7上bind域名服务器配置详解_第1张图片

2、DNS简介
域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为域命名空间。域名包含单个标签分隔点,例如:im.qq.com。
完全限定的域名 (FQDN) 唯一地标识在 DNS 分层树中的主机的位置,通过指定的路径中点分隔从根引用的主机的名称列表。 下图显示与主机称为 im 内 qq.com DNS 树的示例。 主机的 FQDN 是 im.qq.com。
DNS 域的名称层次结构
DNS原理和CentOS7上bind域名服务器配置详解_第2张图片

DNS域名层次介绍:
按其功能命名空间中用来描述 DNS 域名称的五个类别的介绍详见下表中,以及与每个名称类型的示例
DNS原理和CentOS7上bind域名服务器配置详解_第3张图片

常见的顶级域名:

组织域:.com, .net, .org, .gov, .edu, .mil

国家域:.iq, .tw, .hk, .jp, .cn, ...

互联网域名系统由名称注册机构负责维护分配由组织和国家/地区的顶级域在 Internet 上进行管理。 这些域名按照国际标准 3166。 一些很多现有缩写,保留以供组织中,以及两个字母和三个字母的国家/地区使用的缩写使用下表所示。一些常见的DNS域名称如下图:
DNS原理和CentOS7上bind域名服务器配置详解_第4张图片

3、DNS的工作原理及过程

当我们打开浏览器输入某个网站,我们是如何通过网络找到主机的呢,下来我来说说域名解析的具体过程,看下图:

DNS原理和CentOS7上bind域名服务器配置详解_第5张图片

具体的过程说明:

我们以上图用户访问www.wlm.com为例

对于客户机

1.当用户以域名方式访问某个主机时,本地计算机首先会查看自己的DNS Cache里有没有该域名解析的缓存,有则直接解析;

2.如果本地缓存没有该域名解析,就查看hosts文件,看有没有该域名解析,有则给出解析结果;

3.如果没有就请求DNS Server服务器,通过递归查询,直接从NDS Server得出需要查询的结果。

对于DNS Server域名服务器

1.如果用户请求的是DNS Server掌管的域内服务器,则直接给出解析结果;

2.如果用户请求的不是本域内的服务器或者DNS Server是缓存服务器,没有自己掌握的域名;

    (1)DNS Server会直接访问根域服务器,而不是访问自己的顶级域服务器,根域不知道www.wlm.com主机的IP地址,但是跟域会告诉DNS server,.com顶级域会知道www.wlm.com的IP,并返回.com的IP ;  

     (2)DNS Server请求.com顶级域解析,.com顶级域也不知道www.wlm.com主机,但是.com顶级域会返回wlm.com的地址;

     (3)DNS  Server 访问wlm.com主机,www.wlm.com属于wlm.com域内。wlm.com返回www.wlm.com的主机IP,DNS Server响应用户的请求,返回IP地址;用户计算机根据IP地址访问www.wlm.com主机。


域名服务器配置实战:

部署的逻辑图如下:

DNS原理和CentOS7上bind域名服务器配置详解_第6张图片


配置说明:

主域名服务器:ns1.wlm.com.         IP:10.10.10.3

从域名服务器:ns2.wlm.com.         IP:10.10.10.10

缓存域名服务器:ns3.wlm.com.       IP:10.10.10.11

所有的系统都为CentOS7

在每台服务器上的准备工作:

这里以ns1.wlm.com为例

(1)配置IP,将DNS指向自己

vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.10.10.3
NETMASK=255.255.255.0
GATEWAY=10.10.10.2
DNS1=10.10.10.3
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes

(2)重启网卡

systemctl restart network.service

(3)关闭防火墙和selinux

systemctl stop  firewalld.service
systemctl disable firewalld.service #开启自动关闭

setenforce 0    # 可以vim /etc/selinux/config将selinux改为disabled,设置为开机就关闭

(4)配置yum源(这里就不赘述了),yum安装bind

[root@ns1 ~]# yum install -y bind
[root@ns1 ~]# yum install -y bind-libs
[root@ns1 ~]# yum install -y  bind-utils #这个非必要,需要dig命令,需要安装

程序包说明:

    bind-libs:被bind和bind-utils包中的程序共同用到的库文件;

    bind-utils:bind客户端程序集,例如dig, host, nslookup等;


    bind:提供的dns server程序、以及几个常用的测试程序

    bind-chroot:选装,让named运行于jail模式下;

(5)修改配置文件

[root@ns1 ~]# vim /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; 10.10.10.3; };# 监听本机IP的53端口
        listen-on-v6 port 53 { ::1; };
        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     { localhost; }; # 这里代表只解析本机,//为注释
        allow-transfer { 10.10.10.0/24; };    
        # 配置里默认没有这一项配置,只允许的slave主机做数据传送
        # 从服务器配置如下:allow-transfer { none; }; #从服务器不需要做传输
        recursion yes;

        dnssec-enable no;    # 安全设置关闭
        dnssec-validation no;    # 安全设置关闭

修改完毕,保存退出

语法检查:

named-checkconf #语法检查,默认检查/etc/named.conf文件,如果不是这个路径,在后面写路径

重启named服务器

[root@ns1 ~]# systemctl restart named.service

设置开机启动

[root@ns1 named]# systemctl enable named.service


(6)查看监听的IP和端口

[root@ns1 named]# netstat -tunlp | grep 53
tcp        0      0 10.10.10.3:53           0.0.0.0:*               LISTEN      5509/named          
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      5509/named          
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2384/dnsmasq        
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      5509/named          
tcp6       0      0 ::1:53                  :::*                    LISTEN      5509/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      5509/named          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           854/avahi-daemon: r 
udp        0      0 10.10.10.3:53           0.0.0.0:*                           5509/named          
udp        0      0 127.0.0.1:53            0.0.0.0:*                           5509/named          
udp        0      0 192.168.122.1:53        0.0.0.0:*                           2384/dnsmasq        
udp6       0      0 ::1:53                  :::*                                5509/named

(7)配置时间服务器,利用ntpdate同步时间使每台服务器时间一致(如果是练习,这不是必要步骤)。

4、主域名服务器配置

具体配置步骤:

1)yum安装bind

[root@ns1 ~]# yum install -y bind

2)修改配置文件

[root@ns1 ~]# vim /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; 10.10.10.3; };# 监听本机IP的53端口
        listen-on-v6 port 53 { ::1; };
        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     { localhost; }; # 这里代表只解析本机,//为注释
        allow-transfer { 10.10.10.0/24; };    
        # 配置里默认没有这一项配置,只允许的slave主机做数据传送
        recursion yes;

        dnssec-enable no;    # 安全设置关闭
        dnssec-validation no;    # 安全设置关闭

修改完毕,保存退出

语法检查:

named-checkconf #语法检查,默认检查/etc/named.conf文件,如果不是这个路径,在后面写路径

重启named服务器

[root@ns1 ~]# systemctl restart named.service

bind不设置任何域名,默认是缓存服务器,配置里面默认有根域的地址,现在可以做域名解析了。

[root@ns1 ~]# dig -t A +trace www.baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A +trace www.baidu.com
;; global options: +cmd
.			457478	IN	NS	a.root-servers.net.    # 首先找到跟域
com.			172800	IN	NS	a.gtld-servers.net.    # 再找.com
baidu.com.		172800	IN	NS	dns.baidu.com.         # 最后找到dns
ww.baidu.com.		1200	IN	CNAME	www.a.shifen.com.      # 找到最后的域名

;; Received 239 bytes from 220.181.37.10#53(ns3.baidu.com) in 13 ms    # 解析的ip


dig命令介绍:
dig  [-t RR_TYPE]  name  [@SERVER]  [query options]
						
用于测试dns系统,因此其不会查询hosts文件;
							
查询选项:
+[no]trace:跟踪解析过程;
+[no]recurse:进行递归解析;
注意:反向解析测试
dig  -x  IP
模拟完全区域传送:
dig  -t  axfr  DOMAIN  [@server]
dig +trace -t A www.baidu.com
dig -x 61.135.169.121

3)配置一个正向解析区域

(1)定义区域,我们以wlm.com为例 

    在主配置文件中或主配置文件辅助配置文件中实现(/etc/named.rfc1912.zones);  

vim /etc/named.rfc1912.zones 
# 配置文件最后面添加
zone "wlm.com" IN {
        type master;
        file "wlm.com.zone";
};
/etc/named.rfc1912.zones配置文件里的写法格式:
zone  "ZONE_NAME"  IN  {
	type  {master|slave|hint|forward}; 
	file  "ZONE_NAME.zone"; 
};	
						
注意:区域名字即为域名;

(2)建立区域数据文件(主要记录为A或AAAA记录)

     在/var/named目录下建立区域数据文件;

[root@ns1 ~]# vim /var/named/wlm.com.zone   #这里定义的文件要跟上一步在配置里写的文件一致
$TTL 3600
$ORIGIN wlm.com.
@       IN      SOA     ns1.wlm.com.   dnsadmin.wlm.com. (
        2014100101
        1H
        10M
        3D
        1D )
        IN      NS      ns1
        IN      MX   10 mx1
        IN      MX   20 mx2
ns1     IN      A       10.10.10.3
mx1     IN      A       10.10.10.100
mx2     IN      A       10.10.10.200
www     IN      A       10.10.10.4
web     IN     CNAME    www

区域数据库文件说明;
$TTL 3600    # 设置客户端缓存时间
$ORIGIN wlm.com.    # 定义当前区域的名字,下面的@就是替代这个值
@       IN      SOA     ns1.wlm.com.   dnsadmin.wlm.com. (
# SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
# ns1.wlm.com. 该域的主域名服务器
# dnsadmin.wlm.com. 管理员邮箱           
        2014100101    # 序列号:serial
        1H            # 刷新时间间隔:refresh
        10M           # 重试时间间隔:retry, 
        3D            # 过期时长:expire
        1D )          # negative answer ttl:否定答案的缓存时长
        IN      NS      ns1   # 域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的
        IN      MX   10 mx1   #邮件交换器 优先级:0-99,数字越小优先级越高
        IN      MX   20 mx2
ns1     IN      A       10.10.10.3    #地址记录
mx1     IN      A       10.10.10.100    
mx2     IN      A       10.10.10.200
www     IN      A       10.10.10.4
web     IN     CNAME    www            #别名记录

系统的介绍:
主-辅DNS服务器:
    主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
    从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
    序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
    刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
    重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
    过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
    negative answer ttl:否定答案的缓存时长
主服务器”通知“从服务器随时更新数据;

区域传送:
    全量传送:axfr, 传送整个数据库;
    增量传送:ixfr, 仅传送变量的数据;

区域(zone)和域(domain):
magedu.com域:
    FQDN --> IP
正向解析库;区域
    IP --> FQDN
反向解析库;区域

区域数据库文件:
    资源记录:Resource Record, 简称rr;
    记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN --> IPv4;
AAAA:地址记录, FQDN --> IPv6;
CNAME:Canonical Name,别名记录;
PTR:Pointer,IP --> FQDN
MX:Mail eXchanger,邮件交换器;
优先级:0-99,数字越小优先级越高;

资源记录的定义格式:
语法:	name  	[TTL] IN	RR_TYPE value
客户端可以缓存的时间	资源记录
SOA:
name: 当前区域的名字;例如”magedu.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)

例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com.  (
    2017010801	; serial
    2H ; refresh
    10M ; retry
    1W	; expire
    1D	; negative answer ttl 
)

NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
注意:一个区域可以有多个ns记录; 

例如:
magedu.com. 86400 IN NS  	ns1.magedu.com.
magedu.com. 86400 IN NS  	ns2.magedu.com.

MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;

例如:
magedu.com. IN MX 10  	mx1.magedu.com.
magedu.com. IN MX 20  	mx2.magedu.com.

A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;

例如:
www.magedu.com.	IN A	1.1.1.1
www.magedu.com.	IN A	1.1.1.2
bbs.magedu.com.	IN A	1.1.1.1

AAAA:
name:FQDN
value: IPv6

PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQND

例如:
4.3.2.1.in-addr.arpa.  	IN  PTR	www.magedu.com.

CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;

例如:
web.magedu.com.  	IN  	CNAME  www.magedu.com.

注意:
(1) TTL可以从全局继承;
(2) @表示当前区域的名称;
(3) 相邻的两条记录其name相同时,后面的可省略;
(4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

权限及属组修改:

[root@ns1 ~]# chgrp named /var/named/wlm.com.zone 
[root@ns1 ~]# chmod o= /var/named/wlm.com.zone


检查语法错误:

[root@ns1 ~]# named-checkzone wlm.com  /var/named/wlm.com.zone 
zone wlm.com/IN: loaded serial 2014100101
OK
[root@ns1 ~]# named-checkconf

(3)让服务器重载配置文件和区域数据文件

# rndc  reload 或  systemctl  reload  named.service
[root@ns1 ~]# rndc reload
server reload successful

(4)验证

[root@ns1 ~]# ping ns1.wlm.com

PING ns1.wlm.com (10.10.10.3) 56(84) bytes of data.

64 bytes from 10.10.10.3: icmp_seq=1 ttl=64 time=0.036 ms


[root@ns1 ~]# nslookup

> ns1.wlm.com 

Server:10.10.10.3

Address:10.10.10.3#53

Name:ns1.wlm.com

Address: 10.10.10.3


4)配置一个反向解析区域

(1)定义区域

  在主配置文件中或主配置文件辅助配置文件中实现;

[root@ns1 ~]# vim /etc/named.rfc1912.zones
zone "10.10.10.in-addr.arpa" IN {
        type master;
        file "10.10.10.zone";
};

zone  "ZONE_NAME"  IN  {
    type  {master|slave|hint|forward};
    file  "ZONE_NAME.zone"; 
};	
						
注意:反向区域的名字
反写的网段地址.in-addr.arpa 
示例:100.16.172.in-addr.arpa

(2) 定义区域解析库文件(主要记录为PTR)

在/var/named目录下建立区域数据文件;示例:区域名称为100.16.172.in-addr.arpa;(反过来写IP)

[root@ns1 named]# vim /var/named/10.10.10.zone 
$TTL 3600
$ORIGIN 10.10.10.in-addr.arpa.
@       IN      SOA     ns1.wlm.com.    nsadmin.wlm.com. (
        2014100801
        1H
        10M
        3D
        12H )
        IN      NS      ns1.wlm.com.
3       IN      PTR     ns1.wlm.com.
100     IN      PTR     mx1.wlm.com.
200     IN      PTR     mx2.wlm.com.
4       IN      PTR     www.wlm.com.

权限及属组修改:

[root@ns1 named]# chmod o= /var/named/10.10.10.zone
[root@ns1 named]# chgrp named /var/named/10.10.10.zone

 检查语法错误:

zone wlm.com/IN: loaded serial 2014100101
OK
[root@ns1 named]# named-checkconf

(3) 让服务器重载配置文件和区域数据文件

# rndc  reload 或
# systemctl  reload  named.service

验证:

[root@ns1 named]# dig -x 10.10.10.3

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -x 10.10.10.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25014
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;3.10.10.10.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
3.10.10.10.in-addr.arpa. 3600	IN	PTR	ns1.wlm.com.

;; AUTHORITY SECTION:
10.10.10.in-addr.arpa.	3600	IN	NS	ns1.wlm.com.

;; ADDITIONAL SECTION:
ns1.wlm.com.		3600	IN	A	10.10.10.3

;; Query time: 26 msec
;; SERVER: 10.10.10.3#53(10.10.10.3)
;; WHEN: 三 11月 16 13:55:13 CST 2016
;; MSG SIZE  rcvd: 107

至此,主域名服务器已经配置好了。已经可以使用了。

5、辅域名服务器配置

在准备工作已经说过了,这里在添加上/etc/named.conf的配置

options {
        listen-on port 53 { 127.0.0.1; 10.10.10.10; };
        listen-on-v6 port 53 { ::1; };
        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     { localhost; };
        allow-transfer { none; };

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;


配置一个从区域:

1)在master DNS上添加NS记录和A记录

在Master上,确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;

$TTL 3600
$ORIGIN wlm.com.
@       IN      SOA     ns1.wlm.com.   dnsadmin.wlm.com. (
        2014100101    #如果slave要重载配置,这需要变更序列号
        1H
        10M
        3D
        1D )
        IN      NS      ns1
        IN      NS      ns2    #NS记录
        IN      MX   10 mx1
        IN      MX   20 mx2
ns2     IN      A       10.10.10.10    #A记录
ns1     IN      A       10.10.10.3
mx1     IN      A       10.10.10.100
mx2     IN      A       10.10.10.200
www     IN      A       10.10.10.4
web     IN     CNAME    www

语法检查并重新配置

[root@ns1 named]# named-checkzone wlm.com /var/named/wlm.com.zone 
zone wlm.com/IN: loaded serial 2014100101
OK
[root@ns1 named]# rndc reload
server reload successful

 2) 在slave DNS上定义区域

[root@ns2 ~]# vim /etc/named.rfc1912.zones 
zone "wlm.com" IN {
        type slave;    #slave标记为从服务器
        file "slaves/wlm.com.zone"; #×××区域文件在/var/named/slaves目录下,特定的
        masters { 10.10.10.3; };    #填写主域名服务器IP
};

书写格式:
zone "ZONE_NAME"  IN {
    type  slave;
    file  "slaves/ZONE_NAME.zone";
    masters  { MASTER_IP; };
};

3) 重载配置

配置文件语法检查
named-checkconf
重载配置
rndc  reload
systemctl  reload  named.service

说明:当主域名服务器里添加了新记录,只需要主域名服务器重载配置,从域名服务器自动同步。

验证:

(1)在/var/named/slaves目录下自动同步wlm.com.zone文件

[root@ns2 slaves]# pwd
/var/named/slaves
[root@ns2 slaves]# ls
wlm.com.zone

(2)可以解析域名

[root@ns2 slaves]# dig -t A www.wlm.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.wlm.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27069
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wlm.com.			IN	A

;; ANSWER SECTION:
www.wlm.com.		3600	IN	A	10.10.10.4

;; AUTHORITY SECTION:
wlm.com.		3600	IN	NS	ns1.wlm.com.
wlm.com.		3600	IN	NS	ns2.wlm.com.

;; ADDITIONAL SECTION:
ns1.wlm.com.		3600	IN	A	10.10.10.3
ns2.wlm.com.		3600	IN	A	10.10.10.10

;; Query time: 1 msec
;; SERVER: 10.10.10.10#53(10.10.10.10)
;; WHEN: 三 11月 16 14:20:52 CST 2016
;; MSG SIZE  rcvd: 124

至此,辅域名服务器配置完毕

6、缓存域名服务器配置

在上面的准备工作做完了,默认就配置好了缓存域名服务器。

但是我们这里还有在做两点,为大家更好的理解域名服务器的配置。

定义转发:

注意:被转发的服务器必须允许为当前服务做递归;

1) 区域转发:仅转发对某特定区域的解析请求;

配置格式:
    	zone  "ZONE_NAME"  IN {
    	type  forward;
    	forward  {first|only};
    	forwarders  { SERVER_IP; };
    	};
    	first:首先转发;转发器不响应时,自行去迭代查询;
    	only:只转发;


具体配置:

[root@wlm ~]# vim /etc/named.rfc1912.zones #在最后面添加
zone "wlm.com" IN {
        type forward;
        forward first;
        forwarders { 10.10.10.3; };
        };

语法检查,重启bind

[root@wlm ~]# named-checkconf 
[root@wlm ~]# systemctl restart named.service

验证:

[root@wlm ~]# dig -t A www.wlm.com

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.wlm.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5158
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.wlm.com.			IN	A

;; ANSWER SECTION:
www.wlm.com.		3600	IN	A	10.10.10.4

;; AUTHORITY SECTION:
wlm.com.		3600	IN	NS	ns2.wlm.com.
wlm.com.		3600	IN	NS	ns1.wlm.com.

;; ADDITIONAL SECTION:
ns1.wlm.com.		3600	IN	A	10.10.10.3
ns2.wlm.com.		3600	IN	A	10.10.10.10

;; Query time: 53 msec
;; SERVER: 10.10.10.11#53(10.10.10.11)
;; WHEN: 三 11月 16 15:20:59 CST 2016
;; MSG SIZE  rcvd: 124



2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;

配置格式:
    	options {
    	... ...
    	forward  {only|first};
    	forwarders  { SERVER_IP; };
    	.. ...
    	};

具体配置:

vim /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; 10.10.10.11; };    # 监听本机的IP端口
        listen-on-v6 port 53 { ::1; };
        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     { localhost; };    # 允许为其他主机解析
        allow-transfer { none; };          # 从服务器不需要传送
        forward first;                     # 本机不能解析的转发给10.10.10.3做解析
        forwarders { 10.10.10.3; };        # 被转发的服务器IP
        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable no;    #关闭    
        dnssec-validation no;    #关闭

语法检查然后重启bind

[root@wlm ~]# systemctl restart named.service

验证:

[root@wlm ~]# ping www.baidu.com
PING www.a.shifen.com (220.181.112.244) 56(84) bytes of data.
64 bytes from 220.181.112.244: icmp_seq=1 ttl=128 time=6.67 ms
p64 bytes from 220.181.112.244: icmp_seq=2 ttl=128 time=6.60 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1005ms
rtt min/avg/max/mdev = 6.608/6.640/6.672/0.032 ms
[root@wlm ~]# ping www.wlm.com
PING www.wlm.com (10.10.10.4) 56(84) bytes of data.
^C
--- www.wlm.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1001ms

总结:总体上,DNS的配置还是比较简单的。虽然在日常运维中,可能不需要进行实战,毕竟企业内部部署域名服务器的不多,即使有,也是后期的维护了。但是作为运维人员,熟悉DNS的工作原理是非常必要的,通过这些配置,我相信你已经真正的熟悉了DNS。

本来还想配置子域名服务器的,后来觉得没必要了。具体的逻辑图如下,供大家参考。

DNS原理和CentOS7上bind域名服务器配置详解_第7张图片