背景:了解基本DNS原理,手动搭建DNS服务器。


dns思维.png

一、DNS基础介绍

1. 背景

​ DNS ( Domain Name Service) 作为一个非常让人耳熟能详的概念,可以把复杂难记的IP地址转化成为一个容易被记住域名供人们去调用,这样人们只需要记住每一个网站的域名而不需要记住非常复杂的IP地址。

1.2 FQDN

​ FQDN(Fully Qualified Domain Name) 完全合格域名/全程域名,即域名可以通过DNS进行解析,其公式 FQDN = HostName + Domain。

​ 这门技术解决了一个多个主机的问题,一个网站或者服务器集群一般都是有多个主机一起协作的,比如说包括正向代理服务器、反向代理服务器、Web服务器、Email服务器、OA服务器、FTP服务器等等,这个时候就涉及是不是需不需要为每一个主机申请一个域名。 有了这个技术之后每一个主机都可以自己申请一个 Hostname 来区别于其他的主机,这个时候就只需要一个域名就可以做到管理所有的主机。

​ 比如我申请了一个域名: doheras.com

​ 现在我有两个服务器需要用到这个域名,一个 FTP服务器,一个Web服务器,这两个服务器都需要用到 doheras.com这个域名,根据公式,我们知道可以采用 hostname 的方式来访问不同的主机:

​ Web 服务器: web.doheras.com

​ FTP 服务器: ftp.doheras.com

​ 因此, FQDN 服务可以简化在服务和应用中的配置流程,提高配置文件的可维护性。

​ 在配置DNS的过程中,因为服务端的工作在UDP协议端口53上,DNS需要FQDN提供正向解析 (FQDN --> IP)以及反向解析 (IP --> FQDN) 的服务。

1.3 DNS 域

1.3.1 域名结构

dns域名结构.png

(1)根域

​ 根(root)域就是“.”它是由Inetnet名字注册授权机构管理,该机构把域名空间各部分的管理责任分配连接到Internet的各个组织 。

(2)顶级域

​ 又称一级域,其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

顶级域 示例
国家顶级域名 中国:cn, 美国:us,英国uk…
通用顶级域名 com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织…
反向域名 arpa,用于PTR查询(IP地址转换为域名)

(3)二级域

​ 二级域注册到个人、组织或公司的名称。这些名称基于相应的顶级域,二级域下可以包括主机和子域。

(4)子域

​ 子域:已注册的二级域名派生的域名,一般就是网站名,例如www.test.com

(5)主机域

​ 主机名在域名空间结构的最底层,主机名和前面讲的域名结合构成FQDN(完全合格的域名),主机名是FQDN的最左端。

1.3.2 域名服务器

​ 域名是分层结构,域名服务器也是对应的层级结构。有了域名结构,还需要遍及全世界的域名服务器去解析域名,域名服务器实际上就是装有域名系统的主机。

分类 作用
根域名服务器 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助,从根域名服务器进行域名解析。
顶级域名服务器 负责管理在该顶级域名服务器下注册的二级域名。
权限域名服务器 负责一个区的域名解析工作。
本地域名服务器 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器。

注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区,我们需要注意的是:

  • 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器。

  • 每一级域名服务器都知道下级域名服务器的IP地址。

  • 为了容灾, 每一级至少设置两个或以上的域名服务器。

1.3.3 域名规则

  • 域名是大小写无关的。
  • 各组成部分的名字最多有63个字符长,整个路径不超过255个字符。
  • 没有规则限制同时在两个或多个顶级域名下的注册(例如:sony.comsony.nl)。
  • 每个域自己控制它下面的域(子域)的划分(例如:日本的 ac.jpco.jp 分别对应于 edu 和 com,而荷兰却不这样区分,它把所有的都放在nl之下)。
  • 要创建一个新的域,创建者必须得到该新域的上级域的许可,一旦创建成功,该新域就可创建子域,无需征得上级域的同意。
  • 域名遵循的是组织的边界而不是物理网络的边界。

二、DNS解析

2.1 DNS解析顺序

解析顺序.png

2.2 递归查询和迭代查询

(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

​ 通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
​ 迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。

三、bind9

3.1 基本环境与安装

环境:

软件版本:

  • CentOS 7

  • Bind 9

使用yum安装BIND9

1
2
3
4
5
6
yum install -y bind
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
bind x86_64 32:9.11.4-26.P2.el7_9.5 updates 2.3 M

3.2 bind9 基础

3.2.1 bind9 主配置文件

​ 默认位置为 /etc/named.conf,主配置文件格式如下所示:

1
2
3
4
5
6
7
8
9
10
options{
//全局选项
}
zone "zone name" {
//定于区域
}
logging{
//日志文件
}
include:加载别的文件

主配置文件详解如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# named.conf主配置文件参数详解

//全局配置段
options {
listen-on port 53 { 192.168.10.222; }; #设置通信的网段,这里建议使用本机IP,并非127.0.0.1
listen-on-v6 port 53 { ::1; }; #监听bind端口
directory "/var/named"; #指定区域文件存放路径
dump-file "/var/named/data/cache_dump.db"; #设置当执行rndc dumpdb命令后导出文件存放路径
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt"; #服务器输出的内存使用统计文件名
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #允许查询来源(这里建议修改为IP地址,localhost代表只允许本机查询) any代表所有网段
allow-transfer { none; } #允许查询的网段
recursion yes; #是否开启递归查询
dnssec-enable yes; #是否支持DNSSEC开关
dnssec-validation yes; #是否开启dnssec确认开关
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};


//日志配置段
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
#本段参数解释,将日志写入工作目录下的named.run文件。注意:如果服务器用-f参数启动,则named.run会被stderr所代替,severity 按照服务器当前Debug级别记录日志
#bind日志可以写到很多地方,具体写入方式可以参考https://blog.csdn.net/zhu_tianwei/article/details/45103455
};

//区域配置段
zone "." IN { #.代表根域
type hint; #代表根服务器,除hint还有master 代表主域名服务器,slave代表辅助域名服务器,forward 代表转发服务器
file "named.ca"; #域信息源数据库信息文件名
};

include "/etc/named.rfc1912.zones"; #区域管理文件(包含资源记录、宏定义和注释)
#通常定义在/var/named目录下且以.zone结尾
include "/etc/named.root.key";

3.2.2 bind9 常用基本命令

1
2
3
4
5
6
7
8
#检查配置文件
named-checkconf

#启动bind9
systemctl start named

#检查bind9服务状态
systemctl status named

3.2.3 bind9 区域配置文件

​ 区域配置文件默认为 /etc/named.rfc1912.zones ,也可以放置在自定义的文件中,在/etc/named.conf里include进来。格式如下所示:

1
2
3
4
5
6
7
8
9
zone "." IN {
type master|slave|hint; //自定义区域类型
file path/to/zonefile; //绝对或相对路径
allow-update { ip | acl }; //是否允许动态更新
};

master:表示定义的是主域名服务器
slave :表示定义的是辅助域名服务器
hint:表示是互联网中根域名服务器

**allow-update acl分为以下五种

  • any:任何主机
  • none:没有主机
  • localhost:本机
  • localnet:本地子网所有IP
  • 自定义acl

    其中自定义acl可以分为两种,一种是简单acl 一种是复杂acl(可嵌套简单acl),示例如下:

简单acl

1
2
3
acl "someips" {                               //定义一个名为someips的ACL  
10.0.0.1; 192.168.23.1; 192.168.23.15; //包含3个单个IP
};

复杂acl

1
2
3
4
5
6
7
acl "complex" {             //定义一个名为complex的ACL  
"someips"; //可以嵌套包含其他ACL
10.0.15.0/24; //包含10.0.15.0子网中的所有IP
!10.0.16.1/24; //非10.0.16.1子网的IP
{10.0.17.1;10.0.18.2;}; //包含了一个IP组
localhost; //本地网络接口IP(含实际接口IP和127.0.0.1)
};

acl使用示例:

1
2
3
allow-update { "someips"; };
allow-transfer { "complex"; };
...

这里自定义了一个host.com的主机域,区域的配置范例如下:

1
2
3
4
5
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.10.222;192.168.10.223; };
};

3.2.4 区域数据库文件

  • 区域数据库文件有且仅有资源记录、宏定义和注释。

  • 通常定义在/var/named目录下且以.zone结尾,属主root,属组named,权限640。

3.2.4.1 资源记录(Resource Records)
  • 每个域,无论是单主机域还是顶级域,都可以有一组跟它相关联的资源记录
  • 当一个解析器把域名传递给DNS时,DNS所返回的是与该域名相关联的资源记录
  • DNS的主要功能就是将域名映射到资源记录上

资源记录格式:

1
name [ttl(缓存时间)] IN 资源记录类型(RRtype)  Value

一个资源记录包括5个部分:

资源记录 描述
域名 Domain Name
生存周期 Time to Live
类别 Class
类型 Type
Value

①域名:指出这条记录适用于哪个域

通常,每个域有多条记录,而数据库则保存了多个域的信息
域名字段是匹配查询条件的主要关键字
记录在数据库中的顺序是无关紧要的

②生存时间:指示该条记录的稳定程度

极稳定的信息会被分配一个很大的值,如 86400 (一天时间的秒数)
非常不稳定的信息会被分配一个很小的值,如60(1分钟)

③类别:对于互联网信息,它总是 IN

④类型:指出了这是什么类型的记录

资源记录类型 描述
SOA 授权资源记录 SOA 的开始启动每个区域文件,并指示名称服务器是特定区域的最佳信息来源。SOA 记录表明名称服务器对区域具有权威性。每个区域必须恰好有一个 SOA 记录。与其他资源记录不同,只有在创建新的主区域文件时才创建 SOA 记录。
A 地址记录或 A 记录列出给定主机名的 IP 地址。name 字段是主机名,address 是网络接口地址。机器的每个 IP 地址应该有一个 A 记录。
AAAA IPv6 地址记录或 AAAA 记录列出给定主机名的 128 位 IPv6 地址。
CNAME 规范名称资源记录 CNAME 指定官方或规范主机名的别名或昵称。该记录必须是唯一与别名相关联的记录。为给定地址提供一条 A 记录并使用 CNAME 记录为该地址定义别名主机名通常更容易。
DNAME 反向名称委托资源记录 DNAME 指定 IPv6 地址的反向查找。这些记录将一个域名的后缀替换为另一个。DNAME 记录指示 DNS(BIG-IP ® DNS,以前称为 GTM)(或任何 DNS 服务器)构建一个别名,用存储在 DNAME 记录中的数据替换请求的 IP 地址的一部分。
HINFO 主机信息资源记录 HINFO 包含与 BIG-IP DNS(以前称为 GTM)(或其他 DNS)相关的硬件和操作系统信息。
MX 邮件交换资源记录 MX 定义了给定域的邮件系统。
NAPTR 名称权限指针记录 NAPTR 有助于统一资源名称 (URN) 的标准化。NAPTR 记录在一组 URN、URL 和普通域名之间映射,并向客户端建议可用于与映射资源通信的协议。
NS 名称服务器资源记录 NS 定义给定域的名称服务器,创建一个委托点和一个子区域。第一个名称字段指定由名称服务器名称字段中指定的名称服务器提供服务的区域。每个区域至少需要一个名称服务器。
PTR 名称指针资源记录 PTR 将主机名与给定的 IP 地址相关联。这些记录用于反向名称查找。
SRV 服务资源记录 SRV 是一个指针,通过它可以将给定服务的别名重定向到另一个域。例如,如果虚构公司 Site Request 有一个托管在 archive.siterequest.com 上的 FTP 存档,IT 部门可以创建 SRV 记录,通过该记录将别名 ftp.siterequest.com 重定向到 archive.siterequest.com
TXT 文本资源记录 TXT 允许您提供任何信息字符串,例如服务器的位置或您希望提供的任何其他相关信息。

常用资源记录:

(1) SOA记录

SOA: 起始授权,只能有一条

  • name:只能是区域名称,通常可以简写为@,例如:od.com.
  • value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略

注意:SOA必须是区域数据库文件第一条记录

1
2
3
4
5
6
7
@ 600 IN SOA  dns.host.com. 管理员邮箱(dnsadmin.host.com.)(
序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期时间戳,例如2018121601
刷新时间(refresh time) ;即每隔多久到主服务器检查一次
重试时间(retry time) ;应该小于refresh time
过期时间(expire time) ;当辅助DNS服务器无法联系上主DNS服务器时,辅助DNS服务器可以在多长时间内认为其缓存是有效的,并供用户查询。
netgative answer ttl ;非权威应答的ttl,缓存DNS服务器可以缓存记录多长时间

(2) NS记录

NS:可以有多条,每一个NS记录,必须对应一个A记录

  • name:区域名称,通常可以简写为@
  • value:DNS服务器的FQDN(可以使用相对名称)
1
@ 600 IN NS ns1

(3) A记录

A:只能定义在正向区域数据库文件中(ipv4->FQDN)

  • name:FQDN(可以使用相对名称)
  • value:IP
1
2
www  600(单位s) IN A 10.4.7.11
www 600(单位s) IN A 10.4.7.12

注 : 可以做轮询

(4) MX记录

MX:邮件交换记录,可以有多个(用的不多)

  • name:区域名称,用于标识smtp服务器
  • value:包含优先级和FQDN
  • 优先级:0-99,数字越小,级别越高,
1
2
@ 600 IN MX 10 mail
@ 600 IN MX 20 smtp

(5) CNAME记录

CNAME:canonical name,别名(FQDN->FQDN)

  • name :FQDN
  • value : FQDN
1
eshop IN CNAME www

⑤值:类型所对应的值,它可以是个数字,也可以是一个ASCII的字符串

3.2.4.2 宏定义(以$开头的部分)

示例:

1
2
$ TTL 60
$ ORIGIN .
3.2.4.3 注释(以 ; 开头的部分)

示例:

1
2
; 1 minute
; serial

3.3 正解域

3.3.1 配置正解域

(1)在/etc/named.rfc1912.zones文件内最下,添加以下内容:

1
2
3
4
5
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.10.222;192.168.10.223; };
};

(2)在/var/named下创建host.com.zone文件,写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 600	; 10 minutes
@ IN SOA dns.host.com. test.qq.com. (
2021070701 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.host.com.
$ORIGIN host.com.
$TTL 60 ; 1 minute
dns1 A 192.168.10.222
dns A 192.168.10.223

三种配置方式:

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

修改option选项以下两个字段:

  • listen-on port 53 { 192.168.10.222; }; # 默认为 127.0.0.1 ;
  • allow-query { any; }; # 默认为localhost
1
2
3
4
options {
listen-on port 53 { 192.168.10.222; };
allow-query { any; };
};

(4)检查配置文件是否生效

1
2
3
4
5
6
7
8
9
10
#检查自定义区域配置
named-checkzone host.com. /etc/named/host.com.zone
zone host.com/IN: loaded serial 2021070701
OK

#检查主配置文件
named-checkconf

#重启named进程
systemctl restart named

(5)验证解析结果

在另一台设备配置dns地址为192.168.10.222,验证是否按照规定配置进行解析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@dns2 ~]# nslookup
> server
Default server: 192.168.10.222
Address: 192.168.10.222#53
> dns1.host.com
Server: 192.168.10.222
Address: 192.168.10.222#53

Name: dns1.host.com
Address: 192.168.10.222
> dns.host.com
Server: 192.168.10.222
Address: 192.168.10.222#53

Name: dns.host.com
Address: 192.168.10.223

3.3.2 管理正解域

3.3.2.1 增加资源记录

在 /var/named/host.com.zone 下新增一条A记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@dns1 ~]# cat /var/named/host.com.zone
$TTL 600 ;10 minutes
@ IN SOA dns.host.com. test.qq.com. (
2021070701 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.host.com.
$ORIGIN host.com.
$TTL 60 ; 1 minute
dns1 A 192.168.10.222
dns A 192.168.10.223
test A 192.168.10.55

测试:

1
2
3
4
5
6
7
8
9
10
[root@dns2 ~]# nslookup
> server
Default server: 192.168.10.222
Address: 192.168.10.222#53
> test.host.com
Server: 192.168.10.222
Address: 192.168.10.222#53

Name: test.host.com
Address: 192.168.10.55

删除、修改、查询 此处省略,直接修改区域数据库文件并重启named进程即可。

3.4 反解域

3.4.1 配置反解域

(1)在 /etc/named.rfc1912.zones文件内最下,添加以下内容:

1
2
3
4
5
zone "10.168.192.in-addr.arpa" IN {
type master;
file "10.168.192.in-addr.arpa.zone";
allow-update { 192.168.10.222;192.168.10.223; };
};

(2)在/var/named下创建host.com.zone文件,写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@node1 ~]# vi /var/named/10.168.192.in-addr.arpa.zone 
$TTL 600 ;10min
@ IN SOA dns.host.com 17614902580@163.com (
2021071101 ;serial number
10600 ;refresh 3 hours
900 ;retry 15 minites
604800 ;expire 1 week
86400 ;minimum 1 day
)
ns dns.host.com.
$ORIGIN 10.168.192.in-addr.arpa.
$TTL 60
222 PTR dns1.host.com.
223 PTR dns2.host.com.

(3)检查配置文件是否生效

1
2
3
4
5
6
7
8
9
10
11
12
#检查自定义区域配置
[root@node1 ~]# named-checkzone 10.168.192.in-addr.arpa.zone /var/named/10.168.192.in-addr.arpa.zone
/var/named/10.168.192.in-addr.arpa.zone:12: ignoring out-of-zone data (222.10.168.192.in-addr.arpa)
/var/named/10.168.192.in-addr.arpa.zone:13: ignoring out-of-zone data (223.10.168.192.in-addr.arpa)
zone 10.168.192.in-addr.arpa.zone/IN: loaded serial 2021071101
OK

#检查主配置文件,无输出即正常。
named-checkconf

#重启named进程
systemctl restart named

(4)验证解析结果

在另一台设备配置验证是否按照规定配置进行解析。以下三种方式都可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第一种:
root@node1 ~]# dig -x 192.168.10.222 @192.168.10.222 +short
dns1.host.com.
[root@node1 ~]# dig -x 192.168.10.223 @192.168.10.222 +short
dns2.host.com.

第二种:
[root@node1 ~]# dig -t PTR 222.10.168.192.in-addr.arpa. @192.168.10.222 +short
dns1.host.com.
[root@node1 ~]# dig -t PTR 223.10.168.192.in-addr.arpa. @192.168.10.222 +short
dns2.host.com.

第三种:
[root@node1 ~]# nslookup -qt=ptr 192.168.10.222
*** Invalid option: qt=ptr
222.10.168.192.in-addr.arpa name = dns1.host.com.

3.4.2 管理反解域

3.4.2.1 增加资源记录

在 10.168.192.in-addr.arpa.zone下新增一条PTR记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node1 ~]# cat /var/named/10.168.192.in-addr.arpa.zone 
$TTL 600 ;10min
@ IN SOA dns.host.com 17614902580@163.com (
2021071101 ;serial number
10600 ;refresh 3 hours
900 ;retry 15 minites
604800 ;expire 1 week
86400 ;minimum 1 day
)
ns dns.host.com.
$ORIGIN 10.168.192.in-addr.arpa.
$TTL 60
222 PTR dns1.host.com.
223 PTR dns2.host.com.
224 PTR dns3.host.com.
[root@node1 ~]# systemctl restart named

测试:

1
2
3
4
[root@node1 ~]# dig -t PTR 224.10.168.192.in-addr.arpa. @192.168.10.222 +short 
dns3.host.com.
[root@node1 ~]# dig -x 192.168.10.224 @192.168.10.222 +short
dns3.host.com.

删除、修改、查询 此处省略,直接修改区域数据库文件并重启named进程即可。

3.5 DNS 常用工具

安装DNS常用工具:

1
yum install bind-utils -y

3.5.1 nslookup

nslookup是一个查询Internet域名服务器的程序。Nslookup有两种模式:交互式和非交互式。

(1)交互模式

交互模式允许用户查询名称服务器以获取有关各种主机和服务器的信息域或打印域中的主机列表。
命令基本格式:直接使用nslookup命令 且不带任何参数,即进入nslookup的交互式查询界面。
可以使用的命令如下:

  • Name:显示域名为NAME的域的相关信息。

  • Sever NAME:设置查询默认服务器为NAME所指定的服务器。

  • Exit:退出nslookup。

Set option :设置nslookup的选项,选项如下:

  • Domain=name :设置默认域名为name。

  • Root = name :设置根服务器的NAME。

  • Retry = X :设置重试次数为X。

  • Timeout = X :设置超时时间为X。

  • Type = X :设置查询类型。

  • Querytype = X :与type命令-样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@node1 ~]# nslookup -qt=CNAME www.163.com
*** Invalid option: qt=CNAME
Server: 114.114.114.114
Address: 114.114.114.114#53

Non-authoritative answer:
www.163.com canonical name = www.163.com.163jiasu.com.
www.163.com.163jiasu.com canonical name = www.163.com.bsgslb.cn.
www.163.com.bsgslb.cn canonical name = z163ipv6.v.bsgslb.cn.
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.173
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.176
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.171
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.162
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.169
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.166
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.175
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.164
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.170
Name: z163ipv6.v.bsgslb.cn
Address: 124.205.198.174

其中,type可以是以下这些类型:

类型 描述
A IPv4地址记录(直接查询默认类型)
AAAA IPv6地址记录
AFSDB Andrew文件系统数据库服务器记录
ATMA ATM地址记录
CNAME 别名记录
HINFO 硬件配置记录,包括CPU、操作系统信息
ISDN 域名对应的ISDN号码
MB 存放指定邮箱的服务器
MG 邮件组记录
MINFO 邮件组和邮箱的信息记录
MR 改名的邮箱记录
MX 邮件服务器记录
NS 名字服务器记录
PTR 反向记录
RP 负责人记录
RT 路由穿透记录
SRV TCP服务器信息记录
TXT 域名对应的文本信息
X25 域名对应的X.25地址记录

(2)非交互模式

非交互模式仅用于打印名称和请求的主机或域的信息。

命令格式:nslookup [ - option] [{ name | [-server]}]

  • option 参数,具体如下:

    ​ -timeout=X:指明系统查询的超时时间,如’-timeout = 10’表示超时时间是10秒

    ​ -retry = X :指明系统查询失败时重试的次数。

    ​ -querytype = X :指明查询的资源记录类型,X可以是A、PTR、 MX、NS等。

  • Name :要查询的目标夫域名或IP地址。

  • server :使用指定的DNS服务器解析,而非默认的DNS服务器

1
2
3
4
5
6
7
8
9
10
[root@node1 ~]# nslookup www.baidu.com
Server: 114.114.114.114
Address: 114.114.114.114#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 182.61.200.6
Name: www.a.shifen.com
Address: 182.61.200.7

(3)返回信息说明

  • 服务器:本机DNS服务器信息。

  • 非权威应答:Non-authoritative answer,除非实际存储DNS Server中获得域名解析回答的,都称为非权威应答。也就是从缓存中获取域名解析结果。

  • address:目标域名对应物理IP可有多个。

  • aliase:目标域名。

3.5.2 host

host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。

语法格式 : host (选项) (参数)

选项 描述
-a 显示详细的DNS信息;
-c 指定查询类型,默认值为“IN“;
-C 查询指定主机的完整的SOA记录;
-r 在查询域名时,不使用递归的查询方式;
-t 指定查询的域名信息类型;
-v 显示指令执行的详细信息;
-w 如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
-W 指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4 使用IPv4;
-6 使用IPv6;

3.5.3 dig

Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#语法格式:
dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
[ host [@local-server] {local-d-opt} [...]]

Where: domain is in the Domain Name System
q-class is one of (in,hs,ch,...) [default: in]
q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
(Use ixfr=version for type ixfr)
q-opt is one of:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
-b address[#port] (bind to source address/port)
-c class (specify query class)
-f filename (batch mode)
-i (use IP6.INT for IPv6 reverse lookups)
-k keyfile (specify tsig key file)
-m (enable memory usage debugging)
-p port (specify port number)
-q name (specify query name)
-t type (specify query type)
-u (display times in usec instead of msec)
-x dot-notation (shortcut for reverse lookups)
-y [hmac:]name:key (specify named base64 tsig key)
d-opt is of the form +keyword[=value], where keyword is:
+[no]aaflag (Set AA flag in query (+[no]aaflag))
+[no]aaonly (Set AA flag in query (+[no]aaflag))
+[no]additional (Control display of additional section)
+[no]adflag (Set AD flag in query (default on))
+[no]all (Set or clear all display flags)
+[no]answer (Control display of answer section)
+[no]authority (Control display of authority section)
+[no]badcookie (Retry BADCOOKIE responses)
+[no]besteffort (Try to parse even illegal messages)
+bufsize=### (Set EDNS0 Max UDP packet size)
+[no]cdflag (Set checking disabled flag in query)
+[no]class (Control display of class in records)
+[no]cmd (Control display of command line)
+[no]comments (Control display of comment lines)
+[no]cookie (Add a COOKIE option to the request)
+[no]crypto (Control display of cryptographic fields in records)
+[no]defname (Use search list (+[no]search))
+[no]dnssec (Request DNSSEC records)
+domain=### (Set default domainname)
+[no]dscp[=###] (Set the DSCP value to ### [0..63])
+[no]edns[=###] (Set EDNS version) [0]
+ednsflags=### (Set EDNS flag bits)
+[no]ednsnegotiation (Set EDNS version negotiation)
+ednsopt=###[:value] (Send specified EDNS option)
+noednsopt (Clear list of +ednsopt options)
+[no]expire (Request time to expire)
+[no]fail (Don't try next server on SERVFAIL)
+[no]header-only (Send query without a question section)
+[no]identify (ID responders in short answers)
+[no]idnin (Parse IDN names)
+[no]idnout (Convert IDN response)
+[no]ignore (Don't revert to TCP for TC responses.)
+[no]keepopen (Keep the TCP socket open between queries)
+[no]mapped (Allow mapped IPv4 over IPv6)
+[no]multiline (Print records in an expanded format)
+ndots=### (Set search NDOTS value)
+[no]nsid (Request Name Server ID)
+[no]nssearch (Search all authoritative nameservers)
+[no]onesoa (AXFR prints only one soa record)
+[no]opcode=### (Set the opcode of the request)
+[no]qr (Print question before sending)
+[no]question (Control display of question section)
+[no]rdflag (Recursive mode (+[no]recurse))
+[no]recurse (Recursive mode (+[no]rdflag))
+retry=### (Set number of UDP retries) [2]
+[no]rrcomments (Control display of per-record comments)
+[no]search (Set whether to use searchlist)
+[no]short (Display nothing except short
form of answer)
+[no]showsearch (Search with intermediate results)
+[no]sigchase (Chase DNSSEC signatures)
+[no]split=## (Split hex/base64 fields into chunks)
+[no]stats (Control display of statistics)
+subnet=addr (Set edns-client-subnet option)
+[no]tcp (TCP mode (+[no]vc))
+timeout=### (Set query timeout) [5]
+[no]topdown (Do +sigchase in top-down mode)
+[no]trace (Trace delegation down from root [+dnssec])
+trusted-key=#### (Trusted Key to use with +sigchase)
+tries=### (Set number of UDP attempts) [3]
+[no]ttlid (Control display of ttls in records)
+[no]ttlunits (Display TTLs in human-readable units)
+[no]unknownformat (Print RDATA in RFC 3597 "unknown" format)
+[no]vc (TCP mode (+[no]tcp))
+[no]zflag (Set Z flag in query)
global d-opts and servers (before host name) affect all queries.
local d-opts and servers (after host name) affect only that lookup.
-h (print help and exit)
-v (print version and exit)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node1 ~]# dig -t a dns.host.com @192.168.10.222 +short 
192.168.10.223
[root@node1 ~]# dig -t a dns.host.com @192.168.10.222

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> -t a dns.host.com @192.168.10.222
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2013
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
dns.host.com. 60 IN A 192.168.10.223

;; AUTHORITY SECTION:
host.com. 600 IN NS dns.host.com.

;; Query time: 0 msec
;; SERVER: 192.168.10.222#53(192.168.10.222)
;; WHEN: Tue Jul 13 10:53:19 CST 2021
;; MSG SIZE rcvd: 71

3.5.4 nsupdate

​ nsupdate是一个动态DNS更新工具,可以向DNS服务器提交更新记录的请求,它可以从区文件中添加或删除资源记录,而不需要手动进行编辑区文件。

​ 使用nsupdate 不会更改区域数据库文件,而是产生了一个jnl的数据文件,不能使用文本编辑器打开,只能使用完全区域数据传送查看。

注:jnl文件(journal文件)是BIND9动态更新的时候记录更新内容所生成的日志文件。

  • 优点
    • 命令简单,便于记忆
    • 不用手动变更SOA的serial序列号,自动滚动
    • 不需要重启/重载BIND9服务/配置,生效快
    • 可以通过配置acl实现远程管理
  • 缺点
    • jnl文件无法使用文本文件的方式打开
    • 只能依赖完全区域传送查看所有区域的记录
    • 更新操作复杂,先删再增
    • 远程管理有安全隐患,需要加强审计
    • 动态域在rndc管理上多一步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#发送请求到servername服务器的port端口.如果不指定servername,nsupdate将把请求发送给当前去的主DNS服务器.
server servername [ port ]

# 添加一条资源记录
update add domain-name ttl [ class ] type data…

# 删除domain-name的资源记录.如果指定了type和data,仅删除匹配的记录。
update delete domain-name [ ttl ] [ class ] [ type [ data... ] ]


# 将要求信息和更新请求发送到DNS服务器.等同于输入一个空行
send

# 退出nsupdate工具
quit

示例:在host.com域添加A记录

1
2
3
4
5
6
7
8
9
10
# 前提条件:允许设备动态修改配置,将以下参数修改为any或者指定ip。
allow-update { any; };

添加记录

[root@dns1 ~]# nsupdate
> server 192.168.10.222
> update add aaa.host.com 600 IN A 192.168.10.224
> send
> quit

查看测试结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@dns2 ~]# dig -t AXFR host.com @192.168.10.222

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> -t AXFR host.com @192.168.10.222
;; global options: +cmd
host.com. 600 IN SOA dns.host.com. test.qq.com. 2021070706 10800 900 604800 86400
host.com. 600 IN NS dns.host.com.
aaa.host.com. 600 IN A 192.168.10.224
dns.host.com. 60 IN A 192.168.10.222
dns1.host.com. 60 IN A 192.168.10.222
dns2.host.com. 60 IN A 192.168.10.223
test.host.com. 60 IN A 192.168.10.55
host.com. 600 IN SOA dns.host.com. test.qq.com. 2021070706 10800 900 604800 86400
;; Query time: 0 msec
;; SERVER: 192.168.10.222#53(192.168.10.222)
;; WHEN: Fri Jul 16 10:09:54 CST 2021
;; XFR size: 8 records (messages 1, bytes 234)

3.6 DNS 主辅同步

3.6.1主辅同步配置

环境准备:

软件版本:

  • CentOS 7

  • Bind 9

配置要点:

  • 辅助DNS的Bind版本必须小于主DNS的软件版本。
  • 主DNS named.conf里配置allow-transfer和also-notify选项
  • 辅助DNS主配置文件中option段,masterfile-format text;
  • 辅助DNS的配置文件里 type:slave
  • 启动辅助DNS时,检查完全区域传送:dig -t axfr @ 192.168.10.222
  • 辅助DNS不可修改主DNS配置。
3.6.1.1 配置主DNS

(1)配置主配置文件

​ 添加以下字段:

  • allow-transfer { 192.168.10.223; }; # 允许本区域传输至特定的从DNS服务器。
  • also-notify { 192.168.10.223; }; # 主动通知从域名服务器(辅助DNS)进行更新,在主域名服务器进行更新后,而不需要在等规定的时间后才通知从域名服务器进行更新。
1
2
3
4
5
6
7
8
9
#主要修改以下字段
[root@dns1 ~]# cat /etc/named.conf
options {
listen-on port 53 { 192.168.10.222; };
allow-query { any; };
allow-transfer { 192.168.10.223; };
also-notify { 192.168.10.223; };
};

(2)配置区域数据文件

1
2
3
4
5
6
7
8
9
10
11
12
13
#在末尾添加正解域和反解域
[root@dns1 ~]# vi /etc/named.rfc1912.zones
vi /etc/named.rfc1912.zones
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { none; };
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "10.168.192.in-addr.arpa.zone";
allow-update { none; };
};

(3)配置区域数据库文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@dns1 ~]# cd /var/named/

[root@dns1 named]# cat host.com.zone
$TTL 600 ;10 minutes
@ IN SOA dns.host.com. test.qq.com. (
2021070705 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.host.com.
$ORIGIN host.com.
$TTL 60 ; 1 minute
dns1 A 192.168.10.222
dns2 A 192.168.10.223
test A 192.168.10.55
dns A 192.168.10.222

[root@dns1 named]# cat 10.168.192.in-addr.arpa.zone
$TTL 600 ;10min
@ IN SOA dns.host.com 17614902580@163.com (
2021071101 ;serial number
10600 ;refresh 3 hours
900 ;retry 15 minites
604800 ;expire 1 week
86400 ;minimum 1 day
)
ns dns.host.com.
$ORIGIN 10.168.192.in-addr.arpa.
$TTL 60
222 PTR dns1.host.com.
223 PTR dns2.host.com.
224 PTR dns3.host.com.
3.6.1.2 配置辅助DNS

(1)修改主配置文件 /etc/named.conf,修改以下三个位置:

  • listen-on port 53 { 192.168.10.223; };
  • allow-query { any; };
  • masterfile-format text;
1
2
3
4
5
6
7
8
#主要修改以下字段
[root@dns2 ~]# cat /etc/named.conf
options {
listen-on port 53 { 192.168.10.223; };
allow-query { any; };
masterfile-format text;
};

(2)辅助dns检查主dns完全区域数据传送,解析列表如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@dns2 slaves]#  dig -t AXFR host.com @192.168.10.222

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> -t AXFR host.com @192.168.10.222
;; global options: +cmd
host.com. 600 IN SOA dns.host.com. test.qq.com. 2021070705 10800 900 604800 86400
host.com. 600 IN NS dns.host.com.
dns.host.com. 60 IN A 192.168.10.222
dns1.host.com. 60 IN A 192.168.10.222
dns2.host.com. 60 IN A 192.168.10.223
test.host.com. 60 IN A 192.168.10.55
host.com. 600 IN SOA dns.host.com. test.qq.com. 2021070705 10800 900 604800 86400
;; Query time: 0 msec
;; SERVER: 192.168.10.222#53(192.168.10.222)
;; WHEN: Thu Jul 15 16:13:37 CST 2021
;; XFR size: 7 records (messages 1, bytes 214)

(3)配置辅助dns区域配置文件,添加正解域和反解域。

1
2
3
4
5
6
7
8
9
10
11
12
13
#在末尾主要添加以下字段。
[root@dns2 slaves]# cat /etc/named.rfc1912.zones

zone "host.com" IN {
type slave ;
masters {192.168.10.222 ;} ;
file "slaves/host.com.zone" ;
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters {192.168.10.222 ;} ;
file "slaves/10.168.192.in-addr.arpa.zone";
};

(4)重启主辅DNS服务器

1
[root@dns2 ~]# systemctl restart named

(5)查看是否有区域数据库文件传输到辅助DNS slaves文件夹下

1
2
[root@dns2 ~]# ls /var/named/slaves/
10.168.192.in-addr.arpa.zone host.com.zone

(6)在主DNS测试辅DNS是否可以解析。如果可以解析则说明主辅配同步完成。

1
2
[root@dns1 ~]# dig dns.host.com @192.168.10.223 +short
192.168.10.222

注意:我们只有在/etc/named.rfc1912.zone中添加了需要同步的域名,辅助dns才会进行同步。不添加的域名dns是不会进行同步

3.7 维护静态域和动态域

3.7.1 静态域维护

前提条件:在区域配置文件中 添加 allow-update { none; }; 表示不允许动态更新。

示例:

1
2
3
4
5
6
[root@dns1 ~]# cat /etc/named.rfc1912.zones 
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { none; };
};

每次配置更改区域数据库文件,需要手动前滚serial number,通知辅DNS更新。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@dns1 ~]# cat /var/named/host.com.zone
$TTL 600 ;10 minutes
@ IN SOA dns.host.com. test.qq.com. (
2021070705 ; serial number 需要手动+1
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.host.com.
$ORIGIN host.com.
$TTL 60 ; 1 minute
dns1 A 192.168.10.222
dns2 A 192.168.10.223
test A 192.168.10.55
dns A 192.168.10.222

3.7.2 动态域维护

前提条件:在区域配置文件中 添加 allow-update { acl; }; 表示根据acl指定策略进行动态更新。可填写ip地址。

示例:

1
2
3
4
5
6
[root@dns1 ~]# cat /etc/named.rfc1912.zones 
zone "host.com" IN {
type master;
file "host.com.zone";
allow-update { 192.168.10.222; };
};

每次配置更改区域数据库文件,不需要手动前滚serial number,自动通知辅DNS更新。使用nsupdate等工具进行动态配置。

3.8 rndc 远程管理DNS

​ 一般而言,DNS服务器是繁忙的 ,一台公网DNS会维护成千上万个zone,named服务不会轻易被重启,登陆dns服务器进行维护也会有极大的风险。所以需要对named进行远程管理。

配置rndc工具步骤
(1)生成秘钥配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@dns1 ~]# rndc-confgen -r /dev/urandom
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "jZT2IXIGCfk3+mcWgsAkCw=="; #客户端秘钥
};

options {
default-key "rndc-key"; #秘钥名
default-server 127.0.0.1; #被管理服务器的目标IP地址
default-port 953; #连接dns服务器的目标端口
};
# End of rndc.conf
#--------------上面钥匙文件,存放在管理端/etc/rndc.conf 里

#--------------下面为锁文件,存放在被管理端/etc/named.conf 里
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "jZT2IXIGCfk3+mcWgsAkCw=="; #服务器秘钥
# };
#
# controls {
# inet 127.0.0.1 port 953 #服务器监听的ip和端口
# allow { 127.0.0.1; } keys { "rndc-key"; }; #允许哪些ip连接管理本机
# };
# End of named.conf

(2)将注释部分生成的文件配置,追加存放在被管理端/etc/named.conf中。并修改allow地址为本地或者远程管理dns的地址。

1
2
3
4
5
6
7
8
9
10
[root@dns1 ~]# cat /etc/named.conf
key "rndc-key" {
algorithm hmac-md5;
secret "jZT2IXIGCfk3+mcWgsAkCw==";
};

controls {
inet 192.168.10.222 port 953
allow { 192.168.10.222;192.168.10.218; } keys { "rndc-key"; };
};

(3)配置本地rndc管理dns(可选)

1
2
3
4
5
6
7
8
9
10
11
[root@dns1 ~]# cat /etc/rndc.conf 
key "rndc-key" {
algorithm hmac-md5;
secret "jZT2IXIGCfk3+mcWgsAkCw==";
};

options {
default-key "rndc-key";
default-server 192.168.10.222;
default-port 953;
};

(3)配置远程rndc管理dns

a. 安装rndc工具

1
yum install bind     ##bind包包含rndc工具。

b. 配置远程rndc管理DNS

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# cat /etc/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "jZT2IXIGCfk3+mcWgsAkCw==";
};

options {
default-key "rndc-key";
default-server 192.168.10.222;
default-port 953;
};

(4)测试rndc远程管理

a. 检查rndc远程管理状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# rndc status
version: BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 (Extended Support Version) <id:7107deb>
running on dns1.host.com: Linux x86_64 5.5.7-1.el7.elrepo.x86_64 #1 SMP Fri Feb 28 12:21:58 EST 2020
boot time: Sun, 18 Jul 2021 08:04:22 GMT
last configured: Sun, 18 Jul 2021 08:04:22 GMT
configuration file: /etc/named.conf
CPUs found: 4
worker threads: 4
UDP listeners per interface: 3
number of zones: 106 (97 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/900/1000
tcp clients: 1/150
server is up and running
You have new mail in /var/spool/mail/root

3.8.1 rndc 远程管理静态域

在静态域修改区域数据库文件后,使用以下命令重新加载区域数据库配置。

1
2
3
[root@localhost ~]# rndc reload whbblog.cn
zone reload up-to-date
You have new mail in /var/spool/mail/root

3.8.2 rndc 远程管理动态态域

在动态域修改区域数据库文件后,使用以下命令冻结区域数据库文件配置。

1
2
3
[root@localhost ~]# rndc  freeze host.com
rndc: 'freeze' failed: permission denied
Flushing the zone updates to disk failed.

加载失败 检查权限问题,发现所属主和所属组都是root,应该修改权限为named。

1
2
3
4
5
6
7
[root@dns1 ~]# ll /var/named
total 1084
-rw-r--r-- 1 root root 328 Jul 11 17:53 10.168.192.in-addr.arpa.zone
drwxrwx--- 2 named named 75 Jul 18 03:16 data
drwxrwx--- 2 named named 60 Jul 18 16:04 dynamic
-rw-r--r-- 1 root root 425 Jul 15 15:42 host.com.zone
-rw-r--r-- 1 named named 698 Jul 16 10:02 host.com.zone.jnl

修改配置文件权限

1
2
[root@dns1 ~]# chown named.named /var/named/host.com.zone
[root@dns1 ~]# chmod 660 /var/named/host.com.zone

重新冻结区域数据库文件

1
2
[root@localhost ~]# rndc  freeze host.com
You have new mail in /var/spool/mail/root

重新加载区域配置文件

1
2
3
[root@localhost ~]# rndc thaw host.com  
The zone reload and thaw was successful.
You have new mail in /var/spool/mail/root

3.8.3 rndc 常用命令和选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
选项
-b source-address 绑定rndc客户端使用的源地址,因为一个网卡可有多个地址。
-c config-file 指定连接时使用的配置文件,而不是默认的/etc/rndc.conf。
-s server 指定要连接的服务器的IP地址。
-p port 指定要连接的服务器的端口。
-k key-file 指定连接时使用的密钥文件,而不是默认的/etc/rndc.key。
-y key-id 指定要使用的密钥标识,必须与服务器一致。
-v 输出详细的日志信息。

命令功能
reload #重新加载named.conf和新的域,但不会重新加载已存的域文件。
reload zone_name #重新加载指定区域
[root@server-11 ~]# rndc -s 192.168.10.11 reload base07.com
reconfig #重读配置文件并加载新增的区域
querylog #关闭或开启查询日志, 查询日志会输出到 /var/log/message , 繁忙时,可能会瞬间增大 message

dumpdb #将高速缓存转储到转储文件 (named_dump.db)
freeze #暂停更新所有动态zone
freeze zone [class [view]] #暂停更新一个动态zone
flush [view] #刷新服务器的所有高速缓存
flushname name #为某一视图刷新服务器的高速缓存
stats #将服务器统计信息写入统计文件中 /var/named/data/named_stats.txt
status #显示服务器状态。
stop #将暂挂更新保存到主文件并停止服务器
halt #停止服务器,但不保存暂挂更新
trace #打开debug, debug有级别的概念,每执行一次提升一次级别
trace LEVEL #指定 debug 的级别, trace 0 表示关闭debug
notrace #将调试级别设置为 0
restart #重新启动服务器(尚未实现)
addzone zone [class [view]] { zone-options } #增加一个zone
delzone zone [class [view]] #删除一个zone

3.9 view视图功能

​ view语句定义了视图功能。视图是BIND9提供的强大的新功能,允许DNS服务器根据客户端的不同,有区别地回答DNS查询,每个视图定义了一个被特定客户端子集见到的DNS名称空间。这个功能在一台主机上运行多个形式上独立的DNS服务器时特别有用。

配置在/etc/named.comf语法示例:

1
2
3
4
5
6
7
8
view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
[ zone-statistics yes_or_no ; ]
[ zone_statement; ...]
};

3.9.1 view配置范例

1.按照不同业务环境解析。

背景环境介绍:

业务客户端环境ip:192.168.10.222

测试客户端环境ip:192.168.10.223

当业务客户端访问 www.whbblog.cn 返回a记录192.168.10.2

当测试客户端访问 www.whbblog.cn 返回a记录192.168.10.3

a. 配置/etc/named.conf文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
acl "env-test" {
192.168.10.223;
};
acl "env-prd" {
192.168.10.222;
};

view "env-test" {
match-clients { "env-test"; };
recursion yes;
zone "whbblog.cn" {
type master;
file "env-test.whbblog.cn.zone";
};
};
view "env-prd" {
match-clients { "env-prd"; };
recursion yes;
zone "whbblog.cn" {
type master;
file "env-prd.whbblog.cn.zone";
};
};
view "default" {
match-clients { any; };
recursion yes;
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
};

b. 配置 env-prd.whbblog.cn.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@dns1 named]# cat env-prd.whbblog.cn.zone 
$ORIGIN .
$TTL 600
whbblog.cn IN SOA dns.whbblog.cn test.qq.com (
2021061601 ; serial number
10800 ; refresh 3hours
900 ; retry 15min
604800 ; expire 1week
86400 ; Non authoritative 1day
)
NS ns1.whbblog.cn
NS ns2.whbblog.cn

$ORIGIN whbblog.cn.
$TTL 60
www A 192.168.10.2
ns1 A 192.168.10.222
ns2 A 192.168.10.223

c. 配置 env-test.whbblog.cn.zone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@dns1 named]# cat env-test.whbblog.cn.zone 
$ORIGIN .
$TTL 600
whbblog.cn IN SOA dns.whbblog.cn test.qq.com (
2021061601 ; serial number
10800 ; refresh 3hours
900 ; retry 15min
604800 ; expire 1week
86400 ; Non authoritative 1day
)
NS ns1.whbblog.cn
NS ns2.whbblog.cn

$ORIGIN whbblog.cn.
$TTL 60
www A 192.168.10.3
ns1 A 192.168.10.222
ns2 A 192.168.10.223

d. 测试结果

1
2
3
4
5
6
7
在业务测ip192.168.10.222测试:
[root@dns1 named]# dig -t a www.whbblog.cn @192.168.10.222 +short
192.168.10.2

在测试测ip192.168.10.223测试:
[root@dns2 ~]# dig -t a www.whbblog.cn @192.168.10.222 +short
192.168.10.3

2.智能DNS解析,这里就不演示了。原理一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//电信IP访问控制列表
acl "telecomip"{ telecom_IP; ... };
//联通IP访问控制列表
acl "netcomip"{ netcom_IP; ... };
view "telecom" {
match-clients { "telecomip"; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.telecom.zone";
};
};
view "netcom" {
match-clients { "netcomip"; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.netcom.zone";
};
};
view "default" {
match-clients { any; };
zone "ZONE_NAME" IN {
type master;
file "ZONE_NAME.zone";
};
};

4. 参考链接

真诚感谢以下各位大佬!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
参考链接:https://blog.csdn.net/Jaihk662/article/details/80510377

参考链接:https://www.cnblogs.com/doherasyang/p/14464999.html#11-dns

参考链接:https://blog.csdn.net/baidu_37964071/article/details/80500825

参考链接:https://blog.csdn.net/jaihk662/article/details/80509206

参考链接:https://blog.51cto.com/lihushan/157213

参考链接:http://www.linuxidc.com/Linux/2017-05/143405.htm

参考链接:https://blog.stanley.wang/

参考链接:https://www.jianshu.com/p/8efb3bbc180a

参考链接:https://blog.csdn.net/qq_27870421/article/details/94125678

参考链接:https://i4t.com/4982.html

参考链接:https://blog.csdn.net/qq_38228830/article/details/82314584