DNS服务器在企业中应用也是十分广泛的,搭建环境中,主机数量偏多,IP管理的话不好进行,所以就需要用主机名称来管理,为了处理IP与主机名的一一对应关系,这时候便用到了DNS服务,下面我们来一起了解一下这个服务吧。
DNS的英文全名叫Domain Name Service,或者Domain Name System ,它是处在应用层的协议,是基于C/S,服务器/客户端结构体系的,它占用UDP和TCP的53端口,普通用户去查一条解析记录,走UDP的53端口,而区域传输需要同时使用UDP和TCP的53端口,包括主从复制也需要,这一点我们后面再谈。
一般用来实现DNS解析用到的软件是BIND,它是一款老牌的提供DNS服务的软件,历史悠久,同时这个公司也提供DHCP服务的软件。
BIND的英文全名叫Bekerley Internat Name Domain ISC 这是它的官网,有兴趣可以去看看:www.isc.org.
在Linux中,本身提供本地名称解析配置文件是hosts,它在在/etc/hosts文件中;
在Windows中,他存放在%WINDIR%/system32/drivers/etc/hosts 中,%WINDIR%表示的是你装系统时候的系统盘,比如C盘,D盘
对于DNS服务器的类型,主要有以下几种:
- 主DNS服务器
管理和维护所负责解析的域内解析库的服务器 - 从DNS服务器
从主服务器或从服务器“复制”(区域传输)解析库副本
在解析库里面有以下几项关键内容- 序列号:解析库版本号,主服务器解析库变化时,其序列递增
- 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
- 过期时长:从服务器联系不到主服务器时,多久后停止服务 “通知”机制:主服务器解析库发生变化时,会主动通知从服务器
- 缓存DNS服务器(转发器)
这种DNS服务器就相当于小区里的DNS,为客户端提供传递解析请求,同时也可以缓存DNS记录,可以加快用户访问速度,减短解析时间。
一次完整的查询请求经过的流程是下面这样的:
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…
而在返回解析结果的时候,会有以下几种内容(例如dig查询):
- 肯定答案:得到的解析结果
- 否定答案:请求的条目不存在等原因导致无法返回结果
- 权威答案:直接得到的解析结果
- 非权威答案:通过转发,一步一步查询得到的结果
而对于BIND来说,它的具体内容和配置文件有以下:
-
服务脚本和名称:/etc/rc.d/init.d/named #CentOS6
-
/usr/lib/systemd/system/named.service #CentOS7
-
主配置文件:
- /etc/named.conf
- /etc/named.rfc1912.zones
- /etc/rndc.key
-
解析库文件:/var/named/ZONE_NAME.ZONE
-
注意:
- 一台物理服务器可同时为多个区域提供解析
- 必须要有根区域文件;named.ca
- 应该有两个(如果包括ipv6的,应该更多)实现localhost 和本地回环地址的解析库
-
rndc: remote name domain controller, 默认与bind安装在同一主机,且只能通过127.0.0.1连接
named进程,使用TCP的953端口提供辅助性的管理功能,比如:- rndc reload 不用重新启动BIND,使配置文件生效
- rndc flush 清楚DNS缓存
rndc后面加:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0 flush:清空DNS服务器的所有缓存记录
主配置文件内容:
- 主配置文件: 全局配置:options {};
- 日志子系统配置:logging {};
- 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone “ZONE_NAME” IN {};
这里需要特别强调,由于BIND软化历史悠久,它的配置文件语法是C语言风格,每一句话,只要换行必须加分号";",注释也不再是"#",而是"//" - 注意:任何服务程序如果期望其能够通过网络被其它主机访问 ,至少应该监听在一个能与外部主机通信的IP地址上
- 缓存名称服务器的配置: 监听外部地址即可
dnssec: 建议关闭dnssec,设为no
主DNS名称服务器:
- 在主配置文件/etc/named.conf中定义区域
zone “ZONE_NAME” IN {
type {master|slave|hint|forward};
type有四种类型,我们后面再讲
file “ZONE_NAME.zone”;
allow-update { none; };
这里这一项,它的具体作用后面再讲,不加也可以,不是必须的
}; - 定义区域解析库文件
出现的内容
宏定义
资源记录 - 主配置文件语法检查: named-checkconf
- 解析库文件语法检查:
named-checkzone “yangyang.host” /var/named/yangyang.host.zone - 配置文件重新加载:
rndc status|reload
service named reload
说了这么多,也不如实实在在的搭建一个服务来的明白,那我们下面就来具体搭建一个DNS服务吧!
一.正向yangyang.host解析
1.安装包bind
yum install -y bind
2.vim /etc/named.conf
修改这个主配置文件,需要知道,如果下面两项没有修改,会造成客户端无法连接你的DNS服务器。
第一项:
listen-on port 53 { localhost;};
这一项的意思是,监听自己回环IP的53端口,默认是127.0.0.1 这样是把端口绑定到了127.0.0.1IP上,只有你自己通过127.0.0.1才能连接到服务器,其他人不可以,而且你在服务器上使用自己的真正IP也不行,只能使用这个回环IP。这一项也可以使用//注释掉。
第二项:
allow-query { any;};
这一项不开的话,其他人还是不能访问,默认是localhost,只允许自己的IP来访问,这也失去了DNS服务器的意义。所以需要把它改为any,允许任何人访问,这里你也可以改成具体IP:192.168.1.20,或者改为网段:192.168.1.0/24,这一项也可以使用//注释掉。
好啦,到这里,主配置文件就修改好了,在许多教程中,会在主配置文件下面来添加区域文件,但是这样不方便管理,容易乱,需要注意在主配置文件最下面有这样一句话:include “/etc/named.rfc1912.zones”;
它的意思就是这路径下的文件也可以定义,它是包含在主配置文件里的,所以我们就在这里设置区域文件,方便统一管理。
3.vim /etc/named.rfc1912.zones
修改这个文件配置区域文件,在里面找个地方加入下面内容,切记不能忘了分号";"
zone "yangyang.host" IN {
type master; //声明是主DNS服务器,因为它有主从之分
file "yangyang.host.zone"; //声明区域数据库文件路径,这里写的是相对路径,系统知道他应该在/var/named/下面找
};
4.vim /var/named/magedu.com.zone
修改区域数据库文件,这里十分关键,为核心内容,格式也十分重要,为什么DNS叫“只有我搭建不好的服务”,原因就在这。
首先,这个文件实在/var/named/目录下创建的,但是进去会发现没有这个文件,所以需要你拷贝模板,并且重新命名,自己修改,模版也在这个目录下,叫:named.localhost
cp -a /var/named/named.localhost yangyang.host.zone
这里的yangyang.host.zone是上一步在zone "yangyang.host"里面的file “yangyang.host.zone” 里面的内容,所以名称必须统一,为你要解析的域名。
$TTL 1D
@ IN SOA dnssrv1 admin.yangyang.host. (
0 ; serial
1H ; refresh
600 ; retry
1D ; expire
3H ) ; minimum
NS dnssrv1
dnssrv1 A 192.168.218.100
websrv1 A 6.6.6.6
www CNAME websrv1
@ MX 10 mailsrv
mailsrv A 192.168.218.101
这里我们主要说一下这个解析数据库里面的每一项含义:
区域解析库是由众多RR(Resource Record)组成:
- 资源记录:Resource Record, RR
- 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
- SOA:Start Of Authority,起始授权记录;一个区域解析库有 且仅能有一个SOA记录,必须位于解析库的第一条记录
- A:internet Address,作用,域名(QFDN) --> IPv4
- AAAA: 域名(QFDN) --> IPv6
- PTR: PoinTeR,IP --> FQDN
- NS: Name Server,专用于标明当前区域的DNS服务器
- CNAME:Canonical Name,别名记录
- MX: Mail eXchanger,邮件交换器
资源记录SOA定义的格式:
语法:name [TTL] IN RR_type value
- 注意:
- (1) TTL可从全局继承
- (2) @可用于引用当前区域的名字
- (3) 同一个名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应
- (4) 同一个值也可能有多个不同的定义名字;通过多个不同的 名字指向同一个值进行定义;此仅表示通过多个不同的名字可 以找到同一个主机
- name: 当前区域的名字,例如“yangyang.host.”
- value: 有多部分组成
- (1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
- (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换 ,例如linuxedu@yangyang.host. 等价linuxedu.yangyang.host.
- (3) 主从服务区域传输相关定义以及否定的答案的统一的TTL
对于这个区域数据库文件:
TTL是生存时间,也就说DNS缓存时间 1D是一天,以此类推1H 一小时,1W 一周,默认不写字母为秒,例如:10 是10秒
@表示本服务器的域,也就是yangyang.host.
这里有一点需要十分注意!!!
这里有一点需要十分注意!!!
这里有一点需要十分注意!!!
在区域数据库文件里,你的域名只要后面没加".",系统会默认给你补全,他认为你这不全,比如:@可以写成yangyang.host. 但是你要是写yangyang.host,他就会认为你应该是yangyang.host.yangyang.host. 所以你的配置文件就出了问题。
其实它的思路很简单,比如:
NS dnssrv1
dnssrv1 A 192.168.218.100
websrv1 A 6.6.6.6
www CNAME websrv1
第一步,你肯定得先把服务器的IP表示出来对吧,因为在之前SOA记录了定义了服务器的名称dnssrv1,还有邮箱名称admin.yangyang.host.
@ IN SOA dnssrv1 admin.yangyang.host.
所以,因为有继承机制, NS dnssrv1这一行前面不用写,系统也知道是声明@为DNS服务器,而@不就是yangyang.host.吗?
第二步,因为你声明了DNS服务器,但是还没有IP,所以
才有了dnssrv1 A 192.168.218.100,IP与服务器对应。
第三步,websrv1解析了地址6.6.6.6,但是我们都习惯www,所以把www声明为websrv1的别名,
所以这就都出来了.
在SOA中,以下需要注意:
0 ; serial 是判断主DNS数据库变化的标准
修改数据库后需要手动加一
1D ; refresh
从服务器一天拉取一次数据库
1H ; retry
如果拉取失败,一小时以后再次尝试
1W ; expire
数据库信息存活时间为一周
一周以后失效
3H ) ; minimum
3小时之内不需要查询上次没查到的记录
5.systemctl start named
启动服务
之前启动过的也可以使用
rndc reload
重新加载配置文件
6.测试
使用dig
这里使用dig需要下载bind-utils软件包,
yum install -y bind-utils
里面也还有nslookup和host等其他测试命令
dig www.yangyang.host @DNS服务器IP
NF记录
-
name: 当前区域的名字
-
value: 当前区域的某DNS服务器的名字,例如
ns.yangyang.host. -
注意:一个区域可以有多个NS记录
例如:- yangyang.host. IN NS
- yangyang.host. IN NS
-
注意:
ns1.yangyang.host. ns2.yangyang.host.- 相邻的两个资源记录的name相同时,后续的可省略
- 对NS记录而言,任何一个ns记录后面的服务器名字 ,都应该在后续有一个A记录
MX记录
- name: 当前区域的名字
- value: 当前区域的某邮件服务器(smtp服务器)的主机名
- 一个区域内,MX记录可有多个;但每个记录的value之前应该 有一个数字(0-99),表示此服务器的优先级;数字越小优先 级越高
- 例如:
yangyang.host. IN MX 10 mx1.yangyang.host.
IN MX 20 mx2.yangyang.host.
- 注意:
- 对MX记录而言,任何一个MX记录后面的服务器名字 ,都应该在后续有一个A记录
A记录
- name: 某主机的FQDN,例如www.yangyang.host.
- value: 主机名对应主机的IP地址
- 例如:
www.yangyang.host. IN A 1.1.1.1
www.yangyang.host. IN A 2.2.2.2
mx1.yangyang.host. IN A 3.3.3.3
mx2.yangyang.host. IN A 4.4.4.4
$GENERATE 1-254 HOST$ A 1.2.3.$
*.yangyang.host. IN A 5.5.5.5
yangyang.host. IN A 6.6.6.6
注意:
这里
$GENERATE 1-254 HOST$ A 1.2.3.$
$GENERATE用来实现一一对应
类似:server1 - 1.2.3.1 server100 - 1.2.3.100
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址 比如上面的*.yangyang.host.
其他记录
- AAAA:
- name: FQDN
- value: IPv6
- PTR:
- name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作 4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为: 4.3.2.1.in-addr.arpa.
- value: FQDN
- 例如:
4.3.2.1.in-addr.arpa. IN PTR www.yangyang.host.
如1.2.3为网络地址,可简写成:
4 IN PTR www.yangyang.host. - 注意:网络地址及后缀可省略;主机地址依然需要反着写
- CNAME:
- name: 别名的FQDN
- value: 真正名字的FQDN
- 例如:
www.yangyang.host. IN CNAME websrv.yangyang.host.
二.反向解析192.168.218.101
有了前面的基础,后面就好理解,我这里只叙述重要的关键点。
反向解析的zone文件需要把IP倒过来写
zone "218.168.192.in-addr.arpa"{
type master;
file "192.168.218.zone";
};
区域数据库文件
模版为/var/named/named.loopback
$TTL 1D
@ IN SOA master admin.yangyang.host. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 127.0.0.1
100 PTR master.yangyang.host.
101 PTR www.yangyang.host.
其中的@代表:
218.168.192.in-addr.arpa. IP域
也可以这样写
直接解析master或者把master解析到回环IP,再由回环IP返回对应IP是同样的道理,都可以
$TTL 1D
@ IN SOA master admin.yangyang.host. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.218.100
100 PTR master.yangyang.host.
101 PTR www.yangyang.host.
2 PTR @
最后的可以解析192.168.218.2来查看@代表的意思
dig -x IP @DNS主机IP 实现反向解析
或者
dig -t ptr 101.218.168.192.in-addr.arpa. @服务器IP 也可以
dig -t axfr 抓取DNS数据库 域名 @DNS服务器IP
三.主从DNS服务器
1.主服务器的配置同上,只不过需要再多加一句话:
vim /etc/named.conf
allow-transfer { 从服务器的IP;};
这句话的作用是不允许随便的服务器当DNS的从服务器,因为从服务器可以拉取主服务器的解析库,不安全
2.从服务器的配置
zone "yangyang.host" {
type slave; //声明这是从服务器
masters {主服务器IP;};
file "slaves/magedu.com.zone"; //需要声明相对路径,slaves/在 /var/named/目录下
};
3.从服务器的配置同上 ,只不过需要在配置文件中多加一句
vim /etc/named.conf
allow-transfer { none;}; 这是声明自己是最后的从服务器了,在:主->从->从->从 结构体系中处于最下端,保护解析数据库安全,放在有人抓取从数据库。
四.远程更新数据库
之前提到allow-update { none; };语句的作用,这里来谈
它是用于远程更新数据库的
指定的zone语句块中:
allow-update {any;}; //为了安全这里需要指定IP,这里是实验,所以是any,意思是任何人都可以远程修改数据库。
-
修改 /var/named权限,使它可写
chmod 770 /var/named -
如果开了SE Linux设置这一项:
setsebool -P named_write_master_zones on -
nsupdate 这个命令来进行交互写入
• >server DNS服务器IP
• >zone 修改的zone域 例如:zone yangyang.host
• >update add ftp. yangyang.host 88888 IN A 8.8.8.8
• >send
• >update delete www. yangyang.host A 删除记录
• >send -
测试:dig ftp. yangyang.host @服务器IP
ll /var/named/ yangyang.host.zone.jnl
cat /var/named/ yangyang.host.zone
五.DNS委派
子域实现普通DNS一样,只不过父域需要在解析数据库声明子域DNS和它的IP,这样就实现了DNS委派
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
举个例子:
$TTL 86400
. IN SOA dns1 admin (
4 ; serial
86400 ; refresh
3600 ; retry
604800 ; expire
10800 ; minimum
)
NS dns1
host NS dns2
dns1 A 192.168.218.100
dns2 A 192.168.218.102
其中,父域"."DNS为dns1,子域"host"为dns2
不过有一点需要注意:
修改配置文件
vim /etc/named.conf
设置
dnssec-enable no;
dnssec-validation no;
六.DNS转发
DNS转发分为两种:
1.全局转发:
对非本机所负责解析区域的请求,全转发给指定的服务器
修改配置文件
vim /etc/named.conf
在Options括号里添加两句话
Options {
forward first|only;
forwarders { ip;};
};
例如:
forward first;
forwarders {192.168.27.103;}; //这里声明转发到哪个DNS服务器,例如:192.168.27.103**
2.特定区域转发
仅转发对特定的区域的请求,比全局转发优先级高
修改配置文件
vim /etc/named.rfc1912.zones
在zone区域括号里添加两句话
zone "yangyang.host" {
type forward;
forward first;
forwarders {192.168.218.103;};
};
这里说明一下first 与only的区别:
forward first|only
- first 先转发到forwarders设定的DNS服务器,如果实在找不到这台服务器,比如它down机了,就转发到互联网上去找根DNS
- only 转发到forwarders设定的DNS服务器,如果找不到这台服务器,那就到此为止了,不再去寻找根服务器**
- recursion 设为 no 是取消递归,不再转发互联网去查找DNS
注意:关闭dnssec功能:
dnssec-enable no;
dnssec-validation no;
七.智能DNS
BIND 通过view来实现智能DNS:
- 一个bind服务器可定义多个view,每个view中可定义一个 或多个zone
- 每个view用来匹配一组客户端
- 多个view内可能需要对同一个区域进行解析,但使用不同 的区域解析库文件
- 注意:
- (1) 一旦启用了view,所有的zone都只能定义在view中
- (2) 仅在允许递归请求的客户端所在view中定义根区域
- (3) 客户端请求到达时,是自上而下检查每个view所服务 的客户端列表
- 格式:
view VIEW_NAME {
match-clients { testacl; };
zone “magedu.com” {
type master;
file “magedu.com.zone”;
};
include “/etc/named.rfc1912.zones”;
};
其中testacl是一种提前定义
是BIND中基础的安全相关的配置:
- acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
格式:
acl acl_name {
ip;
net/prelen; ......
};
示例:
acl mynet {
172.16.0.0/16;
10.10.10.10;
};
bind有四个内置的acl:
- none: 没有一个主机
- any: 任意主机
- localhost: 本机
- localnet: 本机的IP同掩码运算后得到的网络地址
注意:只能先定义,后使用;因此一般定义在配置文件中,处于options的前面,而且约束范围小的要比约束范围大的排在前。
举个例子:
acl beijingnet {192.168.218.0/24; };
acl shanghainet {172.18.0.0/16;10.0.0.0/8;};
acl othernet {any;};
具体实现:
vim /etc/named.conf
acl beijingnet {192.168.27.0/24; };
acl shanghainet {172.18.0.0/16;10.0.0.0/8;};
acl othernet {any;};
view beijingview {
match-clients {beijingnet;};
zone "yangyang.host" {
type master;
file "yangyang.host.zone1";
};
include "/etc/named.rfc1912.zones";
};
view shanghaiview{
match-clients {shanghainet;};
zone "yangyang.host" {
type master;
file "yangyang.host.zone2";
};
include "/etc/named.rfc1912.zones";
};
view otherview {
match-clients {othernet;};
zone "yangyang.host" {
type master;
file "yangyang.host.zone1";
};
include "/etc/named.rfc1912.zones";
};
include "/etc/named.root.key";
然后再在具体的yangyang.host.zone1文件里来定义具体的解析数据库。
八.源码编译BIND
-
下载bind: isc.org:
bind-9.10
bind-9.11
bind-10 -
编译安装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/ --without-openssl --disable-ipv6 – disable-chroot --enable-threads
- make
- make install
-
环境变量:
- vim /etc/profile.d/named.sh
export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin/:$PATH
- vim /etc/profile.d/named.sh
-
库和头文件
- vim /etc/ld.so.conf.d/named.conf
/usr/local/bind9/lib - ldconfig –v
- ls -sv /usr/local/bind9/include /usr/include/named
- vim /etc/ld.so.conf.d/named.conf
-
man帮助
- vim /etc/man.config | /etc/man_db.conf
MANPATH /usr/local/bind9/share/man - man named.conf
- vim /etc/man.config | /etc/man_db.conf
-
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;};
};
- 区域数据库
• 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
- 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.
-
设置权限
• chmod 640 /var/named/*
• chmod 640 /etc/named/named.conf
• chgrp -R named /var/named/
• chgrp named /etc/named/named.conf -
启动服务和测试
• man named
• named -u named -f -g -d 3 前端级别3方式运行
• named -u named 后台运行
• killall named
• ss -tuln
• tail /var/log/message
• named -u named -
支持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
九.压力测试
- /root/bind-xxx/contrib/scripts
- 编译压力测试工具
• cd /root/bind-xxx/contrib/queryperf
• ./configure
• make
• cp queryperf /usr/local/bind9/bin
• queryperf -h - 压力测试
• vim test.txt
www.yangyang.host A
yangyang.host NS
yangyang.host MX
pop3.yangyang.host A
web.yangyang.host A
• queryperf -d test.txt -s 127.0.0.1 打开日志功能
• rndc querylog
• rndc status
• queryperf -d test.txt -s 127.0.0.1 • wc -l /var/log/message
十.DNS排错
#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记录