DNS域名解析系统-BIND服务

at 2年前  ca DNS  pv 640  by touch  

DNS服务相关概念

什么是DNS

  • DNS:‘Domain Name System’ 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,基于C/S架构,端口号:53/TCP、53/UDP。

BIND是干什么的

  • BIND:提供DNS软件实现DNS域名结构,点击访问官网地址。

DNS域名结构

DNS域名解析系统-BIND服务 DNS 第1张

  • 根域:全球根服务器节点只有 13 个(这是IPv4跟名称服务器,IPv6根域名服务器全球25个,中国1主3从),10个在美国,1个在荷兰,1个在瑞典,1个在日本。

  • 一级域名(顶级域名):

    • 三类:组织域、国家域(.cn、.ca、.tw)、反向域 (.com、.edu、.gov、.int、.arpa)

  • 二级域名(权威域名):baidu.com

  • 三级域名:www.baidu.com

  • 最多可达到127级域名。

DNS工作原理

DNS域名解析系统-BIND服务 DNS 第2张

DNS术语

  • 阿里云有介绍

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

    • 一般情况下,客户机和本地DNS服务器之间属于递归查询。

    • 递归算法:客户端向 LocalDNS(本地DNS)发起域名查询 ——> LocalDNS 不知道域名对应的IP,但他知道谁知道 ——> LocalDNS代为帮客户端去查找 ——> 最后在返回最终结果。

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

    • 一般情况下,LocalDNS 服务器向其他DNS服务器的查询属于迭代查询。

    • 迭代算法:客户端向LocalDNS发起域名查询 ——> LocalDNS不知道域名对应的IP,但它知道谁知道并推荐客户端应该找谁 ——> 客户端自己去找它。

  • DNS缓存:是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。

  • TTL:是告诉本地域名服务器,域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查询的过程。

  • DNSSEC:域名系统安全扩展(DNS Security EXtensions):通过数字签名来保证DNS应答报文的真实性和完整性,可有效防止DNS欺骗和缓存污染等攻击,能够保护用户不被重定向到非预期地址,从而提高用户对互联网的信任。

  • DNS Query Flood Attack:指域名查询攻击,攻击方法是通过操纵大量傀儡机器,发送海量的域名查询请求,当每秒域名查询请求次数超过DNS服务器可承载的能力时,则会造成解析域名超时从而直接影响业务的可用性。

解析方式或类型

  • 正向解析:FQDN(完全域名) ——> IP

  • 反向解析:IP ——> FQDN

注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

DNS服务器的类型

  • 主DNS服务器:管理和维护所负责解析的域内解析库的服务器。

  • 从DNS服务器:从主服务器或从服务器“复制”(区域传输解析库副本。

    • 序列号:解析库版本号,主服务器解析库变化时,其序列递增(人为递增)。

    • 刷新时间间隔:slave(从)服务器从主服务器请求同步解析的时间间隔。

    • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔。

    • 过期时长:从服务器联系不到主服务器时,多久后停止服务。

    • 通知机制:主服务器解析库发生变化时,会主动通知从服务器。

  • 缓存DNS服务器(转发器)

区域传输

  • 完全传输:传送整个解析库

  • 增量传输:传递解析库变化的那部分内容

DNS各种资源记录

  • 区域解析库:由众多资源记录RR(Resource Record) 组成。

  • 记录类型:

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

    • A:将 ‘FQDN’ ——> ‘IPv4’;

    • AAAA:将 ‘FQDN’ ——> ‘IPv6’;

    • PTR:将 ‘IP’ ——> ‘FQDN’;

    • NS:专用于标明当前区域的DNS服务器;

    • CNAME:别名记录;

    • MX:邮件交换器;

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

_dnsauth TXT 20120112000000051qg…

资源记录的定义

name	[TTL]	IN	rr_type		value

注意:

TTL可以 ‘全局继承’($TTL 1D,表示所有记录TTL 为1天);

使用 ‘@’ 符号可用于引用当前区域域名;

同一个名字可以通过多条记录定义不同的值;此时DNS服务器会以轮询方式响应;

同一个值也可能有多个不同定义的名字,通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机。

SOA记录

  • name:当前区域的名字,例如"magedu.org.“,一般写”@";

  • value:由多部分组成。

  • 范例:

magedu.org.	  86400   IN SOA    ns.magedu.org.   nsadmin.magedu.grg.   (
	20220917;   ## 序列号,主服务器数据库内容发生变化时,其版本号递增(手动)。
	2H;			## 刷新时间,从服务器每多久到主服务器检查序列号更新状况。
	10M;		## 重试时间,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔。
	1W;			## 过期时间,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务。
	1D;			## 否定答案的TTL值
	)

注意:

  1. 当前区域的主DNS服务器的FQDN,可以使用当前区域的名字,只是注释功能,可以不需要配置对应的NS记录和A记录,例如:‘ns.magedu.org.’。

  2. 当前区域管理员的邮箱地址,但地址中不能使用 ‘@’ 符号,一般用 ‘.’ 替换,例如:nsadmin.magedu.org。
    4.主从服务区域传输相关定义以及否定的答案的统一的TTL。

NS记录

  • 范例:

magedu.org.	IN	NS	ns1.magedu.org.

注意:

  1. 相邻的两个资源记录的name相同时,后续的可省略。

  2. 对NS记录而言,任何一个 NS 记录后面的服务器名字,都应该在后续有一个A记录。

  3. 一个区域可以有多个NS记录。

A记录

  • 范例:

www.magedu.org.			IN	A	172.25.3.80
www.magedu.org.			IN	A	172.25.3.81$GENERATE 1-254 HOST$	IN	A	1.1.1.1
*.magedu.org.			IN	A	2.2.2.2
magedu.org.				IN	A	3.3.3.3

AAAA记录

  • 范例:

www.magedu.org.			IN	AAAA	IPv6地址
www.magedu.org.			IN	AAAA	IPv6地址$GENERATE 1-254 HOST$	IN	AAAA	IPv6地址
*.magedu.org.			IN	AAAA	IPv6地址
magedu.org.				IN	AAAA	IPv6地址

PTR记录

  • 范例:

    • 网络地址及后缀可以省略,主机地址依然需要反着写。

4.3.2.1.in-addr.arpa.		IN	PTR		 
# 假设网络地址为1.2.3,可简写成:
4							IN	PTR		www.magedu.org.

CNAME别名记录

  • 范例:

www.magedu.org.		IN	CNAME		websrv.mageu.org.

子域授权

  • 每个域的名称服务器都是通过其上级名称服务器在解析库进行授权,类似跟域手授权顶级域(tld)。

  • glue record:粘合记录,父域授权子域的记录。

  • 范例:

.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

BIND服务软件包及配置文件

相关软件包

  • bind:服务器包。

  • bind-utils:客户端包。

  • bind-libs:相关库,安装bind时会依赖此库。

  • bind-chroot:安全包,将dns相关文件放至’/var/named/chroot/'。

BIND包相关文件

  • BIND主程序:/usr/sbin/named。

  • 服务脚本和Unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service。

  • 主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key。

  • 管理工具:/usr/sbin/rndc,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能,连接953/tcp端口。

  • 解析库文件:/var/named/ZONE_NAME.ZONE。

注意:

  1. 一台物理服务器可同时为多个区域提供解析;

  2. 必须要有根区域文件(默认:/var/named/named.ca);

  3. 应该有两个实现(如果包括IPv6会更多) localhost 和本地回环地址的解析库。

主配置文件

  • 全局配置:option {};(注意:自带分号) ;

  • 日志子系统配置:==logging {}; ==;

  • 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone,‘zone “ZONE_NAME” IN {};’;

注意:

  1. 任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上;
    缓存名称服务器的配置:监听外部地址即可。

BIND安装部署

语法检查工具

  • 检查配置文件语法

[root@rocky01 ~]# named-checkconf
  • 解析库文件语法检查

[root@rocky01 ~]# named-checkzone "magedu.org" /var/named/magedu.org.zone

使用DNS测试和管理工具

host命令

  • 命令格式:

host [-t type] name [SERVER]
参数:
name ## 指定查询的zone
SERVER ## 指定哪个查询的DNS服务
-t ## 指定查询类型

  • 范例:

host -t NS magedu.org 172.25.3.82
host 1.2.3.4

nslookup命令

  • 命令格式:

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

dig命令

  • 命令格式:

初次使用

  • 使用yum进行安装并启动服务。

[root@rocky01 ~]# yum -y install bind bind-utils
[root@rocky01 ~]# systemctl start named
[root@rocky01 ~]# systemctl enable named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
  • 启动named 服务后查看端口号

    • 目前named 进程监听在tcp、udp的53/953端口上,并且仅能够本机访问。

## 端口号查看
[root@rocky01 ~]# ss -ntulp | grep named
udp   UNCONN 0      0           127.0.0.1:53         0.0.0.0:*    users:(("named",pid=132306,fd=514),("named",pid=132306,fd=513),("named",pid=132306,fd=512))
udp   UNCONN 0      0               [::1]:53            [::]:*    users:(("named",pid=132306,fd=517),("named",pid=132306,fd=516),("named",pid=132306,fd=515))
tcp   LISTEN 0      10          127.0.0.1:53         0.0.0.0:*    users:(("named",pid=132306,fd=21))                                                         
tcp   LISTEN 0      128         127.0.0.1:953        0.0.0.0:*    users:(("named",pid=132306,fd=23))                                                         
tcp   LISTEN 0      10              [::1]:53            [::]:*    users:(("named",pid=132306,fd=22))                                                         
tcp   LISTEN 0      128             [::1]:953           [::]:*    users:(("named",pid=132306,fd=24))
  • 修改配置文件 ‘/etc/named.conf’ 已实现对外提供服务。

[root@rocky01 ~]# vim /etc/named.conf 
options {
        //listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { localhost; };   ##修改为 'localhost'关键字,此作用是监听本机的所有IP地址,或者注销此行也可,或者在后面追加本机IP地址。
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        //allow-query     { localhost; };
        allow-query     { localhost;172.25.0.0/21; };   ##在后面添加允许哪些客户端查询的网段,或者修改为'any',或者注销此行。......(省略)
  • 实现配置文件生效。

[root@rocky01 ~]# rndc reloadserver reload successful

或者:
[root@rocky01 ~]# systemctl reload named
  • 再次查看监听的端口信息。

[root@rocky01 ~]# ss -ntulp | grep named
udp   UNCONN 0      0         172.25.3.82:53         0.0.0.0:*    users:(("named",pid=132306,fd=520),("named",pid=132306,fd=519),("named",pid=132306,fd=518))
udp   UNCONN 0      0           127.0.0.1:53         0.0.0.0:*    users:(("named",pid=132306,fd=514),("named",pid=132306,fd=513),("named",pid=132306,fd=512))
udp   UNCONN 0      0               [::1]:53            [::]:*    users:(("named",pid=132306,fd=517),("named",pid=132306,fd=516),("named",pid=132306,fd=515))
tcp   LISTEN 0      10        172.25.3.82:53         0.0.0.0:*    users:(("named",pid=132306,fd=26))                                                         
tcp   LISTEN 0      10          127.0.0.1:53         0.0.0.0:*    users:(("named",pid=132306,fd=21))                                                         
tcp   LISTEN 0      128         127.0.0.1:953        0.0.0.0:*    users:(("named",pid=132306,fd=23))                                                         
tcp   LISTEN 0      10              [::1]:53            [::]:*    users:(("named",pid=132306,fd=22))                                                         
tcp   LISTEN 0      128             [::1]:953           [::]:*    users:(("named",pid=132306,fd=24))
  • 使用客户端主机进行解析

    • 在客户端上安装’bind-utils’工具包,将客户端DNS地址指向DNS服务器。

[root@rocky ~]# cat /etc/resolv.conf 
# Generated by NetworkManagernameserver 172.25.3.82
[root@rocky ~]# host www.baidu.comwww.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.39
www.a.shifen.com has address 14.215.177.38

实战:实现DNS正向解析

环境要求

  • 注意:需要关闭防火墙、SELINUX,同步时间。

操作系统IP地址角色类型安装组件
Rocky 8.4172.25.3.83WEB服务器nginx
Rocky 8.4172.25.3.82Master(主)bind、bind-utils
Rocky 8.4172.25.3.80客户端bind-utils

修改bind配置文件

  • 修改/etc/named.conf 主配置文件。

## 此选项在上面已经解释过
[root@rocky01 ~]# vim /etc/named.conf
options {
	//listen-on port 53 { 127.0.0.1; };
	//allow-query     { any; };
  • 修改/etc/named.rfc1912.zones 配置文件(也可以在/etc/named.conf配置文件中修改)。

[root@rocky01 ~]# vim /etc/named.rfc1912.zones
zone "test.local" IN {
        type master;
        file "test.local.zone";};

DNS区域数据库文件

  • 将模板文件拷贝一份进行修改

    • 注意:文件名需要与配置文件中’file’ 指令指定的文件名一致。如果复制没有 ‘-p’ 需要修改权限。

[root@rocky01 ~]# cp -p /var/named/named.localhost /var/named/test.local.zone
[root@rocky01 ~]# vim /var/named/test.local.zone
## 'SOA' 后面的第一个值可以随便定义,第二个值为邮箱地址,若有问题会通过给此邮箱发送邮件。
## 最后面的数值上面'SOA'记录都已解释。
[root@rocky01 ~]# cat /var/named/test.local.zone
$TTL 10M
@	IN SOA	a support.magedu.com. (
					0
					3M
					15M
					1W
					3H )
	NS	master
master	A	172.25.3.82
www	A	172.25.3.83
[root@rocky01 ~]# rndc reloadserver reload successful
  • 检查配置文件和数据库文件格式,并重启服务。

[root@rocky01 ~]# named-checkconf 
[root@rocky01 ~]# named-checkzone test.local /var/named/test.local.zone 
zone test.local/IN: loaded serial 0OK

实现web服务

[root@rocky02 ~]# yum -y install nginx
[root@rocky02 ~]# nginx
[root@rocky02 ~]# echo "hello world" > /usr/share/nginx/html/index.html

在客户端实现测试

  • 测试解析是否正常

    • 需要在客户端上将DNS指向DNS服务器。

[root@rocky01 ~]# host www.test.localwww.test.local has address 172.25.3.83
[root@rocky01 ~]# dig  
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>>  
;; global options: +cmd;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22268
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:
; udp: 1232
; COOKIE: 81f499dac4eddbc7f7c9a60e6325ab06f66e867373dd0560 (good)
;; QUESTION SECTION:; 
;; AUTHORITY SECTION:.			10800	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2022091700 1800 900 604800 86400
;; Query time: 548 msec
;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Sat Sep 17 19:09:58 CST 2022
;; MSG SIZE  rcvd: 146
  • 进行web访问

[root@rocky01 ~]# curl  
hello world

允许动态更新

  • 动态更新:可以通过远程更新区域数据库的资源记录。

  • 实现动态更新,需要在指定的zone语句块中:

allow-update {any;};

  • 范例:

## 修改配置文件[root@rocky01 ~]# vim /etc/named.rfc1912.zones
[root@rocky01 ~]# grep -v '^/' /etc/named.rfc1912.zones  | head
zone "test.local" IN {
	type master;
	file "test.local.zone";
	allow-update {any;};};
## 检查配置文件
[root@rocky01 ~]# named-checkconf
## 重新读取配置文件
[root@rocky01 ~]# rndc reloadserver reload successful
## DNS服务器的数据目录权限。
[root@rocky01 ~]# ls -ld /var/nameddrwxrwx--T 5 root named 150 Sep 17 19:04 /var/named
## 将/var/named目录权限修改为770权限,不然没有权限修改。
[root@rocky01 ~]# chmod 770 /var/named
## 在客户端远程更新zone数据库
[root@rocky ~]# nsupdate> server 172.25.3.82> zone test.local> update add a.test.local 88888 IN A 172.25.3.83> send> quit
## 进行解析测试
[root@rocky ~]# host a.test.locala.test.local has address 172.25.3.83
## 查看zone数据库
### 生成了一个.jnl结尾的文件
[root@rocky01 ~]# ls -l /var/named/test.local.zone.jnl-rw-r--r-- 1 named named  716 Sep 17 19:31 test.local.zone.jnl
### 原数据库被修改。
[root@rocky01 named]# cat test.local.zone
$ORIGIN .
$TTL 600	; 10 minutes
test.local		IN SOA	a.test.local. support.magedu.com. (
				1          ; serial				
				180        ; refresh (3 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.test.local.
$ORIGIN test.local.
$TTL 88888	; 1 day 41 minutes 28 seconds
a			A	172.25.3.83
$TTL 600	; 10 minutes
master			A	172.25.3.82
www			A	172.25.3.83

启用DNS客户端缓存功能

  • 在高并发的场景下,对DNS服务器的查询性能有较高的要求,如果在客户端启用DNS缓存功能,可以大幅减轻DNS服务器的压力,同时也能提高DNS客户端名称解析速度。

CentOS启用DNS客户端缓存

  • CentOS、Rocky默认没有启用DNS客户端缓存,安装nscd(名称服务关村守护进程)包可以支持DNS缓存功能,减少DNS服务器压力,提高DNS查询速度。

## 修改配置文件
[root@rocky01 ~]# vim /etc/named.rfc1912.zones
[root@rocky01 ~]# grep -v '^/' /etc/named.rfc1912.zones  | head
zone "test.local" IN {
	type master;
	file "test.local.zone";
	allow-update {any;};};
## 检查配置文件
[root@rocky01 ~]# named-checkconf
## 重新读取配置文件
[root@rocky01 ~]# rndc reload
server reload successful
## DNS服务器的数据目录权限。
[root@rocky01 ~]# ls -ld /var/named
drwxrwx--T 5 root named 150 Sep 17 19:04 /var/named
## 将/var/named目录权限修改为770权限,不然没有权限修改。
[root@rocky01 ~]# chmod 770 /var/named
## 在客户端远程更新zone数据库
[root@rocky ~]# nsupdate
> server 172.25.3.82
> zone test.local
> update add a.test.local 88888 IN A 172.25.3.83
> send
> quit
## 进行解析测试
[root@rocky ~]# host a.test.locala.test.local has address 172.25.3.83
## 查看zone数据库
### 生成了一个.jnl结尾的文件
[root@rocky01 ~]# ls -l /var/named/test.local.zone.jnl
-rw-r--r-- 1 named named  716 Sep 17 19:31 test.local.zone.jnl
### 原数据库被修改。
[root@rocky01 named]# cat test.local.zone
$ORIGIN .
$TTL 600	; 10 minutes
test.local		IN SOA	a.test.local. support.magedu.com. (
				1          ; serial				180        ; refresh (3 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.test.local.$ORIGIN test.local.
$TTL 88888	; 1 day 41 minutes 28 seconds
a			A	172.25.3.83
$TTL 600	; 10 minutes
master			A	172.25.3.82
www			A	172.25.3.83
  • 先在客户端上解析域名并缓存,在停止DNS服务器查看是否已缓存

[root@rocky ~]# yum -y install nscd
[root@rocky ~]# systemctl enable --now nscd
Created symlink /etc/systemd/system/multi-user.target.wants/nscd.service → /usr/lib/systemd/system/nscd.service.
Created symlink /etc/systemd/system/sockets.target.wants/nscd.socket → /usr/lib/systemd/system/nscd.socket.
## 查看缓存统计信息
[root@rocky ~]# nscd -g

Ubuntu启用DNS客户端缓存

  • Ubuntu默认会启用DNS客户端缓存

## 客户端进行缓存
[root@rocky ~]# ping www.baidu.com 
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=4.56 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=4.36 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=4.52 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=56 time=4.52 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=5 ttl=56 time=4.32 ms
## 停止DNS服务
[root@rocky01 named]# systemctl stop named
## 再次到客户端查看,缓存生效
[root@rocky ~]# ping www.baidu.com 
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=56 time=4.38 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=56 time=4.42 ms
[root@rocky ~]# ping www.taobao.com
ping: www.taobao.com: Name or service not known
  • 查看和清空缓存

root@ubuntu20:~# systemd-resolve --statistics
DNSSEC supported by current servers: no

Transactions             
Current Transactions: 0  
  Total Transactions: 543
                         Cache                    
  Current Cache Size: 2  
          Cache Hits: 122
        Cache Misses: 457
                         DNSSEC Verdicts          
              Secure: 0  
            Insecure: 0  
               Bogus: 0  
       Indeterminate: 0  
       
root@ubuntu20:~# systemd-resolve --flush-caches

实现反向解析区域

反向解析配置

  • 区域解析设置写法

    • 网络地址反写.in-addr.arpa. 。

例如:网络地址为:192.168.2.0
在zone文件中表示为:2.168.192.in-addr-arpa.

修改配置文件

  • 修改/etc/named.rfc1912.zones 配置文件,在配置文件最后加入定义反向解析区域文件配置。

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

配置区域解析库

  • 定义区域解析库文件(注意:不需要A记录,以PTR记录为主)。

## 从正向解析区域文件中拷贝一份
[root@rocky01 named]# cp -p test.local.zone 3.25.172.in-addr.arpa.zone
## 修改为一下内容
### 实现172.25.3.83 -> www.test.local、172.25.3.81 -> b.test.local。
[root@rocky01 named]# cat 3.25.172.in-addr.arpa.zone 
$TTL 600	; 10 minutes
@		IN SOA	a support.magedu.com. (
				1          ; serial				180        ; refresh (3 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.test.local.    ##NS记录必须以点结束,否则配置A记录才可以启动
			83		IN	PTR	www.test.local.
			81		IN	PTR	b.test.local.
  • 修改完成后检查配置文件和区域数据库文件,然后重新加载配置

[root@rocky01 named]# named-checkconf 
[root@rocky01 named]# named-checkzone 3.25.172.in-addr.arpa. /var/named/3.25.172.in-addr.arpa.zone 
zone 3.25.172.in-addr.arpa/IN: loaded serial 1
OK
[root@rocky01 named]# rndc reload
server reload successful
  • 在客户端进行反向解析验证

    • dig命令

[root@rocky ~]# dig -t ptr 83.3.25.172.in-addr.arpa. @172.25.3.82
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> -t ptr 83.3.25.172.in-addr.arpa. @172.25.3.82
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30979
;; flags: qr aa rd ra
; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:
; udp: 1232; COOKIE: 4498d124a634674a1d38836863269518a9e3df92fd286ef3 (good)
;; QUESTION SECTION:
;83.3.25.172.in-addr.arpa.	IN	PTR
;; ANSWER SECTION:83.3.25.172.in-addr.arpa. 600	IN	PTR	 
;; AUTHORITY SECTION:3.25.172.in-addr.arpa.	600	IN	NS	master.test.local.
;; ADDITIONAL SECTION:
master.test.local.	600	IN	A	172.25.3.82
;; Query time: 4 msec
;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Sun Sep 18 11:48:40 CST 2022
;; MSG SIZE  rcvd: 146
[root@rocky ~]# dig -x 172.25.3.83 
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> -x 172.25.3.83
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16244
;; flags: qr aa rd ra
; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:
; udp: 1232
; COOKIE: b9444a51944c7207ea659182632695947d2abca03baef596 (good)
;; QUESTION SECTION:;83.3.25.172.in-addr.arpa.	IN	PTR
;; ANSWER SECTION:83.3.25.172.in-addr.arpa. 600	IN	PTR	 
;; AUTHORITY SECTION:3.25.172.in-addr.arpa.	600	IN	NS	master.test.local.
;; ADDITIONAL SECTION:
master.test.local.	600	IN	A	172.25.3.82
;; Query time: 1 msec;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Sun Sep 18 11:50:44 CST 2022
;; MSG SIZE  rcvd: 146
  • host命令

[root@rocky ~]# host 172.25.3.8383.3.25.172.in-addr.arpa domain name pointer www.test.local.
  • nslookup命令

[root@rocky ~]# nslookup 172.25.3.83
83.3.25.172.in-addr.arpa	name =  
[root@rocky ~]# nslookup
> 172.25.3.83
83.3.25.172.in-addr.arpa	name = www.test.local.
> exit

实现从服务器

  • 只有一台主DNS服务器,存在单点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制。

  • 从服务器可以自动和主服务器进行单项的数据同步,从而和主DNS服务器一样也可以对外提供查询服务,但从服务器不提供数据更新服务。

DNS从服务器

  1. 应该为一台独立的名称服务器;

  2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器;

  3. 从服务器只需要定义区域,而无需提供解析库文件;解析库文件应该放置于 ‘/var/named/slaves/’ 目录中;

  4. 主服务器得允许从服务器作区域传送;

  5. 主从服务器时间应该同步,可通过ntp进行;

  6. bind程序的版本应该保持一致,否则,应该从高,主低;

定义从配置文件zone区域

  • 格式:

zone "ZONE_NAME" IN {
	type slave;
	masters { MASTER_IP; };
	file "slaves/ZONE_NAME.zone";}

实现DNS从服务器

环境信息

  • 以下所有主机均关闭防火墙、Selinux,时间是同步状态。

  • bind 版本为:9.11.36-RedHat-9.11.36-3.el8

操作系统主机地址角色安装组件
Rocky 8.6172.25.3.80客户端bind-utils
Rocky 8.6172.25.3.90从DNSbind9、bind9-utils、bind9-libs
Rocky 8.6172.25.3.82主DNSbind9、bind9-utils、bind9-libs
Rocky 8.6172.25.3.83web服务器nginx

主DNS服务器端配置

  • 注销并添加以下配置

    • 注意:‘allow-transfer’ 为安全选项,必须得设置,否则可以直接使用客户端工具拉取区域数据库文件中的内容。

[root@rocky ~]# dig -t axfr test.local
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> -t axfr test.local
;; global options: +cmd
test.local. 600 IN SOA a.test.local. support.magedu.com. 3 180 900 604800 10800
test.local. 600 IN NS master.test.local.
test.local. 600 IN NS slave.test.local.
a.test.local. 600 IN A 172.25.3.83
master.test.local. 600 IN A 172.25.3.82
slave.test.local. 600 IN A 172.25.3.90
www.test.local. 600 IN A 172.25.3.83
test.local. 600 IN SOA a.test.local. support.magedu.com. 3 180 900 604800 10800
;; Query time: 1 msec
;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Sun Sep 18 16:58:46 CST 2022
;; XFR size: 8 records (messages 1, bytes 268)
options {
        //listen-on port 53 { 127.0.0.1; };
        //listen-on port 53 { localhost; };   ## 注销
        //listen-on-v6 port 53 { ::1; };
        //allow-query     { localhost; };
        //allow-query     { any; };   ## 注销
        allow-transfer { 172.25.3.90; };    ## 添加从服务器的IP地址。
  • 在/etc/named.rfc1912.zones 文件中添加zone段。

zone "test.local" IN {
        type master;
        file "test.local.zone";};
  • 创建区域数据库

## 注意权限
[root@rocky01 named]# cp -p /var/named/named.localhost /var/named/test.local.zone
## 添加NS记录
[root@rocky01 named]# vim test.local.zone
[root@rocky01 named]# cat test.local.zone
$TTL 600	; 10 minutes
@		IN SOA	a support.magedu.com. (
				1          ; serial				180        ; refresh (3 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
		NS	master
		NS	slave      ## 添加从DNS服务器的NS记录
master		A	172.25.3.82
slave		A	172.25.3.90     ##解析NS记录
www		A	172.25.3.83
  • 检查配置文件和区域数据库文件并重新加载服务器

[root@rocky01 named]# named-checkconf 
[root@rocky01 named]# named-checkzone test.local /var/named/test.local.zone
zone test.local/IN: loaded serial 1
OK
[root@rocky01 named]# rndc reload
server reload successful

从DNS服务器配置

  • 安装软件

    • Rocky:yum -y install bind bind-utils

    • Ubuntu:apt -y install bind9 bind9-utils

  • 修改从DNS服务器’/etc/named.conf’配置文件

[root@localhost ~]# vim /etc/named.confoptions {
        //listen-on port 53 { 127.0.0.1; };   ## 注销
        //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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        //allow-query     { localhost; };   ##注销
        allow-transfer { none; };   ##新增,从服务器不允许复制传输。
  • 修改/etc/named.rfc1912.zones 文件,添加如下配置

[root@localhost ~]# vim /etc/named.rfc1912.zoneszone "test.local" IN {
        type slave;    ##类型 从服务器
        masters { 172.25.3.82; };    ##主DNS服务器IP地址
        file "slaves/test.local.slave";};
  • 检查配置文件并启动服务

[root@localhost ~]# named-checkconf 
[root@localhost ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
  • 查看区域数据库文件是否生成

## 此文件为加密文件
[root@localhost ~]# ls /var/named/slaves/ -l
total 4
-rw-r--r-- 1 named 
named 292 Sep 18 15:17 test.local.slave

客户端测试主从DNS服务架构

  • 设置客户端DNS指向,验证主从架构

## 修改后直接验证,注意关掉客户端缓存
[root@rocky ~]# systemctl stop nscd.service
[root@rocky ~]# host www.test.localwww.test.local has address 172.25.3.83
## 停止主DNS服务器,再次解析
[root@rocky01 named]# systemctl stop named
[root@rocky ~]# host  
www.test.local has address 172.25.3.83
[root@rocky ~]# dig  
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>>  
;; global options: +cmd;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1746
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:
; udp: 1232; COOKIE: 7b4009b78287159cec295a7f6326c88e397e8fba34908298 (good)
;; QUESTION SECTION:
; 
;; ANSWER SECTION:
 
;; AUTHORITY SECTION:
test.local.		600	IN	NS	master.test.local.
;; ADDITIONAL SECTION:
master.test.local.	600	IN	A	172.25.3.82
;; Query time: 2 msec
;; SERVER: 172.25.3.90#53(172.25.3.90)   ## 可以看到,解析是从从服务器来的

同步方式

  • 主服务器推送

    • 需要修改SOA后面的序列号,按递增方式增长。

  • 从服务器拉取

主服务器推送配置

  • 修改区域数据库文件

    • 注意:实测-主动推送需要关闭掉动态更新配置,否则修改序列号的值不会进行推送至从服务器。

## 修改后直接验证,注意关掉客户端缓存
[root@rocky ~]# systemctl stop nscd.service
[root@rocky ~]# host  
www.test.local has address 172.25.3.83
## 停止主DNS服务器,再次解析
[root@rocky01 named]# systemctl stop named
[root@rocky ~]# host  
www.test.local has address 172.25.3.83
[root@rocky ~]# dig  
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>>  
;; global options: +cmd;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1746
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:
; udp: 1232; COOKIE: 7b4009b78287159cec295a7f6326c88e397e8fba34908298 (good)
;; QUESTION SECTION:; 
;; ANSWER SECTION:
 
;; AUTHORITY SECTION:
test.local.		600	IN	NS	master.test.local.
;; ADDITIONAL SECTION:
master.test.local.	600	IN	A	172.25.3.82
;; Query time: 2 msec
;; SERVER: 172.25.3.90#53(172.25.3.90)   ## 可以看到,解析是从从服务器来的
  • 检查区域数据库和重读文件

[root@rocky01 named]# named-checkzone test.local test.local.zone
zone test.local/IN: loaded serial 3OK
[root@rocky01 named]# rndc reload
server reload successful

从服务器拉取配置

  • 从服务器拉取配置借助于区域数据库文件中’SOA’ 后面定义的 ‘refresh’ 的值;

  • 实现查看refresh定义的效果。

# 先停止从DNS服务,主要是在主DNS修改序列号会自动推送。
[root@localhost ~]# systemctl stop named
# 修改主DNS服务器的区域数据库文件记录,并更新序列号。
[root@rocky01 named]# cat test.local.zone 
$TTL 600	; 10 minutes
@		IN SOA	a support.magedu.com. (
				6          ; serial				60         ; refresh (3 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
		NS	master
		NS	slave
master		A	172.25.3.82
slave		A	172.25.3.90
www		A	172.25.3.83# 重新加载配置文件已生效。
[root@rocky01 named]# rndc reload
server reload successful
# 重新启动从DNS服务,查看文件是否会变化
[root@localhost ~]# systemctl start named

泛域名解析

  • 实现 ‘<任意>.test.local’ 进行解析。

[root@localhost named]# vim test.local.zone
[root@localhost named]# cat test.local.zone
$TTL 1D
@	IN SOA	master admin.master.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	master
master	A	172.25.3.84
*	A	172.25.3.83
[root@localhost named]# named-checkzone test.local /var/named/test.local.zone 
zone test.local/IN: loaded serial 0
OK
## 在客户端上进行解析[root@rocky ~]# host  
www.test.local has address 172.25.3.83
[root@rocky ~]# host abcd.test.local
abcd.test.local has address 172.25.3.83
  • 实现 ‘test.local’ 进行解析

## 以上面的配置直接进行访问,没有解析到结果
[root@rocky ~]# host test.local
## 修改区域数据库
[root@localhost named]# vim test.local.zone
$TTL 1D
@       IN SOA  master admin.master.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       172.25.3.84
@       A       172.25.3.83## 再次使用客户端访问
[root@rocky ~]# host test.local
test.local has address 172.25.3.83

实现子域

子域委派授权

  • 将子域委派给其他主机管理,实现分布式DNS数据库。

实现DNS父域和子域服务

环境要求

  • 需要准备5台主机

  • 需要提前关闭防火墙、selinux,同步时间。

  • 父域DNS负责解析’magedu.org’,负责解析一台web服务器域名;子域DNS负责解析’shenzhen.magedu.org’,负责解析一台web服务器域名。

操作系统IP地址角色安装组件
Rocky 8.6172.25.3.80客户端bind-utils
Rocky 8.6172.25.3.82DNS父域服务器bind、bind-libs、bind-utils
Rocky 8.6172.25.3.83指定DNS至父域的web服务器nginx
Rocky 8.6172.25.3.84DNS子域服务器bind、bind-libs、bind-utils
Rocky 8.6172.25.3.85指定DNS至子域的web服务器nginx

实现步骤

  • 在父域DNS服务器上实现主’magedu.org’域的主DNS服务;

[root@rocky01 ~]# vim /etc/named.confoptions {
        //listen-on port 53 { 127.0.0.1; };
        //listen-on port 53 { localhost; };
        //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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        //allow-query     { localhost; };    ##注销查询,默认允许所有主机查询。
[root@rocky01 ~]# vim /etc/named.rfc1912.zones
## 新增如下信息
zone "magedu.org" {
        type master;
        file "magedu.org.zone";};
  • 配置父域DNS的区域数据库文件

[root@rocky01 ~]# cp -p /var/named/named.localhost /var/named/magedu.org.zone
[root@rocky01 ~]# vim /var/named/magedu.org.zone
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
shanghai        NS      shanghains
master  A       172.25.3.82
shanghains      A       172.25.3.84
www     A       172.25.3.83
  • 检查区域数据库文件和配置文件是否正确,并重新加载文件

[root@rocky01 ~]# named-checkconf 
[root@rocky01 ~]# named-checkzone magedu.org /var/named/magedu.org.zone zone magedu.org/IN: loaded serial 0OK
[root@rocky01 ~]# rndc reloadserver reload successful
  • 实现子域的DNS服务器

[root@localhost ~]# vim /etc/named.confoptions {
        //listen-on port 53 { 127.0.0.1; };
        //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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        //allow-query     { localhost; };
[root@localhost ~]# vim /etc/named.rfc1912.zoneszone "shanghai.magedu.org" IN {
        type master;
        file "shanghai.magedu.org.zone";};
  • 配置子域DNS的区域数据库文件

[root@localhost ~]# cp -p /var/named/named.localhost /var/named/shanghai.magedu.org.zone
[root@localhost ~]# vim /var/named/shanghai.magedu.org.zone$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       172.25.3.84
www     A       172.25.3.85
  • 检查区域数据库文件和配置文件是否正确,并重新加载文件。

[root@localhost ~]# named-checkconf 
[root@localhost ~]# named-checkzone shanghai.magedu.org /var/named/shanghai.magedu.org.zone zone shanghai.magedu.org/IN: loaded serial 0OK
[root@rocky01 ~]# rndc reloadserver reload successful
  • 在父域和子域的web服务器上安装httpd服务(3.83和3.85服务器)

## 3.83服务器
[root@rocky01 ~]# echo "www.magedu.org" > /usr/share/nginx/html/index.html
## 3.85服务器
[root@rocky01 ~]# echo "www.shanghai.magedu.org" > /usr/share/nginx/html/index.html 
## 启动web服务
[root@localhost ~]# systemctl start nginx
  • 在客户端进行测试

## 将客户端DNS指定到父域DNS和子域DNS
[root@rocky ~]# cat /etc/resolv.conf 
# Generated by NetworkManagernameserver 172.25.3.82
nameserver 172.25.3.84
[root@rocky ~]# curl  
[root@rocky ~]# dig  
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>>  
;; global options: +cmd;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25826
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:
; udp: 1232; COOKIE: 4822d6f9dd8fc12986ee0540632c098a65bb3df272013e2f (good)
;; QUESTION SECTION:; 
;; ANSWER SECTION:
www.shanghai.magedu.org. 86400	IN	A	172.25.3.85
;; AUTHORITY SECTION:
shanghai.magedu.org.	86400	IN	NS	shanghains.magedu.org.
;; ADDITIONAL SECTION:
shanghains.magedu.org.	86400	IN	A	172.25.3.84
;; Query time: 833 msec;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Thu Sep 22 15:06:50 CST 2022
;; MSG SIZE  rcvd: 137
[root@rocky ~]# curl www.shanghai.magedu.orgwww.shanghai.magedu.org

实现DNS转发(缓存)服务器

DNS转发

  • 利用DNS转发,可以将用户的DNS请求转发至指定的DNS服务,而非默认的根DNS服务器,并指定服务器查询的返回结果进行缓存,提高效率。

  • 注意:
    1.被转发的服务器需要能够为请求者做递归,否则转发请求不予进行;
    2.在 ‘/etc/named.conf’ 的全局配置块中,关闭dnssec功能;
    dnssec-enable no;
    dnssec-validation no;

  • 转发方式

    • 全局转发:对非本机所负责解析区域的请求,全转发给定的服务器。

    • 特定区域转发:仅转发对特定区域的请求,比全局转发优先级高。

## 全局转发options {
	forward	first|only;    ##转发模式
	forwarders	{ ip; };   ##转发至哪个DNS};## 特定区域转发zone "ZONE_NAME" IN {
	type	forward;
	forward	first|only;
	forwarders	{ ip; };};
  • 转发模式:

first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
only:先转发至指定DNS服务器,如果无法解析查询请求,则本服务区将不再去根服务器查询

实现DNS转发(缓存)服务器

环境描述

操作系统IP地址角色安装组件
Rocky8.6172.25.3.80客户端bind-utils
Rocky8.6172.25.3.82DNS主服务器bind、bind-libs、bind-utils
Rocky8.6172.25.3.83web服务器nginx
Rocky8.6172.25.3.84DNS缓存服务器bind、bind-libs、bind-utils

实现步骤

  • 实现转发(缓存)DNS服务器。

[root@rocky01 ~]# vim /etc/named.confoptions {
		## 注销以下几行。
        //listen-on port 53 { 127.0.0.1; };
        //listen-on-v6 port 53 { ::1; };
        //allow-query     { localhost; };
        ## 修改一下两行
        dnssec-enable no;    ##关闭DNS安全功能,不能注销,默认值是yes。
        dnssec-validation no;
        
        ##增加以下几行
        forward first;
        forwarders      { 172.25.3.84; };
  • 检查配置文件是否正确并重新加载配置文件。

[root@rocky01 ~]# named-checkconf 
[root@rocky01 ~]# rndc reloadserver reload successful
  • 实现主DNS服务器

[root@localhost ~]# vim /etc/named.confoptions {
		## 注销以下
        //listen-on port 53 { 127.0.0.1; };
        //listen-on-v6 port 53 { ::1; };
        //allow-query     { localhost; };
[root@localhost ~]# vim /etc/named.rfc1912.zoneszone "test.local" IN {
        type master;
        file "test.local.zone";};
  • 配置主DNS服务器区域数据库文件

[root@localhost ~]# cp -p /var/named/named.localhost /var/named/test.local.zone[root@localhost named]# vim test.local.zone$TTL 1D
@       IN SOA  master admin.master.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       172.25.3.84
www     A       172.25.3.83
  • 检查主DNS服务器配置文件和区域配置文件,并重新加载。

[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone test.local /var/named/test.local.zone zone test.local/IN: loaded serial 0OK
[root@localhost named]# rndc reloadserver reload successful
  • 客户端进行转发验证

## 设置客户端DNS指向[root@rocky ~]# cat /etc/resolv.conf
# Generated by NetworkManagernameserver 172.25.3.82
## 验证 
[root@rocky ~]# dig  
; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>>  
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31500
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:
; udp: 1232
; COOKIE: 0f36f9cda5dae884a2707a08632d4b5e3bafbbca4011e432 (good)
;; QUESTION SECTION:; 
;; ANSWER SECTION:
 
;; AUTHORITY SECTION:
test.local.		86400	IN	NS	master.test.local.
;; ADDITIONAL SECTION:
master.test.local.	86400	IN	A	172.25.3.84
;; Query time: 8 msec
;; SERVER: 172.25.3.82#53(172.25.3.82)
;; WHEN: Fri Sep 23 13:59:56 CST 2022
;; MSG SIZE  rcvd: 124
  • 验证 ‘first’ 参数效果。

[root@rocky ~]# host www.baidu.comwww.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.38
www.a.shifen.com has address 14.215.177.39
## 停止主DNS服务器服务,清空DNS缓存服务器的缓存后再次访问互联网。
[root@localhost named]# systemctl stop named
[root@rocky01 ~]# rndc flush
[root@rocky ~]# host  
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.39
www.a.shifen.com has address 14.215.177.38
  • 验证 ‘only’ 参数效果。(启动上面停止的主DNS服务器)

## 修改DNS缓存服务器的参数值
[root@rocky01 ~]# vim /etc/named.confoptions {
        //forward       first;
        forward only;
        forwarders      { 172.25.3.84; };
## 访问互联网
[root@rocky01 ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.38
www.a.shifen.com has address 14.215.177.39
## 停止主DNS服务器,并清除所有DNS缓存
[root@localhost named]# rndc flush
[root@localhost named]# systemctl stop named
## 清除DNS缓存服务器缓存,若客户端启动缓存也需要清理
[root@rocky01 ~]# rndc flush
## 再次访问互联网,可以看到无法进行解析了。
[root@rocky ~]# host  
Host www.baidu.com not found: 2(SERVFAIL)

错误问题

DNS解析错误:

5(REFUSED)

  • 具体报错信息如下

[root@rocky ~]# host www.baidu.com
Host www.baidu.com not found: 5(REFUSED)
  • 解决办法

    • 修改配置文件/etc/named.conf,将’allow-query’ 的值改为 ‘any’ 或者直接注释掉。

options {
	//listen-on port 53 { 127.0.0.1; };
	//listen-on port 53 { localhost; };
	//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";
	secroots-file	"/var/named/data/named.secroots";
	recursing-file	"/var/named/data/named.recursing";
	//allow-query     { localhost; };
	//allow-query     { any; };   ## 注释掉

2(SERVFAIL)

[root@rocky ~]# host www.baidu.com
Host www.baidu.com not found: 2(SERVFAIL)
  • 解决办法

    • 服务器时间不同步导致,同步时间即可正常解析。


版权声明

本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。

 

扫一扫在手机阅读、分享本文

已有0条评论
您是本站第12309名访客 今日有0篇新文章 当前在线 33 人