# DNS 域名解析服务

# 1. DNS 基本概述

# 1.1 为什么需要域名

在互联网中,使用 IP 地址与服务器进行通信根本行不通,原因如下:

  • 1、不好记忆,例如:学校官网的 IP 地址是 "39.104.16.126" ,难以记忆;
  • 2、IP 地址会经常变更,所以通过 IP 地址去访问某台机器就会发生访不到的问题;

此时 DNS 协议就应运而生了,那 DNS 解决了什么问题?DNS 主要用来管理域名(比较好记忆的字符)与 IP 地址(比较难记忆)的对应关系表。

# 1.2 什么是 DNS

DNS(Domain Name System) 是 ” 域名系统 “英文缩写,它所提供的服务是用来将域名转换为 IP 地址的工作。 DNS 就是一位” 翻译官 “,它的基本工作原理可以用下图来表示;

1.jpg

# 1.3 DNS 域名结构

由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。

  • 1. 互联网中的域名是有结构有规划的;
  • 2. 由于域名进行了分级,在进行域名和 IP 地址解析时能更容易找到;
  • 3. 其次域名具备全球唯一性;

918540-20230506205656234-525954592.png

# 1.4 域名分类
  • 根域:知道所有顶级域名服务器的域名和地址全世界只有 13 组根服务器,其中 10 台设置在美国,另外的三台设置与英国,瑞典,日本;

  • 顶级域:知道所有顶级域名服务器下注册的所有二级域名的 IP 地址。

    • 顶级域有两种:通用域 (com) 域和国家域 (cn【包括 hk/tw】、jp)。

    • 顶级域名由 ICANN (互联网名称与数字地址分配机构)委任的注册机构负责运行。

  • 二级域:负责一个区的域名服务器 (hmallleasing.com

    • 无需到 ICANN 进行申请,只需要到运行顶级域的注册机构(阿里、腾讯)去申请即可。
    • 如果申请的域名没有被注册,也没有被注册为商标,仅需要缴纳一笔年费即可得到心仪的域名。
  • 三级域或主机名:根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如(www、ops)

# 1.5 DNS 查询原理

DNS 查询的结果通常会在本地域名服务器中进行缓存,如果本地域名服务器中有缓存的情况下,则会跳过如下 DNS 查询步骤,很快返回解析结果。
下面的示例则概述了本地域名服务器没有缓存的情况下, DNS 查询所需的步骤:

  • 1、用户在浏览器中输入 example.com , 则由本地域名服务器开始进行递归查询。
  • 2、本地域名服务器采用迭代查询的方法,向根域名服务器进行查询。
  • 3、根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器 .TLD 的 IP 地址。
  • 4、本地域名服务器向顶级域名服务器 .com TLD 进行查询。
  • 5、.com TLD 服务器告诉本地域名服务器,下一步查询 example.com 权威域名服务器的 IP 地址。
  • 6、本地域名服务器向 example.com 权威域名服务器发送查询。
  • 7、example.com 权威域名服务器告诉本地域名服务器所查询的主机 IP 地址。
  • 8、本地域名服务器最后把查询的 IP 地址响应给浏览器。

Snipaste_2025-09-19_22-27-08.jpg

# 1.5.1 递归查询

递归查询是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。
如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。

# 1.5.2 迭代查询

迭代查询是指 DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。

# 1.6 DNS 解析类型
# 1.6.1 A
  • A 记录可实现将域名指向 IP 地址,也称为正向解析;
  • 正向解析:域名 --> DNS 服务返回 IP;

1.jpg

# 1.6.2 PTR
  • PTR 记录可以实现 IP 查找域名,也称为反向解析;
  • 反向解析: IP-->DNS 服务返回域名;

2.jpg

# 1.6.3 CNAME
  • 当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录;
  • 最常用 CNAME 的场景有 WAF (Web Application Firewall)、CDN;

3.jpg

# 1.6.4 NS
  • 1、客户端查询 DNS 服务,如当前 DNS 无法提供权威解析,则返回一条 NS 记录;
  • 2、客户端在通过 NS 记录中提供的 DNS 权威服务器进行解析;

4.jpg

# 1.6.5 MX

MX 记录用于说明哪台服务器是当前区域的邮件服务器,包含内容:

  • name:域名
  • IN MX:表示是邮件服务器的记录
  • 数字:代表优先级
  • 邮件服务器的完整域名:FQDN
# 1.7 企业自建 DNS 方式

企业常规做法:购买域名、完成 ICP 备案,并使用公网 DNS 服务(万网..)进行免费(付费)解析。

为什么需要自建 DNS?

  • 1、内网 web 服务,例如: jenkins、jumpserver、wiki 等,不适合解析至公网;
  • 2、内网中间件服务 db、mq 等,由于会经常迁移或扩缩容,应该使用域名对外提供,便于维护;
  • 3、服务器都有 hostname , hostname 应该设置为 FQDN ,如何维护主机名和主机的内网 IP 的关系;

综上:我们需要构建至少一套企业内部的 DNS 服务;

# 2. BIND 基础应用

# 2.1 什么是 BIND

BIND (由美国加州大学开发并且维护的)、BIND 是一个开源、稳定、且应用广泛的 DNS 服务。

  • 开源:指 BIND 服务源代码是开放的;
  • 稳定:指 BIND 服务运行非常稳定;
  • 广泛:政府企业、单位机构、学校、等;
# 2.2 BIND 的组成

BIND 提供(域名解析服务、权威域名服务、DNS 调试工具)

  • 域名解析服务:将域名解析为 IP 地址;
  • 权威域名服务:能从该服务器查询到完整域名对应的 IP 地址,则这台服务器就算权威解析;
  • DNS 调试工具:主要提供 DNS 客户端调试工具,供客户端使用;
# 2.3 BIND 服务实战
# 2.3.1 BIND 环境准备
系统版本外网地址内网地址功能及作用
Centos7eth0:192.168.40.91eth1:172.16.1.91DNS-Master
Centos7eth0:192.168.40.92eth1:172.16.1.92DNS-Slave
Centos7eth0:192.168.40.93eth1:172.16.1.93DNS-Son【子域】
# 2.3.2 BIND 服务安装

Bind 的安装非常简单,只需要通过 yum 即可完成安装;

  • 1、bind 提供主程序包;
  • 2、bind-utils 提供工具包;
[root@dns-master ~]# yum install bind bind-utils -y
[root@dns-master ~]# systemctl start named && systemctl enable named
[root@dns-master ~]# rndc-confgen -r /dev/urandom -a
[root@dns-master ~]# chown root:named /etc/rndc.key
[root@dns-master ~]# chmod 640 /etc/rndc.key 
[root@dns-master ~]# systemctl restart named
# 2.3.3 BIND 配置文件
  1. 主配置文件格式
  • options {} :全局选项(监听端口、数据文件存储位置、缓存位置、权限等)
  • logging {} :服务日志选项
  • zone . {}:自定义区域配置
  • include:包含别的文件
  1. 主配置文件注意事项
  • 语法非常严格;
  • 文件权限属主 root ,属组 named ,文件权限 640
  1. 配置文件解析
[root@dns-master ~]# cat /etc/named.conf 
options {
	// ipv4监听地址及端口
	listen-on port 53 { any; };
 	// ipv6监听地址及端口
	listen-on-v6 port 53 { ::1; };
	// 区域配置存储目录
	directory 	"/var/named";
	// DNS解析过内容的缓存文件
	dump-file 	"/var/named/data/cache_dump.db";
	// 静态解析文件(几乎不用)
	statistics-file "/var/named/data/named_stats.txt";
	// 内存的统计信息
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	// 允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	//递归查询
	recursion yes;
	//安全校验相关的
	dnssec-enable yes;
	//安全校验相关的
	dnssec-validation yes;
	/* Path to ISC DLV key */
	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.ca中存储的是全球根域服务器;
zone "." IN {
	type hint;
	file "named.ca";  //区域配置文件名称
};
//包含其他文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
# 2.3.4 客户端验证 DNS 解析的配置

1. 配置 DNS 服务器指向,在 /etc/resolv.conf 里配置 dns 的 IP 地址

[root@client ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.40.91
  1. 使用 ping 命令验证解析
[root@client ~]# ping www.baidu.com
PING www.a.shifen.com (183.2.172.177) 56(84) bytes of data.
64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq=1 ttl=128 time=15.5 ms
64 bytes from 183.2.172.177 (183.2.172.177): icmp_seq=2 ttl=128 time=12.2 ms
# 2.4 自定义区域

自定义域分为如下两类:

主机域(内网)

  • 1、主机域其实是一个假域;
  • 2、主机域其实是不能解析到互联网上;
  • 3、主机域它只对局域网(内网)提供服务;

业务域(外网)

  • 1、业务域一般都是真实可用的;
  • 2、业务域则为一个真正需要对外提供服务的域名;
# 2.4.1 自定义区域配置文件解析
  • 区域 zone 文件定义在 /etc/named.conf 配置;
  • 也可以配置在自定义的其他文件里,并在 named.conf 里 include
  • 注意文件的权限,属主 root 属组 named 文件权限 640
zone "hmallleasing.com" IN {
	type master|slave;      // 自定义区域类型
	file /path/to/zonefile; // 绝对路径和相对路径
	allow-update {ip|none}; // 允许哪个ip可以使用nsupdate动态更新区域文件
};
# 2.4.2 自定义区域数据库文件

范例以及编写注意事项:

  • 1、严格注意语法书写,其格式非常严格;
  • 2、记录不准许折行书写;
  • 3、单行记录开头不准许空格或 tab 开头;
[root@dns-master ~]# cat /var/named/example.com.zone
$TTL 600 ; DNS失效时间,单位秒;
hmallleasing.com. IN SOA ns.hmallleasinge.com. xuyong.hmallleasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2021041514 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
hmallleasing.com. IN NS ns1.hmallleasing.com.
hmallleasing.com. IN NS ns2.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.hmallleasing.com. IN A 172.16.1.91
ns2.hmallleasing.com. IN A 172.16.1.92
; 真正的域名解析
www.hmallleasing.com. IN A 1.1.1.1
web.hmallleasing.com. IN A 2.2.2.2
# 2.5 BIND 增加 A 记录正向解析实战

用户通过 DNS 服务器 172.16.1.91 解析 www.hmalleasing.com

  • 1、添加 hmallleasing.com 区域配置文件
  • 2、添加区域数据库文件,配置 NS 记录,返回 DNS 权威服务器地址
  • 3、该域的 DNS 权威服务器为 172.16.1.91
  • 4、添加该域的 A 记录解析
# 2.5.1 新增区域配置文件

1. 在主配置文件 /etc/named.conf,新增一个 hmallleasing.com 区域配置

[root@dns-master ~]# cat /etc/named.conf
...
options {
	// ipv4监听地址及端口
	listen-on port 53 { any; };
...
	// 允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };
...
//自行配置权威域名解析hmallleaing.com
zone "hmallleasing.com" IN {
 	 type master;
 	 file "hmallleasing.com.zone";    //具体解析记录配置存储至哪个文件
};
...

2. 检查配置文件语法是否正常

[root@dns-master ~]# named-checkconf
# 2.5.2 新增区域数据库文件

1. 添加区域数据库文件

[root@dns-master ~]# cat /var/named/hmallleasing.com.zone
$TTL 600 ; DNS失效时间,单位秒;
hmallleasing.com. IN SOA ns.hmallleasing.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
hmallleasing.com. IN NS ns1.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.hmallleasing.com. IN A 172.16.1.91
; 真正的域名解析
www.hmallleasing.com. IN A 1.1.1.1
web.hmallleasing.com. IN A 2.2.2.2

2. 检查区域数据库文件

[root@dns-master ~]# named-checkzone hmallleasing.com  /var/named/hmallleasing.com.zone
zone hmallleasing.com/IN: loaded serial 2025092018
OK

3. 重载 DNS 服务器

[root@dns-master ~]# rndc reload
# 2.5.3 客户端测试域名解析
[root@client ~]# yum install bind-utils -y
[root@client ~]# dig web.hmallleasing.com @172.16.1.91 +short
2.2.2.2
[root@client ~]# dig www.hmallleasing.com @172.16.1.91 +short
1.1.1.1
# 2.6 BIND 增加 CNAME 记录实战

用户通过 DNS 服务器 172.16.1.91 解析 www.job.com

1、添加 job.com 区域配置文件

2、添加区域数据库文件,配置 NS 记录,返回 DNS 权威服务器地址

3、该域的 DNS 权威服务器为 172.16.1.91

4、添加该域的 CNAME 解析记录,解析至 www.hmallleasing.com 域名上

1.jpg

# 2.6.1 新增区域配置文件

1. 在主配置文件 /etc/named.conf,新增一个 hmallleasing.com 区域配置

[root@dns-master ~]# cat /etc/named.conf
...
options {
	// ipv4监听地址及端口
	listen-on port 53 { any; };
...
	// 允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };
...
//自行配置权威域名解析job.com
zone "job.com" IN {
 	 type master;
 	 file "job.com.zone";    //具体解析记录配置存储至哪个文件
};
...

2. 检查配置文件语法是否正常

[root@dns-master ~]# named-checkconf
# 2.6.2 新增区域数据库文件

1. 添加区域数据库文件

[root@dns-master ~]# cat /var/named/job.com.zone
$TTL 600 ; DNS失效时间,单位秒;
job.com. IN SOA ns.job.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
job.com. IN NS ns1.job.com.
; A记录,配置权威域名的真实IP地址;
ns1.job.com. IN A 172.16.1.91
; 真正的域名解析
www.job.com. IN CNAME www.hmallleasing.com.
dev.job.com. IN A 2.2.2.3

2. 检查区域数据库文件

[root@dns-master ~]# named-checkzone job.com  /var/named/job.com.zone
zone job.com/IN: loaded serial 2025092018
OK

3. 重载 DNS 服务器

[root@dns-master ~]# rndc reload
# 2.6.3 客户端测试域名解析
[root@client ~]# dig www.job.com @172.16.1.91 +short
www.hmallleasing.com.
1.1.1.1
[root@client ~]# dig dev.job.com @172.16.1.91 +short
2.2.2.3
# 2.7 BIND 增加 PTR 记录反向解析实战

配置反向解析 PTR:IP-->FQDN

  • 1、反向区域文件名称为逆向网络地址 加 .in-addr.arpa. 后缀组成
  • 2、反向区域数据库文件,例如 172.16.1.200 的 name 为 200 ,完全格式为:1.16.172.in-addr.arpa.
# 2.7.1 新增区域配置文件

1. 在主配置文件 /etc/named.conf,新增一个反向区域配置

[root@dns-master ~]# cat /etc/named.conf
...
options {
	// ipv4监听地址及端口
	listen-on port 53 { any; };
...
	// 允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };
...
//配置反向解析
zone "1.16.172.in-addr.arpa" IN {
  type master;
  file "1.16.172.zone";
};
...

2. 检查配置文件语法是否正常

[root@dns-master ~]# named-checkconf
# 2.7.2 新增区域数据库文件

1. 添加反向解析区域数据库文件

[root@dns-master ~]# cat /var/named/1.16.172.zone
$TTL 600 ; DNS失效时间,单位秒;
@ IN SOA 1.16.172.in-addr.arpa. xuy.nf-leasing.com. (
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
;ns反向解析
@ IN NS ns1.hmallleasing.com.
;权威DNS反向解析
91 IN PTR ns1.hmallleasing.com.
;www反向解析
200 IN PTR route.hmallleasing.com.
5 IN PTR lb.hmallleasing.com.
7 IN PTR web01.hmallleasing.com.
8 IN PTR web02.hmallleasing.com.

2. 检查区域数据库文件

[root@dns-master ~]# named-checkzone job.com /var/named/1.16.172.zone
zone job.com/IN: loaded serial 2025092018
OK

3. 重载 DNS 服务器

[root@dns-master ~]# rndc reload
# 2.7.3 客户端测试域名解析
[root@client ~]# dig -x 172.16.1.200 @172.16.1.91 +short
route.hmallleasing.com.
[root@client ~]# dig -x 172.16.1.7 @172.16.1.91 +short
web01.hmallleasing.com.
[root@client ~]# dig -x 172.16.1.8 @172.16.1.91 +short
web02.hmallleasing.com.
[root@client ~]# dig -x 172.16.1.5 @172.16.1.91 +short
lb.hmallleasing.com.

# 3. 递归查询

# 3.1 什么是递归查询

3.jpg

  • 如果你要建立一个【授权域名】服务器,仅提供本地已存在域名解析即可;那么不要开启 recursion 功能。
  • 如果你要建立一个递归 DNS 服务器,那么需要开启 recursion 功能。
  • 如果你的递归 DNS 服务器有公网 IP 地址,你必须开启访问控制功能,只有合法用户才可以发询问。
# 3.2 递归查询配置参数
参数选项作用
recurisonyes/no是否开启递归查询请求
allow-recursion{address_match_list | any | none };限制客户端递归请求的范围
# 3.3 递归查询配置场景
# 3.3.1 开启递归查询

BIND 默认配置中的 recurison 参数是启用的;

  • 1、配置仅允许 172.16.1.0 网段用户可以查询(可选);
  • 2、使用客户端查询系统中存在的域名;
  • 3、使用客户端查询系统中不存在的域名(让 BIND 进行递归查询);

1. 修改 /etc/named.conf 配置文件

[root@dns-master ~]# cat /etc/named.conf 
...
	//递归查询
	recursion yes;
	allow-recursion { 192.168.40.0/24;172.16.1.0/24; };
...

2. 语法检查且重新加载 named

[root@dns-master ~]# named-checkconf 
[root@dns-master ~]# rndc reload
server reload successful

3. 查询存在 BIND 服务中的域名

[root@client ~]# dig web.hmallleasing.com @172.16.1.91 +short
2.2.2.2

4. 查询不在 BIND 服务中的域名,可以获取正确返回,原因是 BIND 进行了递归查询

[root@client ~]# dig www.qq.com @172.16.1.91 +short
ins-r23tsuuf.ias.tencent-cloud.net.
121.14.77.221
121.14.77.201
# 3.3.2 关闭递归查询

1. 修改 /etc/named.conf 配置文件

[root@dns-master ~]# cat /etc/named.conf 
...
	//递归查询
	recursion no;
	#allow-recursion { 192.168.40.0/24;172.16.1.0/24; };
...

2. 语法检查且重新加载 named

[root@dns-master ~]# named-checkconf 
[root@dns-master ~]# rndc reload
server reload successful

3. 查询存在 BIND 服务中的域名会返回权威结果,因为本地无需进行递归查询,即可返回权威解析

[root@client ~]# dig web.hmallleasing.com @172.16.1.91 +short
2.2.2.2

4. 由于本地无法返回权威结果,同时也禁用了递归查询,所以查询本地不存在域名会有 WARNING 提示

[root@client ~]# dig www.qq.com @172.16.1.91
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> www.qq.com @172.16.1.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 30635
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available   #递归查询不可用
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.qq.com.			IN	A
;; Query time: 0 msec
;; SERVER: 172.16.1.91#53(172.16.1.91)
;; WHEN: Sat Sep 20 21:33:54 CST 2025
;; MSG SIZE  rcvd: 39

# 4. DNS 主辅同步

# 4.1 DNS 主辅同步概念

辅助 DNS 是 DNS 容灾备份服务:在主 DNS 和辅 DNS 之间建立区域数据传输机制,当主 DNS 遇到故障或者服务中断时,辅 DNS 仍可以继续提供解析服务,因此保障业务稳定运行。

辅助 DNS 的优势:

  • 容灾备份,降低业务中断风险:主 DNS 系统故障,辅助 DNS 可继续提供域名解析服务,保障业务可用性。
  • 负责均衡,流量均摊降低负载:当辅助 DNS 与主 DNS 同时对外提供解析服务时,可以达到流量负载均衡的效果。
# 4.2 DNS 主从同步原理

918540-20230508112130365-444561605.jpg

# 4.3 DNS 主从同步场景
# 4.3.1 主从环境准备
  • 1、确保防火墙规则开放(建议关闭)
  • 2、保持主从服务器时钟一致;
  • 3、搭建完主从后,若修改主服务器域配置, Serail Number 必须递增,否则不同步;
# 4.3.2 主辅同步配置要点
  • 1、主 DNS 的 named.conf 里配置 allow-transfer 和 also-notify 选项;
  • 2、辅助 DNS 主配置文件 option 段添加 masterfile-format text ,否则同步的文件为 data 类型;
  • 3、辅助 DNS 添加区域配置文件,类型为 slave ,同时指向 masters 参数指向 master 地址;
  • 4、辅助 DNS 不可主动修改 DNS 数据库文件;
# 4.3.3 Master 服务器的配置

1. 在主配置文件 /etc/named.conf,新增一个反向区域配置

[root@dns-master ~]# cat /etc/named.conf
...
options {
	//允许哪个地址同步master配置信息
    allow-transfer { 172.16.1.92; }; 
	//主动通知辅助DNS域名变更	
    also-notify { 172.16.1.92; }; 
};
...
//自行配置权威域名解析hmallleaing.com
zone "hmallleasing.com" IN {
 	 type master;
 	 file "hmallleasing.com.zone";    //具体解析记录配置存储至哪个文件
};
zone "job.com" IN {
 	 type master;
 	 file "job.com.zone";    //具体解析记录配置存储至哪个文件
};
//配置反向解析
zone "1.16.172.in-addr.arpa" IN {
  type master;
  file "1.16.172.zone";
};
...

2. 添加区域数据库文件 (需要多添加一条 ns 记录)

#1.hmallleasing.com.zone 需要多添加一条 ns 记录
[root@dns-master ~]# cat /var/named/hmallleasing.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
hmallleasing.com. IN SOA ns.hmallleasing.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
hmallleasing.com. IN NS ns1.hmallleasing.com.
hmallleasing.com. IN NS ns2.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.hmallleasing.com. IN A 172.16.1.91
ns2.hmallleasing.com. IN A 172.16.1.92
; 真正的域名解析
www.hmallleasing.com. IN A 1.1.1.1
web.hmallleasing.com. IN A 2.2.2.2
#2./1.16.172.zone 需要多添加一条 ns 记录
[root@dns-master ~]# cat /var/named/1.16.172.zone 
$TTL 600 ; DNS失效时间,单位秒;
@ IN SOA 1.16.172.in-addr.arpa. xuy.nf-leasing.com. (
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
;ns反向解析
@ IN NS ns1.hmallleasing.com.
@ IN NS ns2.hmallleasing.com.
;权威DNS反向解析
91 IN PTR ns1.hmallleasing.com.
92 IN PTR ns2.hmallleasing.com.
;www反向解析
200 IN PTR route.hmallleasing.com.
5 IN PTR lb.hmallleasing.com.
7 IN PTR web01.hmallleasing.com.
8 IN PTR web02.hmallleasing.com.
#2.job.com.zone 需要多添加一条 ns 记录
[root@dns-master named]# cat job.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
job.com. IN SOA ns.job.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092019 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
job.com. IN NS ns1.job.com.
job.com. IN NS ns2.job.com.
; A记录,配置权威域名的真实IP地址;
ns1.job.com. IN A 172.16.1.91
ns2.job.com. IN A 172.16.1.92
; 真正的域名解析
www.job.com. IN CNAME www.hmallleasing.com.
dev.job.com. IN A 2.2.2.3

3. 检查语法并重载 DNS 服务器

[root@dns-master ~]# named-checkconf
[root@dns-master ~]# named-checkzone hmallleasing.com /var/named/hmallleasing.com.zone 
[root@dns-master ~]# rndc reload
# 4.3.4 Slave 服务器的配置

1. 安装 bind 服务

[root@dns-slave ~]# yum install bind bind-utils -y
[root@dns-slave ~]# systemctl start named && systemctl enable named

2. 配置 rndc【首次需要配置】

[root@dns-slave ~]# rndc-confgen -r /dev/urandom -a
[root@dns-slave ~]# chown root:named /etc/rndc.key
[root@dns-slave ~]# chmod 640 /etc/rndc.key 
[root@dns-slave ~]# systemctl restart named

3. 修改主配置文件

[root@dns-slave ~]# cat /etc/named.conf 
...
options {
	listen-on port 53 { any; };
	allow-query     { any; };
    masterfile-format text;
};
...

4. 添加区域配置文件,类型为 slave,然后指向 master 地址

[root@dns-slave ~]# cat /etc/named.conf 
...
//自行配置权威域名解析hmallleaing.com
zone "hmallleasing.com" IN {
         type slave;
         file "slaves/hmallleasing.com.zone";    //具体解析记录配置存储至哪个文件
         masters { 172.16.1.91; };
};
zone "job.com" IN {
         type slave;
         file "slaves/job.com.zone";    //具体解析记录配置存储至哪个文件
         masters { 172.16.1.91; };
};
//配置反向解析
zone "1.16.172.in-addr.arpa" IN {
 	type slave;
 	file "slaves/1.16.172.zone";
  	masters { 172.16.1.91; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
...

4. 检查语法并重载 DNS 服务器

[root@dns-master ~]# named-checkconf
[root@dns-master ~]# rndc reload
[root@dns-slave ~]# ll /var/named/slaves/
-rw-r--r-- 1 named named 549 Sep 20 22:30 1.16.172.zone
-rw-r--r-- 1 named named 420 Sep 20 22:30 hmallleasing.com.zone
-rw-r--r-- 1 named named 356 Sep 20 22:30 job.com.zone
# 4.3.5 测试主辅解析

使用 dig 进行域名解析,先通过 master 解析,然后在使用 slave 测试解析

1. 通过 master 解析

[root@client ~]# dig www.hmallleasing.com @172.16.1.91 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> www.hmallleasing.com @172.16.1.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34451
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.hmallleasing.com.		IN	A
;; ANSWER SECTION:
www.hmallleasing.com.	600	IN	A	1.1.1.1
;; AUTHORITY SECTION:
hmallleasing.com.	600	IN	NS	ns2.hmallleasing.com.
hmallleasing.com.	600	IN	NS	ns1.hmallleasing.com.
;; ADDITIONAL SECTION:
ns1.hmallleasing.com.	600	IN	A	172.16.1.91
ns2.hmallleasing.com.	600	IN	A	172.16.1.92
;; Query time: 0 msec
;; SERVER: 172.16.1.91#53(172.16.1.91)
;; WHEN: Sat Sep 20 23:03:40 CST 2025
;; MSG SIZE  rcvd: 133

2. 通过 slave 解析

[root@client ~]# dig www.hmallleasing.com @172.16.1.92 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> www.hmallleasing.com @172.16.1.92
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4506
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.hmallleasing.com.		IN	A
;; ANSWER SECTION:
www.hmallleasing.com.	600	IN	A	1.1.1.1
;; AUTHORITY SECTION:
hmallleasing.com.	600	IN	NS	ns2.hmallleasing.com.
hmallleasing.com.	600	IN	NS	ns1.hmallleasing.com.
;; ADDITIONAL SECTION:
ns1.hmallleasing.com.	600	IN	A	172.16.1.91
ns2.hmallleasing.com.	600	IN	A	172.16.1.92
;; Query time: 0 msec
;; SERVER: 172.16.1.92#53(172.16.1.92)
;; WHEN: Sat Sep 20 23:03:23 CST 2025
;; MSG SIZE  rcvd: 133

3. 测试主辅同步

#1.dns master 新增一条记录,然后滚动 seria2025092019 自增 1
[root@dns-master named]# cat hmallleasing.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
hmallleasing.com. IN SOA ns.hmallleasing.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092019 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
hmallleasing.com. IN NS ns1.hmallleasing.com.
hmallleasing.com. IN NS ns2.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.hmallleasing.com. IN A 172.16.1.91
ns2.hmallleasing.com. IN A 172.16.1.92
; 真正的域名解析
www.hmallleasing.com. IN A 1.1.1.1
web.hmallleasing.com. IN A 2.2.2.2
blog.hmallleasing.com. IN A 3.3.3.3
#2. 重载 DNS 服务器
[root@dns-master named]# rndc reload
#3. 使用 master 以及 slave 地址测试新添加的记录是否能解析
[root@client ~]# dig blog.hmallleasing.com @172.16.1.91 
[root@client ~]# dig blog.hmallleasing.com @172.16.1.92 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> blog.hmallleasing.com @172.16.1.91
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60136
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blog.hmallleasing.com.		IN	A
;; ANSWER SECTION:
blog.hmallleasing.com.	600	IN	A	3.3.3.3
;; AUTHORITY SECTION:
hmallleasing.com.	600	IN	NS	ns1.hmallleasing.com.
hmallleasing.com.	600	IN	NS	ns2.hmallleasing.com.
;; ADDITIONAL SECTION:
ns1.hmallleasing.com.	600	IN	A	172.16.1.91
ns2.hmallleasing.com.	600	IN	A	172.16.1.92
;; Query time: 0 msec
;; SERVER: 172.16.1.91#53(172.16.1.91)
;; WHEN: Sat Sep 20 23:10:17 CST 2025
;; MSG SIZE  rcvd: 134

# 5. DNS 子域授权配置

# 5.1 什么是 DNS 子域授权

A 服务负责 (hmallleasing.com)域名解析,授权 B 服务器管理 (ops.hmallleasing.com) 的域名解析;

1.jpg

# 5.2 DNS 子域授权环境
环境域名节点外网地址节点内网地址
父域 Masterhmallleasing.com192.168.40.91172.16.1.91
父域 Slacehmamllleasing.com192.168.40.92172.16.1.93
子域ops.hmallleasing.com192.168.40.92172.16.1.93
# 5.3 DNS 子域授权的配置
# 5.3.1 DNS Master 父域配置

1. 区域配置文件此前可以复用之前主辅配置,所以无需修改;

[root@dns-master ~]# cat /etc/named.conf 
options {
...
	//允许哪个地址同步master配置信息
    allow-transfer { 172.16.1.92; }; 
	//主动通知辅助DNS域名变更	
     also-notify { 172.16.1.92; }; 
};
...
//自行配置权威域名解析hmallleaing.com
zone "hmallleasing.com" IN {
 	 type master;
 	 file "hmallleasing.com.zone";    //具体解析记录配置存储至哪个文件
};
zone "job.com" IN {
 	 type master;
 	 file "job.com.zone";    //具体解析记录配置存储至哪个文件
};
//配置反向解析
zone "1.16.172.in-addr.arpa" IN {
  type master;
  file "1.16.172.zone";
};

2. 区域数据库文件,将 ops 三级子域授权给子域服务器

[root@dns-master ~]# cat /var/named/hmallleasing.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
hmallleasing.com. IN SOA ns.hmallleasing.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092019 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
hmallleasing.com. IN NS ns1.hmallleasing.com.
hmallleasing.com. IN NS ns2.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.hmallleasing.com. IN A 172.16.1.91
ns2.hmallleasing.com. IN A 172.16.1.92
; 真正的域名解析
www.hmallleasing.com. IN A 1.1.1.1
web.hmallleasing.com. IN A 2.2.2.2
blog.hmallleasing.com. IN A 3.3.3.3
;增加子域的配置
ops.hmallleasing.com.		 IN	 NS	 ns1.ops.hmallleasing.com.
ns1.ops.hmallleasing.com.	 IN	 A	 172.16.1.93
  1. 检查配置文件,区域数据库文件,重载服务
[root@dns-master ~]# named-checkconf
[root@dns-master ~]# named-checkzone hmallleasing.com /var/named/hmallleasing.com.zone 
[root@dns-master ~]# systemctl restart named
# 5.3.2 DNS 子域配置 (Other)

1.bind 软件安装

[root@dns-son ~]# yum install bind bind-utils -y

2. 修改配置文件,然后增加紫玉的 zone 配置文件

[root@dns-son ~]# cat /etc/named.conf 
options {
	...
	listen-on port 53 { any; };
	allow-query     { any; };
};
//增加如下配置
zone "ops.hmallleasing.com" IN {
	type master;
	file "ops.hmallleasing.com.zone";
};

3. 添加区域数据数据库文件

[root@dns-son ~]# cat /var/named/ops.hmallleasing.com.zone
$TTL 600 ; DNS失效时间,单位秒;
ops.hmallleasing.com. IN SOA ns.ops.hmallleasing.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,hmallleasing.com. 域名由哪几台权威服务器提供解析
ops.hmallleasing.com. IN NS ns1.ops.hmallleasing.com.
; A记录,配置权威域名的真实IP地址;
ns1.ops.hmallleasing.com. IN A 172.16.1.93
; 真正的域名解析
www.ops.hmallleasing.com.      	IN     	A  6.6.6.6
blog.ops.hmallleasing.com.      IN      A  7.7.7.7

4. 检查配置文件,区域数据库文件,重载服务

[root@dns-son ~]# named-checkconf
[root@dns-son ~]# named-checkzone ops.hmallleasing.com /var/named/ops.hmallleasing.com.zone 
[root@dns-son ~]# systemctl start named  && systemctl enable named
# 5.3.3 验证结果

1. 客户端获取子域对应的解析

[root@client ~]# dig www.ops.hmallleasing.com @172.16.1.93 +short
6.6.6.6
[root@client ~]# dig blog.ops.hmallleasing.com @172.16.1.93 +short
7.7.7.7

2. 客户端获取子域对应的解析(使用父域的 IP)

[root@client ~]# dig blog.ops.hmallleasing.com @172.16.1.91 +short
7.7.7.7
[root@client ~]# dig www.ops.hmallleasing.com @172.16.1.92 +short
6.6.6.6

3. 客户端获取父域对应的解析(使用子域的 IP)

# 无法正常解析
[root@client ~]# dig www.hmallleasing.com @172.16.1.93 +short

问题:由于父域与子域互相维护不同的区域配置,它们之间并不存在任何的联系,所以子域在解析父域的域名时,它并不会直接通过父域来获取权威的解析记录,那它会怎么做呢?

  • 第一步:它会先找顶点根域;
  • 第二步:寻找找 com 域对应的 DNS 服务器;
  • 第三步:寻找 example 域对应的 DNS 服务器,而后获取 www 对应的解析记录;
  • 这种查找模式是由 DNS 的机制所决定的;

解决方法:明确告诉子域,让其能找到父域进项查询解析,而无需查找根域;(需要配置 DNS 的转发),参考小节:6.2、子域名转发的配置。

# 6. DNS 转发模式

# 6.1 什么是 DNS 转发

转发指的是将域名查询请求,转至某一台服务器解析(被转发的服务器必须允许为当前服务器做递归)
转发分为两类;

  • 区域转发:仅转发对某特定区域的解析请求;
  • 全局转发:针对本地没有通过 zone 定义的区域查询请求,统统转发;

转发参数:

  • forwarders:转发给哪台服务器,可以多台;
  • forwarder only:仅转发;
  • forwarder first:优先转发给对应的服务器查询,如转发未响应,则自行迭代查询;
# 6.2 DNS 转发示例

全局转发示例配置(所有本地不存在的域名都进行转发)

options {
	...
	forward { first | only };
	forwarders { SERVER_IP; };
	...
}

区域转发示例配置(符合该区域则进行条件转发)

zone "ZONE_NAME" IN {
	type forward;
	forward first|only ;
	forwarders { SERVER_IP; };
};
# 6.3 DNS 区域转发实践

1. 在子域服务器上,添加父域的域名,然后配置转发;

[root@dns-son ~]# cat /etc/named.conf 
...
zone "ops.hmallleasing.com" IN {
	type master;
	file "ops.hmallleasing.com.zone";
};
//增加如下配置
zone "hmallleasing.com" IN {
	type forward;
	forward first;
	forwarders { 172.16.1.91; 172.16.1.92; };
};

2. 检查配置文件,区域数据库文件,重载服务

[root@dns-son ~]# named-checkconf
[root@dns-son ~]# systemctl restart named

3. 测试转发效果

[root@client ~]# dig www.hmallleasing.com @172.16.1.93 +short
1.1.1.1
[root@client ~]# dig web.hmallleasing.com @172.16.1.93 +short
2.2.2.2
[root@client ~]# dig blog.hmallleasing.com @172.16.1.93 +short
3.3.3.3

# 7. 智能 DNS 概述

智能 DNS 就是根据用户的来源地域,自动智能化判断来路 IP 返回给用户,而不需要用户进行选择;

# 7.1 什么是智能 DNS

DNS 解析,不判断访问者来源,会随机选择其中一个 IP 地址返回给访问者。

智能 DNS 解析,会判断访问者的来源,为不同的访问者智能返回不同的 IP 地址,可使访问者在访问网站时可获取用户指定的 IP 地址,能够减少解析时延,并提升网站访问速度的功效。

比方一个企业的站点三个运营商的带宽都有:电信、联通、移动;同样来自三个不同 运营商网络的访问用户,假设电信用户访问企业网址的时候,智能 DNS 会自动根据 IP 判断,再从电信返回给电信用户,其它的也同理;

2.jpg

# 7.2 如何实现智能 DNS

实现智能 DNS 需要 VIEW 试图以及 ACL 访问控制列表协同完成;

3.jpg

# 7.2.1 ACL 访问控制列表

ACL 访问控制列表,是用来限制哪些主机可以通过 DNS 查询,哪些不可以;

系统默认内置四种 ACL:

  • any :允许所有主机节点查询;
  • none :拒绝所有主机节点查询;
  • localhost :仅允许本地接口网络主机查询;
  • localnet :本地子网所有 IP;

1. 简单 ACL 规则定义

acl "ips" {                           //定义一个名为ips的ACL
  	 10.0.0.1; 10.0.0.2; 192.168.1.1; //包含3个单个IP
 	 172.16.1.0/24;
...
};

2. 复杂 ACL 规则定义

acl "all_rule" {  			//定义一个名为all_rule的ACL
  "ips";         	 		//可以嵌套包含其他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)
};

3. 定义的 ACL 规则如何使用

allow-update { "ips"; };        //允许谁能更新
allow-transfer { "all_rule"; }; //允许谁能同步
...
# 7.2.2 VIEW 视图功能

view 语句定义了视图功能,视图是 BIND9 提供的强大的新功能,允许 DNS 服务器根据不同的客户端,请求相同的域名,但返回不同的解析结果;

view 语法示例:

view view_name [class] {
	match-clients { address_match_list } ;
	match-destinations { address_match_list } ;
	match-recursive-only { yes_or_no } ;
	[ view_option; ...]
	[zone; ...]
};
# 7.3 智能 DNS 场景实战
  • 维护一个主机域;根据不同环境的 IP 请求,查询相同域名,返回不同的解析结果;(企业常用)
  • 维护一个业务域;根据不同的运营商 IP 地址,解析到不同的地址;(需要大量 IP 地址库)
# 7.3.1 定义 ACL 规则
//模拟测试业务地址段
acl "env-test" {
	172.16.1.10;
};
//模拟生产业务地址段
acl "env-prod" {
	172.16.1.200;
};
# 7.3.2 定义 VIEW 视图

1. 修改 /etc/named.conf 配置文件

[root@dns-master ~]# cp /etc/named.conf /etc/named.conf.bak
[root@dns-master ~]# cat /etc/named.conf
...
//模拟测试业务地址段
acl "test" {
	172.16.1.10;
};
//模拟生产业务地址段
acl "prod" {
	172.16.1.200;
};
//测试业务view
view "test-project" {
  match-clients { "test"; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type master;
    file "test/example.com.zone";
  };
};
//生产业务view
view "prod-project" {
  match-clients { "prod"; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type master;
    file "prod/example.com.zone";
  };
};
//默认的view
view "default" {
  match-clients { any; };
  recursion yes;
  
  zone "." IN {
    type hint;
    file "named.ca";
  };
  
  zone "example.com" {
    type master;
    file "default/example.com.zone";
  };
};
//包含其他文件
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

2. 检查配置文件语法

[root@dns-master ~]# named-checkconf
# 7.3.3 测试环境 zone (电信)

1. 创建目录并修改属组

[root@dns-master ~]# mkdir /var/named/test
[root@dns-master ~]# chgrp named /var/named/test/

2. 准备测试环境的 zone 区域配置文件

[root@dns-master ~]# cat /var/named/test/example.com.zone
$TTL 600 ; DNS失效时间,单位秒;
example.com. IN SOA ns.example.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,example.com. 域名由哪几台权威服务器提供解析
example.com. IN NS ns1.example.com.
; A记录,配置权威域名的真实IP地址;
ns1.example.com. IN A 172.16.1.91
; 真正的域名解析
www.example.com.      	IN     	A  1.1.1.1

3. 检查 zone 区域配置文件语法

[root@dns-master ~]# named-checkzone example.com /var/named/test/example.com.zone
[root@dns-master ~]# systemctl restart named
# 7.3.4 生产环境 zone (联通)

1. 创建目录并修改属组

[root@dns-master ~]# mkdir /var/named/prod
[root@dns-master ~]# chgrp named /var/named/prod/

2. 准备测试环境的 zone 区域配置文件

[root@dns-master ~]# cp /var/named/test/example.com.zone /var/named/prod/example.com.zone 
[root@dns-master ~]# cat /var/named/prod/example.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
example.com. IN SOA ns.example.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,example.com. 域名由哪几台权威服务器提供解析
example.com. IN NS ns1.example.com.
; A记录,配置权威域名的真实IP地址;
ns1.example.com. IN A 172.16.1.91
; 真正的域名解析
www.example.com.      	IN     	A  2.2.2.2

3. 检查 zone 区域配置文件语法

[root@dns-master ~]# named-checkzone example.com /var/named/prod/example.com.zone
[root@dns-master ~]# systemctl restart named
# 7.3.5 添加默认 zone

1. 创建目录并修改属组

[root@dns-master ~]# mkdir /var/named/default
[root@dns-master ~]# chgrp named /var/named/default

2. 准备测试环境的 zone 区域配置文件

[root@dns-master ~]# cat /var/named/default/example.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
example.com. IN SOA ns.example.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092018 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,example.com. 域名由哪几台权威服务器提供解析
example.com. IN NS ns1.example.com.
; A记录,配置权威域名的真实IP地址;
ns1.example.com. IN A 172.16.1.91
; 真正的域名解析
www.example.com.      	IN     	A  3.3.3.3

3. 检查 zone 区域配置文件语法

[root@dns-master ~]# named-checkzone example.com /var/named/default/example.com.zone
[root@dns-master ~]# systemctl restart named
# 7.3.6 客户端测试

使用不同客户端查询相同的域名进行测试验证

# 172.16.1.10 解析结果
[root@client ~]# dig www.example.com @172.16.1.91 +short
1.1.1.1
# 172.16.1.200 解析结果
[root@route ~]# dig www.example.com @172.16.1.91 +short
2.2.2.2
# 172.16.1.7 解析结果
[root@web01 ~]# dig www.example.com @172.16.1.91 +short
3.3.3.3
# 7.4 智能 DNS 主从场景实践
  • 基于 TSIG KEY 实现多 VIEW 主从同步,TSIG KEY 是基于对称秘钥加密技术实现的 DNS 报文认证机制。
  • 秘钥生成后存放至通信双方的配置文件中,报文传送前使用对称加密计数。
# 7.4.1 生成 TSIG-KEY

使用 BIND 自带的工具 ddns-confgen 生成 TSIG-KEY,每个 view 需要一对 TSIG-KEY

#1. 生成 default 默认 TSIG-KEY
[root@dns-master ~]# ddns-confgen -a hmac-md5
key "default-key" {
	algorithm hmac-md5;
	secret "MGMtJqmFgFdGU1yh7/FzBQ==";
};
#2. 生成测试环境 TSIG-KEY
[root@dns-master ~]# ddns-confgen -a hmac-md5
key "test-key" {
	algorithm hmac-md5;
	secret "0huRl0JD1goOvb6/BupIKw==";
};
#3. 生成生产环境 TSIG-KEY
[root@dns-master ~]# ddns-confgen -a hmac-md5
key "prod-key" {
	algorithm hmac-md5;
	secret "1q8T/d2fNp4Y4sLETWZPBA==";
};
# 7.4.2 Master DNS 配置

Master DNS named.conf 配置(172.16.1.91)

[root@dns-master ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
options {
	// ipv4监听地址及端口
	listen-on port 53 { any; };
 	// ipv6监听地址及端口
	listen-on-v6 port 53 { ::1; };
	// 区域配置存储目录
	directory 	"/var/named";
	// DNS解析过内容的缓存文件
	dump-file 	"/var/named/data/cache_dump.db";
	// 静态解析文件(几乎不用)
	statistics-file "/var/named/data/named_stats.txt";
	// 内存的统计信息
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	// 允许谁本台DNS发起查询请求(localhost|ip|any)
	allow-query     { any; };
	//允许哪个地址同步master配置信息
        allow-transfer { 172.16.1.92; }; 
	//主动通知辅助DNS域名变更	
        also-notify { 172.16.1.92; }; 
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	//递归查询
	recursion yes;
	allow-recursion { 192.168.40.0/24;172.16.1.0/24; };
	//安全校验相关的
	dnssec-enable yes;
	//安全校验相关的
	dnssec-validation yes;
	/* Path to ISC DLV key */
	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;
        };
};
//模拟测试业务地址段
acl "test" {
	172.16.1.10;
};
//模拟生产业务地址段
acl "prod" {
	172.16.1.200;
};
//TSIG-KEY
key "default-key" {
	algorithm hmac-md5;
	secret "MGMtJqmFgFdGU1yh7/FzBQ==";
};
key "test-key" {
	algorithm hmac-md5;
	secret "0huRl0JD1goOvb6/BupIKw==";
};
key "prod-key" {
	algorithm hmac-md5;
	secret "1q8T/d2fNp4Y4sLETWZPBA==";
};
//测试业务view
view "test-project" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key test-key; !172.16.1.91;!172.16.1.92; "test"; };
  //Slave节点与Master节点通讯使用key-test
  server 172.16.1.92 { keys test-key; };
  //允许test-project view区域使用test-key传输区域文件
  allow-transfer { key test-key; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type master;
    file "test/example.com.zone";
  };
};
//生产业务view
view "prod-project" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key prod-key; !172.16.1.91;!172.16.1.92; "prod"; };
  //Slave节点与Master节点通讯使用prod-key
  server 172.16.1.92 { keys prod-key; };
  //允许test-project view区域使用prod-key传输区域文件
  allow-transfer { key prod-key; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type master;
    file "prod/example.com.zone";
  };
};
//默认的view
view "default" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key default-key; !172.16.1.91;!172.16.1.92; any; };
  //Slave节点与Master节点通讯使用default-key
  server 172.16.1.92 { keys default-key; };
  //允许test-project view区域使用default-key传输区域文件
  allow-transfer { key default-key; };
  recursion yes;
  
  zone "." IN {
    type hint;
    file "named.ca";
  };
  
  zone "example.com" {
    type master;
    file "default/example.com.zone";
  };
};
//包含其他文件
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
# 7.4.3 Slave DNS 配置

Slave DNS named.conf 配置(172.16.1.92)

[root@dns-slave ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };
        masterfile-format text;
	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;
	dnssec-enable yes;
	dnssec-validation yes;
	/* Path to ISC DLV key */
	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;
        };
};
//模拟测试业务地址段
acl "test" {
	172.16.1.10;
};
//模拟生产业务地址段
acl "prod" {
	172.16.1.200;
};
//TSIG-KEY
key "default-key" {
	algorithm hmac-md5;
	secret "MGMtJqmFgFdGU1yh7/FzBQ==";
};
key "test-key" {
	algorithm hmac-md5;
	secret "0huRl0JD1goOvb6/BupIKw==";
};
key "prod-key" {
	algorithm hmac-md5;
	secret "1q8T/d2fNp4Y4sLETWZPBA==";
};
//测试业务view
view "test-project" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key test-key; !172.16.1.91;!172.16.1.92; "test"; };
  //Slave节点与Master节点通讯使用key-test
  server 172.16.1.91 { keys test-key; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type slave;
    file "test/example.com.zone";
    masters { 172.16.1.91; };
  };
};
//生产业务view
view "prod-project" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key prod-key; !172.16.1.91;!172.16.1.92; "prod"; };
  //Slave节点与Master节点通讯使用prod-key
  server 172.16.1.91 { keys prod-key; };
  recursion yes;
  zone "." IN {
    type hint;
    file "named.ca";
  };
  zone "example.com" {
    type slave;
    file "prod/example.com.zone";
    masters { 172.16.1.91; };
  };
};
//默认的view
view "default" {
  //须取消两台DNS主机通过地址匹配,使其通过TSIG-KEY匹配,如果不取消会出现拒绝访问
  match-clients { key default-key; !172.16.1.91;!172.16.1.92; any; };
  //Slave节点与Master节点通讯使用default-key
  server 172.16.1.91 { keys default-key; };
  recursion yes;
  
  zone "." IN {
    type hint;
    file "named.ca";
  };
  
  zone "example.com" {
    type slave;
    file "default/example.com.zone";
    masters { 172.16.1.91; };
  };
};
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
# 7.4.4 验证结果
#1. 新建目录并修改权限
[root@dns-slave ~]# mkdir /var/named/test
[root@dns-slave ~]# mkdir /var/named/prod
[root@dns-slave ~]# mkdir /var/named/default
[root@dns-slave ~]# chown named.named /var/named/test
[root@dns-slave ~]# chown named.named /var/named/prod/
[root@dns-slave ~]# chown named.named /var/named/default/
#2. 修改 master 所有区域配置文件序列号并重启 master 和 slave
[root@dns-master ~]# systemctl restart named
[root@dns-slave ~]# systemctl restart named
#3. 检查区域配置文件是否同步
[root@dns-slave ~]# ll /var/named/test/example.com.zone /var/named/default/example.com.zone 
-rw-r--r-- 1 named named 337 Sep 21 19:27 /var/named/default/example.com.zone
-rw-r--r-- 1 named named 337 Sep 21 19:27 /var/named/prod/example.com.zone
-rw-r--r-- 1 named named 337 Sep 21 19:27 /var/named/test/example.com.zone
#4.172.16.1.10 解析结果
[root@client ~]# dig www.example.com @172.16.1.91 +short
1.1.1.1
[root@client ~]# dig www.example.com @172.16.1.92 +short
1.1.1.1
#5.172.16.1.200 解析结果
[root@route ~]# dig www.example.com @172.16.1.91 +short
2.2.2.2
[root@route ~]# dig www.example.com @172.16.1.92 +short
2.2.2.2
#6.172.16.1.7 解析结果
[root@web01 ~]# dig www.example.com @172.16.1.91 +short
2.2.2.2
[root@web01 ~]# dig www.example.com @172.16.1.92 +short
2.2.2.2

修改 master 区域配置文件检查 slave 是否同步成功

[root@dns-master ~]# cat /var/named/default/example.com.zone 
$TTL 600 ; DNS失效时间,单位秒;
example.com. IN SOA ns.example.com. xuy.nf-leasing.com. (
; 区域名称 IN SOA dns.hmallleasing.com. 管理员邮箱
; 区域名称可以使用过@表示,@表示当前域
	2025092059 ; 序列号(serial number) 十进制,不能超过10位,通常使用日期时间戳,例如2018121601
	10800      ; 刷新时间(refresh time) 即每隔多久到主服务器检查一次
	900        ; 重试时间(retry time) 即刷新不成功多久后重试,应该小于refresh time
	604800     ; 过期时间(expire time) 当辅助DNS无法联系主DNS时,辅助DNS在多长时间内认为其缓存是有效的。
	86400      ; 权威应答的ttl(netgative answer ttl) ;缓存DNS服务器可以缓存记录多长时间
)
; 给客户端返回NS记录,example.com. 域名由哪几台权威服务器提供解析
example.com. IN NS ns1.example.com.
; A记录,配置权威域名的真实IP地址;
ns1.example.com. IN A 172.16.1.91
; 真正的域名解析
www.example.com.      	IN     	A  2.2.2.2
bbs.example.com.      	IN     	A  8.8.8.8
[root@dns-slave ~]# cat /var/named/default/example.com.zone 
$ORIGIN .
$TTL 600	; 10 minutes
example.com		IN SOA	ns.example.com. xuy.nf-leasing.com. (
				2025092059 ; serial
				10800      ; refresh (3 hours)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				86400      ; minimum (1 day)
				)
			NS	ns1.example.com.
$ORIGIN example.com.
bbs			A	8.8.8.8
ns1			A	172.16.1.91
www			A	2.2.2.2
[root@web01 ~]# dig bbs.example.com @172.16.1.92 +short
8.8.8.8
此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝