DNS服务器

DNS介绍:

DNS( Domain Name System)是“域名系统”的英文缩写,提供域名解析服务。即将域名(网址)和IP地址进行相互转换,使用TCP和UDP协议的53端口。DNS属于应用层协议。

一.DNS基本概念

1.完全限定域名FQDN:Full Qualified Domain Name

  • 即每个域在全球网络都是唯一的;另外值得提到的一点是:域并不是指诸如www.google.com这样的域名,而google.com才是域,请看下面域的空间结构。
  • FQDN的组成:主机名+域名。
    如www(主机名是www).baidu.com(域名是baidu.com)
  • 还需要注意的是:域名和IP不是完全一一对应的,即一个域名对应一个IP地址。其实一个域名可以对应多个IP地址;多个域名可以对应一个IP地址。目的很多,如高效率、冗余等。

2.域的空间结构

  • 域分类:根域,顶级域,二级域,三级域。
  • 域结构:根域最大,顶级域次之,二、三级以此类推

(1) 根域(.)

表示为“.”,全球13组根域名服务器以英文字母A到M依序命名,域名格式为“字母.root-servers.net”。

我们访问域名,根域默认不显示。例如:百度真实域名“www.baidu.com.”,而不是“www.baidu.com”

(2) 顶级域(如.com)

顶级域(Top Level Domain,简称TLD)分为三类

1> 通用顶级域:如 .com(商业机构) .org(非营利性组织) .net(网络服务机构)等
2> 国家顶级域:如 .cn(中国) .uk(英国) .us(美国) .jp(日本)
3> 反向域(基础建设顶级域):.arpa,即从IP到FQDN(域名)的反向解析

(3) 二级域名(如baidu.com)

baidu.com
google.com
taobao.com
注意:二级域名是taobao.com,不是taobao

(4) 三级域名(如www.baidu.com)

www: www.baidu.com
mail: mail.aliyun.com

3. DNS服务器查询的类型

  • 递归查询:客户端仅发出一次请求,让DNS服务器去查询返回结果;
  • 迭代查询:要发出多次请求去分别查询不同的DNS服务器;
总结:
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。

4.DNS域名解析方式

(1) 正向解析

将FQDN(域名)转化为IP的解析。

例如:www.mage.com(域名) 转化为 192.168.36.7(IP)

(2) 反向解析

将IP转化为FQDN(域名)的解析。

例如:7.36.168.192.in-addr.arpa.(IP) 转化为 www.magedu.com(域名)

5. DNS服务器类型

  • 主DNS服务器:负责解析至少一个域。
  • 辅助(从)DNS服务器:负责解析至少一个,是主DNS服务器的辅助。
  • 缓存DNS服务器:不负责解析域,只是缓存域名解析结果。
  • 权威DNS服务器:存放域名和IP地址相对应的记录信息

6. DNS的监听端口

TCP协议53端口实现DNS主、从同步
UDP协议53端口实现DNS解析,及主、从同步。


二.DNS的域名解析过程

三.DNS和BIND

  • Linux使用DNS服务,需要安装软件包,有:
    • bind:字符界面、配置简单
    • powerdns:WEB界面、配置较复杂
    • nbound:CentOS7系统新出现的DNS服务软件

下面主要是bind软件的说明

  • 查看系统已有BIND程序包:rpm -ql bind
  • 查看BIND相关程序包:yum list all bind*
    • bind:服务器软件包
    • bind-libs:相关库
    • bind-utils:客户端
    • bind-chroot: /var/named/chroot/
安装bind后,会新生成一个“named用户”和“named用户组”,用来专门启用、管理bind服务(DNS服务)。查看“named用户”命令“cat /etc/passwd”,家目录在“/var/named”,shell类型是“/bin/false”。安装bind软件包后,解压的“/var/named/named.ca”文件存放了互联网中13个根服务器,帮助提供域名解析。  

安装:yum -y install bind
启动服务:systemctl start named
开机自启:systemctl enable named
查看DNS服务使用的端口是TCP和UDP的53,命令是ss -ntlup
查看DNS进程所使用的用户:"ps aux|grep named"会看到是“named用户”  
DNS数据库路径:/var/named  
DNS服务配置文件:/etc/named.conf

修改DNS服务配置文件后,生效有两种办法:方法一,重启named服务;方法二,加载配置文件而不关掉服务在启动服务,这样避免对当前正在访问的用户产生干扰。生效命令:rndc reload 或者 systemctl reload named

1.DNS服务配置文件:/etc/named.conf

  • 每行以分号“;”结尾
  • 注释行用两个斜线“//”
  • “options”为选项,配置DNS很多需要在选项里修改
  • “logging”为DNS的日志
  • “zone”为DNS的区域信息。用来解析“域名和域名存放在某个DNS数据库之间的映射关系”。
(1) “options”为选项

1> listen-on port 53 { XXX };

  • 上面行表示53段口绑定本机的哪个IP地址进行DNS解析,可把“XXX”配置成192.168.36.7,表示53端口绑定本机的192.168.36.7进行DNS解析服务。
  • 表示本机所有IP地址:把“XXX”配置成“localhost”,或者注释此行(行首加两个斜线)。

2> allow-query { localhost; };

  • 上面行表示“允许谁向我查询”。“localhost”表示只允许本机查询。
  • 想要其它电脑通过本机查询,即DNS解析,就把“localhost”改为:
    • “对方网段”---适用局域网进行DNS解析
    • “对方网络”---适用局域网进行DNS解析
    • “any”--------适用互联网进行DNS解析
      注意:any表示所有,把此行用两个斜线注释,也表示所有主机查询
(2)"zone"为区域
  • 解析 “域名” 和 “域名存放在某个DNS数据库(就是一个文件)” 之间的映射关系
例如有:域名(magedu.com)、DNS数据库名(magedu.com.zone)。他们两个一一对应,这种映射关系就写到“zone”里。(说明:DNS数据库magedu.com.zone存放了magedu.com域名对应的IP地址)
  • zone区域分为:正向区域(正向解析) 和 反向区域(反向解析)
域名 和 反向区域数据库 的映射关系:
  例:36.168.192.in-addr.arpa.(域名) 和 192.168.36.zone(数据库名)

域名 和 正向区域数据库 的映射关系:
  例:magedu.com(域名) 和 magedu.com.zone(数据库名)  
	

## 四.DNS测试工具  

除了系统提供的一些名称解析命令外,DNS的客户端软件包“bind-utils”当中提供了一些测试命令,这些命令是:dig、host、nslookup。  

### 1. 测试工具
  1. dig用于测试dns系统,因此,不会查询hosts 文件进行解析;

    1> dig命令的语法: dig[-t type]name[@SERVER][query options]

     查询选项:+[no]trace 跟踪解析过程 / +[no]recurse 进行递归解析
    
     测试反向解析: dig -x IP@SERVER
    
     模拟区域传送: dig -t axfr ZONE_NAME @SERVER
    

    2> 示例1:dig www.baidu.com

     显示结果中:
     
     DNS是否解析成功,查看“ANSWER SECTION”部分
     提供DNS解析主机的IP地址,查看“显示结果底部SERVER行”
    

    3> 示例3:dig www.magedu.com @192.168.36.7
    本机向192.168.36.7请求解析www.magedu.com(适用临时测试) 显示结果中:

     可看到www.magedu.com的权威服务器是101.200.188.230,
     因为域名和IP的对应关系存放在此服务器,而192.168.36.7没有
     存放对应关系,所以不是www.magedu.com的权威服务器。
    
     如果192.168.36.7是www.magedu.com的权威服务器,在显示结果中,
     上面部分的“flags行”后面,会出现“aa”
    
  2. host命令语法: host [-a] name [SERVER]

    示例1:host www.baidu.com

    示例2:host www.baidu.com 192.168.36.7 本机向192.168.36.7请求解析www.baidu.com(适用临时测试)

  3. nslookup [-option][name |-] [server]

     交互式模式:
    
         nslookup>
    
             server IP:指明使用哪个DNS server 进行查询;
    
             set q=RR_TYPE:指明查询的资源记录类型;
    
     NAME:要查询的名称;
    
**检查命令**  

检查主DNS服务器的配置文件是否错误:named-checkconf 说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件

检查区域数据库的文件是否错误:named-checkzone 域名 域名对应数据库的文件 例如:named-checkzone magedu.com /var/named/magedu.com.zone 说明:检查magedu.com域对应的数据库文件magedu.com.zone是否有错误

### 2. rndc命令  

rndc --> rndc (953/tcp端口)

格式:rndc COMMAND

常用COMMAND如下: reload: 重载主配置文件和区域解析库文件 reload zonename: 重载区域解析库文件 retransfer zonename: 手动启动区域传送,而不管序列号是否增加 notify zonename: 重新对区域传送发通知(“推”同步) reconfig: 重载主配置文件 querylog: 开启或关闭查询日志文件/var/log/message trace: 递增debug一个级别(级别调试的越高,跟踪日志就更详细) trace LEVEL: 指定使用的级别(级别越高,跟踪日志就更详细) notrace:将调试级别设置为 0 flush:清空DNS服务器的所有缓存记录



## 五.资源记录(RR)  

* 资源记录:Resource Record, RR  
* 区域(zone)解析(数据)库:由众多RR组成  
* 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX  
* 作为一个DNS区域数据库文件,必须有SOA、A、NS记录,其他记录根据企业情况来加  


SOA:Start Of Authority,起始授权记: 一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

A:internet Address,作用:域名正向解析成IPv4地址

AAAA:作用:域名正向解析成IPv6地址

PTR:PoinTeR,作用:IPv4地址反向解析成域名

NS:Name Server,专用于标明当前区域的DNS服务器

CNAME : Canonical Name,别名记录

MX:Mail eXchanger,邮件交换器

TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项。 如:SPF(反垃圾邮件)记录,https验证等


### 1. 资源记录定义的格式  

语法:name [TTL] IN rr_type value  

说明: (1)name:表示主机名。如blog.magedu.com.默认magedu.com.可不写,因为域名就是它,而资源记录是域名对应数据库,当中的某一行。“name”写blog会默认为blog.magedu.com.(注意blog后面不可加“.”,不然表示结束)
(2)TTL:表示“DNS缓存时长,一般TTL会统一设置,如“$TTL 1D”表示1天(全局继承);也可在每行记录的“TTL”位置自己设置时间,默认单位是秒 (3) IN:表示Internet(互联网) (4) rr_type:表示记录的类型 (5) value:记录对应的值。如A记录对应的值是IP地址

注意: (1) @可用于引用当前区域(即域名)的名字。如 :magedu.com.(@常用在SOA记录的“name”位置) (2) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应 (3) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机


### 2. SOA记录  

SOA记录示例:@ TTL IN SOA dns1.magedu.com.  

name: 当前区域的名字,例如“magedu.com.”或者用“@”表示当前区域名字  

value(值): 有多部分组成。如下  

(1) 这个域的主DNS服务器的域名。如dns1.magedu.com.

注意: 配置SOA记录后,必须有一条A记录,因为SOA的值,即域名,要有对应的IP。 (对于SOA记录,任何一个SOA记录后面的服务器名字,都应该在后续有一个A记录)

示例:DNS区域数据库文件中:SOA记录和对应的A记录 SOA:@ TTL IN SOA dns1(“.magedu.com.”不用写,默认它存在) A:master TTL IN A IP地址(如192.168.36.7)

(2) 这个域的管理员的邮箱地址。注意地址中不能使用@符号,一般用.替换。 示例:admin.magedu.com(对应邮箱是admin@magedu.com)

(3) 当前数据库和从DNS服务器的同步策略 同步策略类型:推和拉

1>推:以主服务器为主,当主服务器发生变化,推送消息给从服务器

    数据库版本号写在SOA记录的value(值)后面的括号里的第一个位置。
    例:@ TTL IN SOA dns1 (201904221015)

说明:
    触发条件:主服务器的数据库更新。
    当数据库的版本号(必须是整数)发生变化,视为更新;
    而不是数据库内容发生变化。

2>拉:以从服务器为主,主动问主服务器是否发生变化

    轮询的时间间隔写在版本号后面,默认单位是秒。
    也可写其他时间,如10m(10分钟)。表示每10分钟询问一次。
    例:@ TTL IN SOA dns1 (201904221015 10m)

说明:
    以轮询(过一会问一下,过一会问一下)的方式,
    询问主服务器的数据库文件是否发生变化。

3>重试时间间隔:

    重试时间间隔写在轮询间隔后面,默认单位是秒。
    例:@ TTL IN SOA dns1 (201904221015 10m 2m)

说明:
    假如轮询间隔是10分钟。当第一次轮询,没有同步,
    又不想等一下次轮询(即不想等10分钟后在询问),
    可设置重试时间间隔,默认单位是秒。如设置2分钟。
    即第一次没结果后,2分钟后在询问主DNS数据库是否变化(版本号是否改变)。

4>从DNS服务器对应数据库记录的过期时长

    从服务器数据库记录的过期时长,写在重试时间间隔后面,默认单位是秒。
    例:@ TTL IN SOA dns1 (201904221015 10m 2m 1D)-->"1D"为1天

说明:
    如果第一次轮询,数据库没有同步,
    第二次重试时间及2分钟后也没有同步,
    那么会认为从DNS服务器的数据库记录老旧

5>不存在的记录的缓存时长

    不存在的记录的缓存时长,
    写在“从DNS服务器的数据库记录,的过期时长”后面,默认单位是秒。
    例:@ TTL IN SOA dns1 (201904221015 10m 2m 1D 6H)-->"6H"为6小时

说明:
    当访问某个域名,www写成wwwww,用户的本地DNS服务器会返回此记录不存在。
    因为数据库没有这样的记录。但不能不管,因为有可能其他人犯这样的错误,
    所以设置不存在记录的缓存时长,过了时间后,就会清除。

### 3. NS记录  

* 由NS记录可以知道网络中有几个DNS服务器  
* NS记录:指明当前区域里,谁是主DNS服务器、谁是从DNS服务器  
* name: 当前区域的名字,例如“magedu.com.”或者用“@”表示当前区域名字
* value(值): 当前区域的某DNS服务器的名字,例如ns2.magedu.com  

注意:

(1)对于NS记录,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

示例:
    NS:magedu.com. TTL IN NS ns2.magedu.com.
    A:ns2.magedu.com. TTL IN A IP地址(如192.168.36.8)

(2)相邻的两个资源记录的name相同时,后续的可省略

(3)一个区域可以有多个NS记录

例如:
NS记录
    magedu.com. IN NS ns1.magedu.com.(TTL没写,就继承全局的TTL)
    magedu.com. IN NS ns2.magedu.com.(TTL没写,就继承全局的TTL)
对应的A记录
    ns1.magedu.com. TTL IN NS IP地址
    ns2.magedu.com. TTL IN NS IP地址

从上面的NS记录可以知晓,网络中有三个DNS服务器,分别是:
    主DNS服务器:magedu.com
    从DNS服务器:ns1.magedu.com
    从DNS服务器:ns2.magedu.com
### 4. A记录  

* name: 某主机的FQDN(域名),例如:www.magedu.com.  
* value: 主机名对应主机的IP地址  

#### 示例1:  

A记录示例: www.baidu.com. TTL IN A IP地址 也可以写成: www TTL IN A IP地址 (因为baidu.com.会默认存在,因为这是baidu.com域的数据库文件)


#### 示例2:  

通过A记录可以实现:一个域名对应多个IP地址。例如一个网站的页面由3个服务器提供,并且内容一致。当一个服务器坏掉,不影响用户访问网页的解析服务,因为有另一个服务器。

在magedu.com区域的DNS数据库文件里,添加A记录,使得一个域名对应多个IP地址,进行解析,实现冗余功能。

webserver TTL IN A 192.168.1.2

webserver TTL IN A 192.168.1.3

webserver TTL IN A 192.168.1.4


#### 示例3:泛域名解析  

泛域名概念:当用户访问www.baidu.com时,把www写成wwwwwww,通过设置泛域名即可把本域(这里是baidu.com)写错的域名指定某一web主机的web页面,这里起个名字叫“错误页面”。目的是:达到不会访问不了,在“错误页面”指定本域首页


泛域名和上面的某某记录在一个文件,格式是:  

    *(表示所有) TTL IN A IP地址


#### 示例4:指定访问二级域名  

直接写二级域名,有些网站访问不了。如www.boc.cn(中国银行),不写www访问不了。

解决方法: 和上面的某某记录在一个文件,格式是: @ TTL IN A IP地址

记得重新加载DNS的配置文件“rndc reload”


#### 示例5:GENERATE语句  

功能:生成多条A记录。 如:访问server1,返回结果是1.1.1.1;访问server2,返回结果是1.1.1.2;访问server100,返回结果是1.1.1.100等等,如下面的示例

和上面的某某记录一样,书写在同一个文件,格式是: $GENERATE 1-100 server$(名称) A 1.1.1.$(IP地址)

添加上面记录后,修改版本号,使用“rndc reload”生效,在DNS客户端使用“dig 域名”验证


### 5. 别名记录CNAME  

* name: FQDN(域名)的别名名称  
* value: 真正FQDN(域名)的名字  
* 别名记录经常用于CDN加速。  
* 设置别名,可以把本机解析委托给其他主机进行解析  
  * 例如:www TTL IN CNAME dns.aliyun.com(将本机解析,委托主机名是“dns.aliyun.com”的解析)  


在企业里,部署的域名其实很长,通过设置别名,让用户更容易访问,如下:

域名:bj-tam-web-node1-100-23.magedu.com 说明:北京拼音字母首写--天安门区域拼音字母首写--web服务器--节点1--IP地址的后两位--域名

magedu.com域名的DNS数据库文件中的别名记录,如下: www TTL IN CNAME bj-tam-web-node1-100-23

实现:访问www.magedu.com其实是访问bj-tam-web-node1-100-23.magedu.com

**注意**  

一般设置某DNS服务器的A记录,添加两个A记录,对应IP地址不同,可实现均衡负载的作用。而且,在主配置文件,添加一条别名记录,用户访问DNS服务器更简单。而管理员最好访问DNS服务器真正的名字,因为存在节点、地域等标识,可以清楚知道是哪台DNS服务器。


### 6. MX 邮件记录  
* MX: Mail eXchanger,邮件交换器  
* 邮件发送需要域内DNS服务器的帮助,根据DNS配置,找到MX记录,就找到邮件转发器。  
* name: 当前区域的名字  
* value: 当前区域的某邮件服务器(smtp服务器)的主机名  
* 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-
99),表示此服务器的优先级;数字越小优先级越高  
  * 例如:  
    magedu.com. TTL IN MX 10 mx1.magedu.com.  
    magedu.com. TTL IN MX 20 mx2.magedu.com  
* **注意**: 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录  

查询某域名的邮件服务器:dig -t mx 二级域名


## 六.DNS服务器的ACL  

### 1. 概述  
* bind(DNS服务器)中基础的安全相关的配置:  
    * acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用  
* bind有四个内置的acl:none,any,localhost,localnet  
* 注意:只能先定义ACL后使用;因此一般定义在配置文件中,处于options模块的前面  

总结: 在DNS服务器里,内置了一些访问控制列表(ACL)。功能:定义地址集合。系统自带的ACL如localhost(本机所有IP)、any(所有任意IP0)、none(没有一个IP)、localnet(DNS服务器属于哪个网段,这个网段就是localnet)

### 2. 格式和示例  

格式: acl acl_name { ip; net/prelen; …… };

示例: acl mynet { 172.16.0.0/16; 10.10.10.10; };


### 3. 访问控制的指令  

* allow-query {}: 允许查询的主机;白名单  
* allow-transfer {}:允许区域传送的主机;白名单  
* allow-recursion {}: 允许递归的主机,建议全局使用  
* allow-update {}: 允许更新区域数据库中的内容  

### 4. 示例  

只在局域网使用DNS,并且只给局域网的某些网段提供解析服务

(1)打开文件“/etc/named.conf”

(2)在options模块的前面,添加ACL,如下: acl lannet(局域网名) {
192.168.238.0/24(网段); 192.168.234.0/24(网段); };

(3)在options模块的“allow-query”添加局域网名和本机的所有IP(不添加本机所有IP,你自己就不会解析自己),如下: allow-query { lannet;localhost; };

(4)使配置生效 rndc reload


## 七.智能CDN  

### 1. 概述  
CDN:Content Delivery Network内容分发网络  
提供CDN服务商:蓝汛,网宿,帝联等都是专做CDN服务  

CDN又称为智能DNS,意思是:上海用户查询网站A(存放网站A的服务器上海和北京都有),“网站A公司”的主DNS服务器会让“存放在上海的子DNS服务器”查询上海用户的请求,返回给客户端结果,即离客户端最近的DNS服务器给客户端解析。注意:此公司在北京和上海的服务器上,网页内容都一致。

如果你的公司在全国各地没有机房,就无法进行DNS解析和提供WEB页面的浏览。所以一般是大公司(如阿里)才会搭建智能DNS,大多数普通的公司,都是购买大公司的服务,来实现公司的智能DNS。即:把WEB文件放到租用的CDN节点服务器上(CDN服务商的电脑),并定义域名的别名,别名的IP地址是租用的CDN节点服务器的IP地址。



### 2. 用户访问具有智能DNS网站的过程:  

![](https://s1.51cto.com/images/blog/201905/13/2272f3a16d18db9c78198427dd642bbe.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  

1.将我的网站文件放到租用CDN机房的某些服务器上,并定义别名  
2.用户访问http:www.a.com,请求发送到用户网络的本地DNS服务器(LDNS)  
3.本地DNS服务器(LDNS)查询有没有http:www.a.com的IP地址,没有就从根服务器进行迭代查询  
4.查询到a.com服务器的权威服务器(网站授权DNS),而权威服务器不会把IP地址给用户,而是返回域名的别名(www.a.tbcdn.com)  
5.本地DNS服务器(LDNS)就认为http:www.a.com是http:www.a.tbcdn.com的别名,就会查询http:www.a.tbcdn.com的IP地址  
6.http:www.a.tbcdn.com其实是CDN服务商的服务器(DNS调度系统),这个服务器有智能功能,里面记录了全国或全世界,各地对应的IP地址。收到北京用户的请求后,会返回北京CDN对应的IP地址(2.2.2.2),收到上海用户的请求后,会返回上海CDN对应的IP地址(9.9.9.9)  
7.北京用户知道IP后,就会请求在北京CDN的节点服务器(2.2.2.2),改服务器返回内容给用户  
8.当租用CDN服务器上的网页没来得及更新数据,北京用户访问时,北京CDN服务器会请求WEB页面的源服务器,更新数据后在返回给北京的用户。  

### 3. 示例:企业网站内部实现智能CDN功能(即下面的实验6)  



## 八.压力测试  

* /root/bind-xxx/contrib/scripts  
* 编译压力测试工具  
    > [root@centos7dns ~]# cd /root/bind-xxx/contrib/queryperf  
    > [root@centos7dns ~]# ./configure  
    > [root@centos7dns ~]# make  
    > [root@centos7dns ~]# cp queryperf /usr/local/bind9/bin  
    > [root@centos7dns ~]# queryperf -h  

* 压力测试:  
    > [root@centos7dns ~]# vim test.txt  
        >> www.magedu.com A  
        >> magedu.com NS  
        >> magedu.com MX  
        >> pop3.magedu.com A  
        >> web.magedu.com A  

    > [root@centos7dns ~]# queryperf -d test.txt -s 127.0.0.1  

* 打开日志功能:  
    > [root@centos7dns ~]# rndc querylog
    > [root@centos7dns ~]# rndc status
    > [root@centos7dns ~]# queryperf -d test.txt -s 127.0.0.1
    > [root@centos7dns ~]# wc -l /var/log/message

## 九. DNS排错  

* [root@centos7dns ~]# dig A example.com  

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523 ... SERVFAIL:The nameserver encountered a problem while processing the query.

    * 可使用dig +trace排错,可能是网络和防火墙导致  

* NXDOMAIN:The queried name does not exist in the zone.  
    > 可能是CNAME对应的A记录不存在导致  
* REFUSED:The nameserver refused the client's DNS request due to policy restrictions.  
    > 可能是DNS策略导致  
* NOERROR不代表没有问题,也可以是过时的记录  
* 查看是否为权威记录,flags:aa标记判断  
* 被删除的记录仍能返回结果,可能是因为*记录存在  
* 如:*.example.com. IN A 172.25.254.254  
* 注意“.”的使用  
* 避免CNAME指向CNAME记录,可能产生回环  
    > test.example.com. IN CNAME lab.example.com.  
    > lab.example.com. IN CNAME test.example.com.  
* 正确配置PTR记录,许多服务依赖PTR,如sshd,MTA  
* 正确配置轮询round-robin记录  


## 十.实验  

企业环境中,需要把DNS服务用到的端口在防火墙里信任。做实验把防火墙、selinux关掉就可以了。  

在防火墙关闭TCP协议53端口:iptables -A INPUT -p tcp --dport 53 -j REJECT 在防火墙关闭UDP协议53端口:iptables -A INPUT -p udp --dport 53 -j REJECT 清空防火墙全部配置:iptables -F

* 主、从DNS服务器可以实现冗余备份、高效率等功能  
* 主、从DNS服务器之间是同步的,两者之间的数据需一致  
* 主DNS服务器:负责更新(主要)数据、对用户提供解析,管理这个域。可以带多个从DNS服务器。  
* 从DNS服务器:负责同步(主要)数据、对用户提供解析,备份这个域。主DNS坏掉,从DNS还可以继续工作,实现冗余。  


### 1. 正向解析主服务器  

#### (1) 安装DNS包
    yum -y install bind

#### (2) 启动DNS服务  
    systemctl start named  

#### (3) 修改DNS主配置文件/etc/named.conf  

    vim /etc/named.conf  
    1> 注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线  

    2> 安全设置:
        指定哪些从DNS服务器可以同步主DNS服务器的数据,可设置多个
        示例:在allow-query的上一行添加
            allow-transfer {从DNS服务器的IP地址;};
        
        如果不设置此安全命令,在DNS客户端使用“dig -t axfr magedu.com(主域名) @DNS服务器IP地址”可以直接看到DNS服务器的记录。


#### (4) 打开专门存放区域(zone)数据库文件的配置文件  
    vim /etc/named.rfc1912.zones

参照区域“zone”的格式,新增区域,**创建域名和数据库名的映射关系**,如下:  

zone "域名(如magedu.com)" IN { type(类型) master(主DNS服务器);
file(文件) "之后创建:DNS数据库的文件名(如magedu.com.zone)";
};

注意:

  1. magedu.com不要写成www.magedu.com。因为我们要解析magedu.com的很多子域(主机),而不单单是www.magedu.com这一个域(主机)。 2.DNS数据库名的后缀“.zone”可以是任何字符,如“.abc”
**检查错误**  

    检查主DNS服务器的配置文件是否错误:named-checkconf
    说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件
#### (5) 创建区域(zone)数据库文件  

/var/named是专门存放DNS数据库文件的文件夹,查看DNS主配置文件“/etc/named.conf”,其中directory行表示存放DNS数据库文件的路径  

创建区域(zone)数据库文件:  

区域(zone)数据库文件可根据“named.localhost”文件为模板,复制一份进行修改,就变成自己的数据库文件了。 [root@centos7dns ~]# ll /var/named total 16 drwxrwx--- 2 named named 23 Apr 24 00:31 data drwxrwx--- 2 named named 35 Apr 24 00:31 dynamic -rw-r----- 1 root named 2281 May 22 2017 named.ca -rw-r----- 1 root named 152 Dec 15 2009 named.empty -rw-r----- 1 root named 152 Jun 21 2007 named.localhost -rw-r----- 1 root named 168 Dec 15 2009 named.loopback drwxrwx--- 2 named named 6 Jan 30 01:23 slaves [root@centos7dns ~]#

创建区域(zone)数据库文件,保留原有属性 cp -p /var/named/named.localhost /var/named/magedu.com.zone


#### (6 ) 修改区域(zone)数据库文件  

区域(zone)数据库文件的内容,是由一行一行的区域数据记录而成。这一行行内容就叫“资源记录(RR)”。  

* 区域数据库文件里必须包含SOA记录、NS记录、A记录  

修改区域数据库文件内容如下图  

![](https://s1.51cto.com/images/blog/201904/23/fd56d01f1789d6d3179708fff41b9d3d.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  

**检查错误**  

    检查区域数据库的文件是否错误:
    named-checkzone magedu.com /var/named/magedu.com.zone

#### (7) 使配置生效  

[root@centos7dns ~]# rndc reload server reload successful(成功) [root@centos7dns ~]#


#### (8) 验证  

**临时验证**  

在客户端使用测试命令  
格式:dig 域名主机 @DNS解析服务器  
示例:dig dbserver1.magedu.com @192.168.238.134  
    dbserver1.magedu.com由数据库文件

![](https://s1.51cto.com/images/blog/201904/23/05b116771f9ac2eefd361e6c7c32d170.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)


**永久验证**  

在客户端的网卡配置文件里,DNS设置为“主DNS服务器”的IP地址  

******************************************************  

### 2. 反向解析主服务器  

* 使用PTR记录。注意:考虑“将哪个IP地址段”解析成域名  
* 在区域(zone)中,注意“反向解析域名”的书写格式  


#### (1) 安装DNS包
    yum -y install bind

#### (2) 启动DNS服务  
    systemctl start named  

#### (3) 修改DNS主配置文件/etc/named.conf  

    vim /etc/named.conf  
    注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线  


#### (4) 打开专门存放区域(zone)数据库文件的配置文件

vim /etc/named.rfc1912.zones


参照反向解析区域“zone”的格式,新增区域,**创建域名和数据库名的映射关系**,如下:  

zone "域名(如238.168.192.in-addr.arpa)" IN { type(类型) master(主DNS服务器);
file(文件) "之后创建:DNS数据库的文件名(如192.168.238.zone)";
};

**检查错误**  

    检查主DNS服务器的配置文件是否错误:named-checkconf
    说明:检查/etc/named.conf文件和/etc/named.rfc1912.zones文件
#### (5) 创建区域(zone)数据库文件  

/var/named是专门存放DNS数据库文件的文件夹,查看DNS主配置文件“/etc/named.conf”,其中directory行表示存放DNS数据库文件的路径  

创建反向解析区域(zone)数据库文件:  

区域(zone)数据库文件可根据“named.loopback”文件为模板,复制一份进行修改,就变成自己的数据库文件了。 [root@centos7dns ~]# ll /var/named total 16 drwxrwx--- 2 named named 23 Apr 24 00:31 data drwxrwx--- 2 named named 35 Apr 24 00:31 dynamic -rw-r----- 1 root named 2281 May 22 2017 named.ca -rw-r----- 1 root named 152 Dec 15 2009 named.empty -rw-r----- 1 root named 152 Jun 21 2007 named.localhost -rw-r----- 1 root named 168 Dec 15 2009 named.loopback drwxrwx--- 2 named named 6 Jan 30 01:23 slaves [root@centos7dns ~]#

创建区域(zone)数据库文件,保留原有属性 cp -p /var/named/named.loopback /var/named/192.168.238.zone

#### (6 ) 修改区域(zone)数据库文件  

* 区域数据库文件里必须包含SOA记录、SOA对应的A记录、NS记录  

修改区域数据库文件内容如下  

[root@centos7dns ~]# cat /var/named/238.168.36.zone $TTL 1D @ IN SOA master admin.magedu.com. ( 1 ; serial 1H ; refresh 10M ; retry 12H ; expire 1D ) ; minimum

NS master 192.168.238.134

master A 192.168.238.134 134 PTR webserver1.magedu.com.

[root@centos7dns ~]#


#### (7) 使配置生效  

[root@centos7dns ~]# rndc reload server reload successful(成功) [root@centos7dns ~]#


***********************************************************  

### 3. 正向从(辅助)服务器  

* 目标:实现数据的自动同步  

#### (1) 安装DNS包
    yum -y install bind

#### (2) 启动DNS服务  
    systemctl start named  

#### (3) 修改DNS主配置文件/etc/named.conf  

    vim /etc/named.conf  
    1> 注释以“listen-on”“allow-query”开头的两行,即在这两行前面加两个斜线

    2> 安全设置:
        指定,不允许任何服务器同步DNS的数据
        示例:在allow-query的上一行添加
            allow-transfer {none;}; 
        此处配置可以指定某从DNS服务器同步本机DNS数据,即“none”改为“从DNS服务器IP地址” 

        
        如果不设置此安全命令,在DNS客户端使用“dig -t axfr magedu.com(主域名) @DNS服务器IP地址”可以直接看到DNS服务器的记录。


#### (4) 打开专门存放区域(zone)数据库文件的配置文件  

    vim /etc/named.rfc1912.zones

参照区域“zone”的格式,新增区域,**创建域名和数据库名的映射关系**,如下:  

zone "域名(如magedu.com 这里写的是主域名)" IN { type(类型) slave(从DNS服务器);
masters {192.168.238.134;};《---》指定主DNS服务器 file(文件) "之后创建:从DNS数据库的文件名(如: slaves/magedu.com.slave)";
};

注意:"/slaves"表示:把从DNS服务器的zone配置文件放到此文件夹,也推荐放到此文件夹


#### (5) 重启DNS服务,同步主DNS服务器区域(zone)数据库文件到“/var/named/slaves”目录  

1> 重启DNS服务 systemctl restart named 2> 查看同步的区域(zone)数据库文件(注意权限等信息) ll /var/named/slaves

注意:“/var/named/slaves/magedu.com.slave”不是普通文件,看不到里面内容,用来防止信息泄露。可用“file /var/named/slaves/magedu.com.slave”查看“magedu.com.slave”文件的类型


#### (6) 使配置生效  

[root@centos7dns ~]# rndc reload server reload successful(成功) [root@centos7dns ~]#


#### (7) 验证  
* 验证:DNS的冗余和主、从DNS服务器的同步  
* 验证设备:主DNS服务器、从DNS服务器、DNS客户端  

DNS的冗余:

1> 在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析“dbserver1.magedu.com”域名的DNS服务器是谁。可以看到,在结果最下面“行SERVER”显示DNS解析服务器是某某某

2> 关闭主DNS服务器主机或禁用网络,在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析。查看是不是从DNS服务器解析

3> 关闭从DNS服务器,恢复主DNS服务器,在DNS客户端使用命令"dig dbserver1.magedu.com"查询解析。查看是不是主DNS服务器解析

主、从DNS服务器的同步:

1> 在主DNS服务器,其“/var/named/magedu.com.zone”文件添加一个A记录 k8s TTL IN A 6.6.6.6

2> 主、从DNS服务器同步 同步机制分两种: 推(主DNS推送给从DNS。注意:需要设置推送的命令才能实现)和 拉(根据同步时间等待同步。注意:如果版本号没发生变化,就不会同步)

推:在主DNS服务器的“/var/named/magedu.com.zone”文件添加从DNS服务器
    第一步:@ TTL IN NS slave
    第二步:slave TTL IN A 192.168.238.128(从DNS服务器IP地址)
    第三步:更改版本号,加1

3> 在主DNS服务器上,重新加载DNS配置文件 rndc reload

4> 关闭主DNS服务器网络

5> 在DNS客户端,使用“dig k8s.magedu.com”是否能解析成功

************************************************************  


### 4. 子域服务器  

* 创建子域有两种情况:  
    * 父域和子域在同一主机。适用访问量小的  
    * 父域委派子域到另一台服务器(不同主机,使用“粘合记录”)。适用访问量大的

#### (1) 父域和子域在同一台主机  
方法一:创建一条A记录  
* 将父域和子域放到一个文件,缺点是父、子域的记录混杂  

在主DNS服务器(即父域magedu.com)的配置文件里,给子域(www.shanghai.magedu.com)添加一条A记录,如下:

第一步:vim /var/named/magedu.com.zone www.shanggai TTL IN A 1.1.1.1(IP地址) 第二步:更改版本号 第三步:保存退出 第四步:使用“rndc reload”命令生效 第五步:在DNS客户端,使用“dig www.shanghai.magedu.com”验证子域IP地址是不是1.1.1.1


方法二:创建一个独立的域  
* 在“/etc/named.rfc1912.zones”文件里,除了父域“magedu.com”,在新建一个父域的子域“shenzhen.magedu.com”,如下:   
第一步:编辑“/etc/named.rfc1912.zones”文件,创建子域区域(zone)  

[root@centos7dns ~]# vim /etc/named.rfc1912.zones zone "shenzhen.magedu.com" IN { type master; file "shenzhen.magedu.com.zone"; };

第二步:以父域"magedu.com"配置文件"magedu.com.zone"为模板,复制一份,改名"shenzhen.magedu.com.zone",当做子域“shenzhen.magedu.com”的配置文件  

[root@centos7dns ~]# cp -p /var/named/magedu.com.zone /var/named/shenzhen.magedu.com.zone



第三步:编辑子域“shenzhen.magedu.com”的配置文件,如图:  


![](https://s1.51cto.com/images/blog/201905/07/e79cf9f4f4b02d9606cf3fca5d27c3ec.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)    


第四步:使用“rndc reload”命令生效  
第五步:使用DNS客户端命令验证,如图:  


![](https://s1.51cto.com/images/blog/201905/07/80d5bee39728d37f638ff162b03e1caa.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  


#### (2) 父域委派子域到另一台服务器上  
*  glue record:粘合记录,父域授权子域的记录
* 父域:magedu.com;子域:chengdu.magedu.com  
* 思路:在父域的配置文件,指定访问子域“chengdu.magedu.com”的位置。  

第一步:

在父域(主域)DNS数据库的配置文件“/var/named/magedu.com.zone”里,加入委派记录(粘合记录):即NS记录和NS对应的A记录。(如下图红框)

注意:下图中,“委派DNS主机” 和 “从DNS服务器”的IP地址一样,是因为我把"从DNS服务器"当做新创建的“主DNS服务器”(懒得配置了)

![](https://s1.51cto.com/images/blog/201905/08/099316898c628ceae079a564a9fc81a0.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  


第二步:  

在委派主机上,创建主DNS服务器,即在IP地址是192.168.238.128的主机是创建。(可参考上面创建主DNS服务器的实验)

第三步:  

编辑委派主机的“/etc/named.rfc1912.zones”文件,添加子域的zone区域 [root@centos7 ~]# vim /etc/named.rfc1912.zones

zone "chengdu.magedu.com" IN {
type master; file "chengdu.magedu.com.zone"; };


第四步:  
````  
编辑DNS数据库文件,即在“/var/named”目录创建的DNS数据库配置文件(var/named/chengdu.magedu.com.zone)。

[root@centos7 ~]# cat /var/named/chengdu.magedu.com.zone 
$TTL 1D
@	IN SOA	master admin.magedu.com. (
					20190427	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	    NS	master
master	    A	192.168.238.128
webserver2  A   3.3.3.3
www 	    CNAME   webserver2

[root@centos7 ~]#
````  
第五步:  
````  
在主DNS服务器(192.168.238.134)执行生效命令“rndc reload”

在委派DNS服务器(192.168.238.128)执行生效命令“rndc reload”
````  

第六步:  
````  
在DNS客户端测试:(如下图)

[root@centos6dns ~]# dig www.chengdu.magedu.com @192.168.238.128
[root@centos6dns ~]# dig www.chengdu.magedu.com @192.168.238.134

结论:由下面两张图的结果可以得知,用户访问“www.chengdu.magedu.com”域,用户的主机先向“192.168.238.134”主机请求解析“www.chengdu.magedu.com”域的IP地址,“192.168.238.134”主机没有“www.chengdu.magedu.com”域的IP地址,就查找子域,发现“192.168.238.128”主机有“www.chengdu.magedu.com”域的IP地址,就委派给“192.168.238.128”主机解析域名,从而让用户正常访问网站。这就是委派主机。
````  
![](https://s1.51cto.com/images/blog/201905/08/b68c7f8ad5cf6e9240972355ed8ba6df.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  

![](https://s1.51cto.com/images/blog/201905/08/e0dce8776ad19355e966c4fc476a9b2b.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  



### 5. 转发(缓存)服务器  

* 迭代查询是:查询根及根下面的DNS服务器。而转发服务器可以查询非根的DNS服务器  
* 注意:被转发的服务器需要能够为请求者做递归查询,否则转发请求不予进行  

* 转发服务器有两种转发策略“first和only”  
    * first:“本地DNS服务器”向“域内主、从DNS服务器”请求域名解析,如果没有,“本地DNS服务器”自己向“根服务器”迭代查询  
    * only:“本地DNS服务器”向“域内主、从DNS服务器”请求域名解析,如果没有就不找了  

````  
大致过程:
创建并配置DNS转发服务器,
接着在主DNS服务器的主配置文件“/etc/named.conf”里,添加:
    forward first(或only);  --->转发策略
    forwarders {192.168.238.128;(转发服务器的IP地址)}  --->转发给谁
    说明:这两行表示,先转发给转发服务器查询,如果没有,我自己在互联网查询
````  

(1). 安装DNS包  
(2). 启动DNS服务  
(3). 修改DNS主配置文件/etc/named.conf  
(4). 修改区域(zone)数据库文件的配置文件
````  
编辑“/etc/named.rfc1912.zones”文件  

zone "wangge.com" IN {
        type master;
        file "wangge.com.zone";
};

````  
(5). 创建数据库文件  
````  
vim /var/named/wangge.com.zone

$TTL 1D
@	IN SOA	master admin.wangge.com. (
					20190427	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	    NS	master
master	    A	192.168.238.128
webserver2  A   5.5.5.5
www 	    CNAME   webserver2
````  
(6).使配置生效  

````  
[root@centos7dns ~]# rndc reload
server reload successful(成功)
[root@centos7dns ~]#
````  
(7).验证DNS转发服务器是否安装配置完成  
````  
首先自己本机测试,www.wangge.com是否解析是5.5.5.5
[root@centos7 named]# dig www.wangge.com @127.0.0.1
````  

(8).在“主DNS服务器”添加“DNS转发服务器”的记录(全局转发和特定转发)  

* 建议关闭配置文件“/etc/named.conf”里的dnssec功能  
    * dnssec-enable no;  
    * dnssec-validation no;  

````  
编辑配置文件“/etc/named.conf”的“Options模块”,配置全局转发:
    forward first(或only);  --->转发策略
    forwarders {192.168.238.128;(转发服务器的IP地址)}  --->转发给谁
    说明:这两行表示,先转发给转发服务器查询,如果没有,我自己在互联网查询


说明:特定转发
特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
编辑配置文件“/etc/named.rfc1912.zones”
zone "域名(如wangge.com)" IN {
type forward;
forward first|only;
forwarders { ip;};
````  
(9).验证DNS转发服务器是否成功  
````  
已有设备:
主DNS服务器“192.168.238.134”
DNS转发服务器“192.168.238.128”
DNS客户端“192.168.238.133”

因为使用的是“first”策略,所以DNS客户端向主DNS服务器查询“www.wangge.com”域名解析,主DNS服务器没有,会转发给“DNS转发服务器”查询,就会查询到想要的结果(5.5.5.5)。如果查询解析“www.zhangge.com”,因为“主DNS服务器和DNS转发服务器”都没有记录,所以“DNS客户端”会自己从互联网查询解析,如果查询到解析结果,就证明“DNS服务器”创建、配置成功。(前提:互联网上真有www.zhangge.com这个域名)

1>在DNS客户端,使用“dig www.wangge.com @192.168.238.134(主DNS服务器IP地址)”查询“www.wangge.com”域名的解析(www.wangge.com对应的IP是否是5.5.5.5,有则成功)

2>在DNS客户端,使用“dig www.zhangge.com @192.168.238.134”查询“www.zhangge.com”域名的解析(www.zhangge.com对应的IP地址是否存在,有则成功)
````  


### 6. 智能DNS服务器  
  
示例:企业网站内部实现智能CDN功能(即下面的实验6)  

* 针对三个城市:北京、上海、其他城市实现智能CDN

#### (1)在主DNS服务器/var/named/目录里,创建三个区域数据库:magedu.com.bj(北京)、magedu.com.sh(上海)、magedu.com.zone(其他城市)  
````  
[root@centos7dns named]# ll
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.bj
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.sh
-rw-r----- 1 root  named  373 May  8 19:07 magedu.com.zone
[root@centos7dns named]#
````  

#### (2).编辑区域数据库文件  

目的:北京用户用北京的服务器返回结果;上海和其他地区同理
````  
1.编辑北京的区域数据库文件
[root@centos7dns named]# cat magedu.com.bj 
$TTL 1D
@	IN SOA	master admin.magedu.com. (
					20190427	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	    NS	master
master	    A	192.168.238.134
webserver2  A   6.6.6.6(北京CDN机房WEB服务器的IP地址)
www 	    CNAME   webserver2

[root@centos7dns named]#

2.编辑上海的区域数据库文件
[root@centos7dns named]# cat magedu.com.sh 
$TTL 1D
@	IN SOA	master admin.magedu.com. (
					20190427	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	    NS	master
master	    A	192.168.238.134
webserver2  A   8.8.8.8(上海CDN机房WEB服务器的IP地址)
www 	    CNAME   webserver2

[root@centos7dns named]#

3.编辑其他地区的区域数据库文件
[root@centos7dns named]# cat magedu.com.zone 
$TTL 1D
@	IN SOA	master admin.magedu.com. (
					20190427	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	    NS	master
master	    A	192.168.238.134
webserver2  A   9.9.9.9(其他地区CDN机房WEB服务器的IP地址)
www 	    CNAME   webserver2

[root@centos7dns named]#
````  

#### 3.定义ACL  

目录:哪些客户端属于北京、上海、其他地区
````  
打开/etc/named.conf文件,定义三个ACL
acl beijingnet(北京) {  
    192.168.238.0/24;
};
acl shanghainet(上海) {  
    172.22.0.0/16;
};
acl othernet(其他地区) {  
    any;
};
注意:把较小范围的往前写,会优先实现前面的acl。所以,上面其他地区的acl不能千万不能放在前面。
````  

#### 4.将定义的ACL与数据库关联(视图技术:将客户端的IP地址和数据库的关联关系。语法有view等)  

 编辑/etc/named.conf文件,在最下面的“include行前面”添加:
>注意:有了view,所有的区域配置都必须在view里,不然不会生效,还报错。格式是“客户端的IP地址和数据库的关联关系--->创建view”   

(1)添加内容1:  
````  
新增加行:指定客户端 ACL(北京的ACL)---》来自北京的客户端属于北京view
match-clients { beijingnet;};
````  
(2)添加内容2:  

方法一:  
````  
新增加行:
北京view对应的数据库,是专门的区域数据库,即第一步创建的区域数据库文件
zone "magedu.com" {  
                type master;
                file "magedu.com.bj";
};
````  

方法二:  
````  
* 新增加行:
“include "/etc/named.rfc1912.zones.bj" ;”
* 删除或注释最下面的行:
“include "/etc/named.rfc1912.zones" ;”
* 将“根”的区域信息,放到“/etc/named.rfc1912.zones.bj”文件(因为有了view后,所有的区域信息要放到view里面)
    
    cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj

    vim /etc/named.rfc1912.zones.bj
    zone "." IN {
            type hint;
            file "named.ca";
    };

    注意:“/etc/named.rfc1912.zones.bj”文件是
    根据“/etc/named.rfc1912.zones”文件为模板复制的,
    在把上面“根区域信息”添加进去。
    之后,在“/etc/named.rfc1912.zones.bj”文件里,
    指定区域对应的数据库文件,就是最开始创建的文件。
````  

**总结**:  
>使用方法二的办法,创建ACL与数据库关联的命令如下:  


````  
1. 编辑文件“/etc/named.conf”
vim /etc/named.conf
创建以下行:
view beijingview{  
        match-clients { beijingnet;};
        include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview{  
        match-clients { shanghainet;};
        include "/etc/named.rfc1912.zones.sh";
};
view otherview{  
        match-clients {othernet;};
        include "/etc/named.rfc1912.zones";
};
删除下面一行:
include "/etc/named.rfc1912.zones

2.复制“根的区域信息“到“/etc/named.rfc1912.zones”文件,并以此为模板创建其它地址的区域文件,在文件里指定各个区域的数据库文件,之后把“/etc/named.conf”文件的“根区域信息”删除
复制:
[root@centos7dns ~]# vim /etc/named.rfc1912.zones(其他区域)
zone "." IN {
            type hint;
            file "named.ca";
};
zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
};
创建:
[root@centos7dns ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
[root@centos7dns ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh

指定各个区域的数据库文件:
北京区域:
vim /etc/named.rfc1912.zones.bj
zone "magedu.com" IN {
        type master;
        file "magedu.com.bj";

上海区域:
vim /etc/named.rfc1912.zones.sh
zone "magedu.com" IN {
        type master;
        file "magedu.com.sh";

使配置文件生效:
[root@centos7dns ~]# rndc reload
server reload successful
[root@centos7dns ~]#

3.在“/etc/named.conf”文件,搜索allow-query,内容改为“any(所有人)”如下:
    allow-query     { any; };

4.检查配置是否有错误
[root@centos7dns ~]# named-checkconf  
````  


#### 5.重新加载配置文件  

````  
[root@centos7dns ~]# rndc reload
server reload successful
[root@centos7dns ~]#
````  

#### 6. 验证  

在DNS客户端(两个IP地址:192.168.238.133和172.22.0.160)使用dig命令验证:因为客户端的192.168.238.0网段,属于北京区域,如果用DNS主服务器(两个IP地址192.168.238.134和172.22.145.195)解析www.magedu.com域,得到6.6.6.6,就证明:DNS服务器根据DNS客户端的IP,自动分配较近区域的DNS服务器提供解析。同理,用DNS主服务器(172.22.145.195)解析www.magedu.com域,得到8.8.8.8,也能证明。
````  
[root@centos6dns ~]# dig www.magedu.com @192.168.238.134

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.134
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50144
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	CNAME	webserver2.magedu.com.
webserver2.magedu.com.	86400	IN	A	6.6.6.6

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	master.magedu.com.

;; ADDITIONAL SECTION:
master.magedu.com.	86400	IN	A	192.168.238.134

;; Query time: 1 msec
;; SERVER: 192.168.238.134#53(192.168.238.134)
;; WHEN: Thu May 16 11:34:29 2019
;; MSG SIZE  rcvd: 110

[root@centos6dns ~]#



[root@centos6dns ~]# dig www.magedu.com @172.22.145.195

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @172.22.145.195
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36959
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	CNAME	webserver2.magedu.com.
webserver2.magedu.com.	86400	IN	A	8.8.8.8

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	master.magedu.com.

;; ADDITIONAL SECTION:
master.magedu.com.	86400	IN	A	192.168.238.134

;; Query time: 4 msec
;; SERVER: 172.22.145.195#53(172.22.145.195)
;; WHEN: Thu May 16 11:43:12 2019
;; MSG SIZE  rcvd: 110

[root@centos6dns ~]#



````  


## 十一.总结性试验  

* 实现:互联网 DNS架构  

![](https://s1.51cto.com/images/blog/201905/17/d6045fa768fa7b0b2c7c80438a61f3a2.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)  

**说明**:
用户使用浏览器访问www.magedu.com网站  
首先查询本地DNS服务器是否知道这个网站,本地DNS说没有;  
接着用户向"根服务器"递归查询这个网站,“根服务器”说没有;  
接着用户向"com服务器"查询这个网站,“com服务器”说没有;  
接着用户向"主、从DNS服务器"查询这个网站,“主、从DNS服务器”说有,因为它们是这个网站的权威服务器,解析完成后返回客户端这个网站主机的IP地址,用户得到后就可以访问了。  

**设备**:  


|编号   |设备            |作用                    |IP地址                                |  
|:-----:|:-------------:|:----------------------:|:--------------------:|
|001    |centos6        |用户客户端               |192.168.238.6                       |
|002    |centos7        |用户本地DNS服务器(LDNS)  |192.168.238.7                        |
|003    |centos7        |网络DNS服务器(根)        |192.168.238.17                       |
|004    |centos7        |网络DNS服务器(com)     |192.168.238.27                       |
|005    |centos7        |网站主DNS服务器(master)  |192.168.238.37                       |
|006    |centos7        |网站从DNS服务器(slave)   |192.168.238.47                       |
|007    |centos6        |网站WEB服务器(网站)      |192.168.238.67                       |




**过程**:  

* 注意每个主机的主机名对应的命令  
* 建议按照下面顺序完成实验  
* 建议每搭建好一个主机,都用客户端验证,方便知道是否搭建成功,以及后面出错好排查  


1. 设置“用户客户端”电脑的DNS是“192.168.238.7”。并使用“用户客户端”的电脑(192.168.238.6),ping其他所有主机。确保能ping通所有主机,在进行下一步。 


2.搭建配置WEB网站“www.magedu.com”的页面(192.168.238.67)  

````  
1. 安装WEB的包httpd
centos6默认安装了httpd的包,使用“rpm -q httpd”命令查看,所以不用再安装httpd的包

2.启动httpd服务
[root@centos6web ~]# service httpd start

3.创建WEB的网站页面
[root@centos6web ~]# echo "welcome to magedu.com" > /var/www/html/index.html
[root@centos6web ~]# cat /var/www/html/index.html 
welcome to magedu.com
[root@centos6web ~]#

4.使用用户客户端访问WEB的网站
[root@centos6client ~]# curl 192.168.238.67
welcome to magedu.com
[root@centos6client ~]#

发现可以访问,之后我们就搭建DNS服务器,成功后,我们使用域名访问,如果获取到网页内容,即表示DNS服务器解析域名为IP地址成功,即实验成功。
````  

3.搭建配置主DNS服务器(192.168.238.37)  


````  
1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "magedu.com" IN {  
        type master;
        file "magedu.com.zone";
};

5.在“/var/named”目录创建“magedu.com区域”的数据库文件“magedu.com.zone”
[root@centos7master ~]# cd /var/named
[root@centos7master named]# ls
data     named.ca     named.localhost  slaves
dynamic  named.empty  named.loopback
[root@centos7master named]# vim magedu.com.zone(adm.magedu.com.是邮箱)
$TTL 1D
@ IN SOA ns1 adm.magedu.com. ( 1 1H 10M 1D 3H )
        NS ns1
        NS ns2
ns1 A 192.168.238.37(主DNS服务器)
ns2 A 192.168.238.47(从DNS服务器)
www A 192.168.238.67(WEB服务器)

6.设置区域数据库文件属性,提高安全性
[root@centos7master named]# ll
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r--r-- 1 root  root   136 May 18 02:25 magedu.com.zone
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7master named]# chgrp named magedu.com.zone 
[root@centos7master named]# chmod 640 magedu.com.zone 
[root@centos7master named]# ll
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named  136 May 18 02:25 magedu.com.zone
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7master named]#

7.启动named服务
[root@centos7master named]# systemctl start named


8.在DNS客户端(192.168.238.6)验证主DNS服务器是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.37

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.37
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59033
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	A	192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	ns1.magedu.com.
magedu.com.		86400	IN	NS	ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.238.37
ns2.magedu.com.		86400	IN	A	192.168.238.47

;; Query time: 44 msec
;; SERVER: 192.168.238.37#53(192.168.238.37)
;; WHEN: Fri May 17 04:16:31 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]# 

````  

4.搭建配置从DNS服务器(192.168.238.47)  


````  

1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "magedu.com" IN {  
        type slave;
        masters {192.168.238.37;};
        file "slaves/magedu.com.zone";
};

5.安全加固
(1)在主DNS服务器(192.168.238.37)上,进行安全设置,只允许哪些主机“同步主DNS服务器的数据”
在“/etc/named.conf”文件的“Options”模块,"allow-query"行的上面添加下面的一行,如下:
allow-transfer {192.168.238.47;};(从DNS服务器的IP地址,表示只允许从这台从DNS服务器同步主DNS服务器的数据)
之后重启named服务,重新加载DNS配置
[root@centos7master named]# systemctl restart named
[root@centos7master named]# rndc reload
server reload successful
[root@centos7master named]#

(2)在从DNS服务器(192.168.238.47)进行安全设置,不允许其它主机同步DNS数据
在“/etc/named.conf”文件的“Options”模块,"allow-query"行的上面添加下面的一行,如下:
allow-transfer {none;};
重启named服务:[root@centos7master named]# systemctl restart named

6. 查看是否同步成功主DNS服务器的“DNS数据” 
[root@centos7slave ~]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 304 May 18 03:08 magedu.com.zone
[root@centos7slave ~]#

7.在DNS客户端(192.168.238.6)验证从DNS服务器是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.47

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.47
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42952
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	A	192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	ns1.magedu.com.
magedu.com.		86400	IN	NS	ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.238.37
ns2.magedu.com.		86400	IN	A	192.168.238.47

;; Query time: 2 msec
;; SERVER: 192.168.238.47#53(192.168.238.47)
;; WHEN: Fri May 17 04:50:40 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]#

````  

5.搭建配置网络DNS服务器(com)(192.168.238.27)  


````  

1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

4.编辑区域文件(创建委派)
[root@centos7master ~]# vim /etc/named.rfc1912.zones
添加下面的区域配置
zone "com" IN {  
        type master;
        file "com.zone";
};

5.创建“com区域”的数据库文件
[root@centos7com ~]# vim /var/named/com.zone(admin.magedu.com是邮箱)
$TTL 1D
@ IN SOA ns1 admin.magedu.com. ( 1 1D 1H 1W 3D )
        NS ns1
magedu  NS mageduns1(主DNS服务器的NS记录)
magedu  NS mageduns2(从DNS服务器的NS记录)
ns1 A 192.168.238.27
mageduns1 A 192.168.238.37
mageduns2 A 192.168.238.47


6.重启named服务
[root@centos7com ~]# systemctl restart named


7.在DNS客户端(192.168.238.6)验证网络DNS服务器(com)是否搭建配置成功

[root@centos6client ~]# dig www.magedu.com @192.168.238.27

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.27
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33275
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	A	192.168.238.67(委派成功)
;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	mageduns1.com.
magedu.com.		86400	IN	NS	mageduns2.com.

;; ADDITIONAL SECTION:
mageduns1.com.		86400	IN	A	192.168.238.37
mageduns2.com.		86400	IN	A	192.168.238.47

;; Query time: 10 msec
;; SERVER: 192.168.238.27#53(192.168.238.27)
;; WHEN: Fri May 17 05:16:35 2019
;; MSG SIZE  rcvd: 128

[root@centos6client ~]#

````  

6.搭建配置网络DNS服务器(根)(192.168.238.17)  


````  

1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

之后,找到“.”的区域信息,默认配置为网络上“根”的区域配置,我们做实验,要把这台机器当做“网络上的根”,所以修改“.”区域信息如下:
zone "." IN {
        type master;
        file "root.zone";
};


4.编辑区域文件  
因为“.”的区域信息直接在"/etc/named.conf"文件里改了,就不用再“/etc/named.rfc1912.zones”文件里修改了。

5.创建“.”区域的数据库文件
[root@centos7com ~]# vim /var/named/root.zone(admin.magedu.com是邮箱)
$TTL 1D
@ IN SOA ns1 admin.magedu.com. ( 1 1D 1H 1W 3D )
        NS ns1
com     NS comns(根的子域com的NS记录)
ns1     A       192.168.238.17
comns   A       192.168.238.27


6.设置“.”区域数据库文件(root.zone)属性,提高安全性
[root@centos7gen ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
-rw-r--r-- 1 root  root   123 May 18 03:59 root.zone
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7gen ~]# chgrp named /var/named/root.zone 
[root@centos7gen ~]# chmod 640 /var/named/root.zone 
[root@centos7gen ~]# ll /var/named/
total 20
drwxrwx--- 2 named named    6 Jan 30 01:23 data
drwxrwx--- 2 named named    6 Jan 30 01:23 dynamic
-rw-r----- 1 root  named 2281 May 22  2017 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
-rw-r----- 1 root  named  123 May 18 03:59 root.zone
drwxrwx--- 2 named named    6 Jan 30 01:23 slaves
[root@centos7gen ~]# 

7.重启named服务
[root@centos7com ~]# systemctl restart named


8.在DNS客户端(192.168.238.6)验证网络DNS服务器(根)是否搭建配置成功
[root@centos6client ~]# dig www.magedu.com @192.168.238.17

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com @192.168.238.17
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46594
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	A	192.168.238.67

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	mageduns2.com.
magedu.com.		86400	IN	NS	mageduns1.com.

;; ADDITIONAL SECTION:
mageduns1.com.		86400	IN	A	192.168.238.37
mageduns2.com.		86400	IN	A	192.168.238.47

;; Query time: 9 msec
;; SERVER: 192.168.238.17#53(192.168.238.17)
;; WHEN: Fri May 17 05:47:48 2019
;; MSG SIZE  rcvd: 128

[root@centos6client ~]#

````  

7.搭建配置网络DNS服务器(根)(192.168.238.7)  


````  

1.确保能联通外网,yum源正常
配置yum源可参考https://www.cnblogs.com/renpingsheng/p/7845096.html

2.安装DNS的软件包bind
[root@centos7master ~]# yum -y install bind

3.编辑主配置文件
[root@centos7master ~]# vim /etc/named.conf
“//”表示注释,注释下面两行。保存退出
//      listen-on port 53 { 127.0.0.1; };
//      allow-query     { localhost; };

把下面两行的“yes”改为“no”(转发设置)
dnssec-enable no;
dnssec-validation no;


4.根据实验的要求,我们要把“192.168.238.17”这台主机当做网络上的“根”。所以要修改默认配置,把“根服务器”指定为“192.168.238.17”这台机器,如下:
[root@centos7ldns ~]# vim /var/named/named.ca
(清空里面的配置,只留下下面的两行,并修改第二行的IP地址为我们创建的“根”服务器的IP)
.                       518400  IN      NS      a.root-servers.net.
a.root-servers.net.     3600000 IN      A       192.168.238.17


5.重启named服务  
[root@centos7ldns ~]# systemctl restart named

````  

8.验证结果  


````  

1.为了避免干扰,把除了“用户客户端”和“WEB服务器”,其他所有服务器(5台)的DNS缓存清除  
清除命令:[root@centos7ldns ~]# rndc flush

2.查看用户客户端的DNS
[root@centos6client ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.238.7
[root@centos6client ~]#

3.使用“用户客户端”访问www.magedu.com,解析到IP地址,最终获取到网页
[root@centos6client ~]# dig www.magedu.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.magedu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51250
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.magedu.com.			IN	A

;; ANSWER SECTION:
www.magedu.com.		86400	IN	A	192.168.238.67(成功)

;; AUTHORITY SECTION:
magedu.com.		86400	IN	NS	ns1.magedu.com.
magedu.com.		86400	IN	NS	ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.238.37
ns2.magedu.com.		86400	IN	A	192.168.238.47

;; Query time: 16 msec
;; SERVER: 192.168.238.7#53(192.168.238.7)
;; WHEN: Fri May 17 06:17:53 2019
;; MSG SIZE  rcvd: 116

[root@centos6client ~]# curl www.magedu.com
welcome to magedu.com(成功)
[root@centos6client ~]#


4.为了验证DNS的主、从功能,我们把主DNS服务器关掉,用从DNS服务器来给用户提供域名解析,实现访问www.magedu.com网站的效果。
(注意:先把所有电脑(5台)的DNS缓存清除,使用“rndc flush”命令)
第一步:清除所有服务器的DNS缓存
第二步:关闭主DNS服务器(关机或关闭网络)
第三步:使用“用户客户端”访问www.magedu.com网站
[root@centos6client ~]# curl www.magedu.com
welcome to magedu.com
[root@centos6client ~]#

````  


## 十二. 编译安装bind  

1. 下载bind:  

````  
isc.org:
bind-9.10
bind-9.11
bind-10
````  

2.编译安装bind  

````  
• tar xvf bind-9.11.0a3.tar.gz
• cd bind-9.11.0a3/
• groupadd -r -g 53 named
• useradd -r -u 53 -g 53 named

• ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --withoutopenssl --disable-ipv6 --disable-chroot --enable-threads

• make
• make install
````  
3.vim /etc/named/named.conf  
````  
options {
directory “/var/named/”;
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file “named.localhost";
allow-update {none;};
};
zone “1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update {none;};
};
````  
4.区域数据库  
````  
• mkdir /var/named
• named-checkconf
• dig +norec @a.root-servers.net > /var/named/named.ca
• vim /var/named/named.localhost
$TTL 1d
@ IN SOA localhost. admin.localhost. (
2016061801
1h
5m
7d
1d)
IN NS localhost.
localhost. IN A 127.0.0.1
````  
5.vim /var/named/named.loopback  
````  
$TTL 1d
@ IN SOA localhost. admin.localhost. (
2016061801
1h
5m
7d
1d)
NS @
 A 127.0.0.1
 PTR localhost.
````  
6.设置权限  
````  
• chmod 640 /var/named/*
• chmod 640 /etc/named/named.conf
• chgrp -R named /var/named/
• chgrp named /etc/named/named.conf
````  
7.启动服务和测试  
````  
• man named
• named -u named -f -g -d 3 前端级别3方式运行
• named -u named 后台运行
• killall named
• ss -tuln
• tail /var/log/message
• named -u named
````  
8.支持rndc  
````  
• rndc reload 观察错误提示
• rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key
• tail /etc/named/rndc.conf >> /etc/named/named.conf
• killall -SIGHUP named
• rndc status
````