Day 8-1:DNS 原理与内网 DNS 部署(Bind)
为什么我们在浏览器输入 magedu.com 就能访问,而不是输入对应的 IP?

| 目标 | 说明 |
|---|---|
| 理解 DNS 解析原理 | 掌握递归/迭代查询、完整解析链、常用记录类型 |
| 使用 DNS 诊断工具 | 熟练使用 dig、nslookup、host 排查 DNS 问题 |
| 部署内网 DNS 服务器 | 安装配置 Bind,管理正向/反向解析区域 |
一、DNS——域名系统
1.1 什么是 DNS?
DNS(Domain Name System,域名系统)。把人类好记的域名(magedu.com)翻译成机器能识别的 IP 地址(43.226.56.46)。

1.2 完整查询链
分布式数据库(缓存 + 权威)。

1.3 递归查询 vs 迭代查询
| 查询类型 | 谁发起 | 谁负责 |
|---|---|---|
| 递归查询 | 客户端 → 递归 DNS | 递归 DNS 帮你查到底 |
| 迭代查询 | 递归 DNS → 各级 DNS | 每层告诉你下一层找谁 |
1.4 DNS 记录类型速查
| 记录类型 | 含义 | 示例 |
|---|---|---|
| A | IPv4 地址 | magedu.com → 43.226.56.46 |
| AAAA | IPv6 地址 | magedu.com → 2001:db8::1 |
| CNAME | 别名 | www.magedu.com → magedu.com |
| MX | 邮件交换 | magedu.com → mail.magedu.com |
| TXT | 文本验证 | 域名所有权验证、SPF 记录 |
| NS | 域名服务器 | 指定该域名的权威 DNS 是谁 |
| PTR | 反向解析 | 192.168.100.10 → magedu.com |
| SOA | 授权起始 | 区域的权威信息(主 DNS、管理员邮箱、序列号等) |
1.5 hosts 文件
hosts 文件是本地静态 DNS 解析表,优先级高于任何 DNS 服务器。

# Linux /etc/hosts(谁用谁就要设置,例如集群中的所有主机)
[root@magedu ~]# vim /etc/hosts
10.10.10.10 master-01.magedu.com
10.10.10.20 master-02.magedu.com
10.10.10.30 master-03.magedu.com
10.10.10.40 node-01.magedu.com
10.10.10.50 node-02.magedu.com
10.10.10.60 node-03.magedu.com
# Windows C:\Windows\System32\drivers\etc\hosts
# Windows DNS 缓存
ipconfig /displaydns
ipconfig /flushdns
1.6 常用 DNS 查询工具
1.6.1 dig:最详细的 DNS 查询工具
# 基本查询
[root@magedu ~]# dig magedu.com A
[root@magedu ~]# dig magedu.com +short
# 指定 DNS 服务器查询
[root@magedu ~]# dig @8.8.8.8 magedu.com +short
# 查询特定记录类型
[root@magedu ~]# dig magedu.com MX +short
[root@magedu ~]# dig magedu.com NS +short
1.6.2 nslookup:简单查询
# 基本查询
[root@yangge ~]# nslookup magedu.com
# 指定 DNS 服务器查询
[root@yangge ~]# nslookup magedu.com 114.114.114.114
[root@yangge ~]# nslookup magedu.com 8.8.8.8
[root@yangge ~]# nslookup magedu.com 139.224.142.121
Server: 139.224.142.121
Address: 139.224.142.121#53
Name: magedu.com
Address: 43.226.56.46
1.6.3 host:简洁输出
# 查询 www 子域名的 A 记录(IPv4 地址)
[root@yangge ~]# host www.magedu.com
www.magedu.com has address 43.226.56.46
# 查询主域名的 A 记录(IPv4 地址)
[root@yangge ~]# host -t A magedu.com
magedu.com has address 43.226.56.46
# 查询 MX 邮件交换记录(邮件服务器)
[root@yangge ~]# host -t MX magedu.com
magedu.com mail is handled by 10 mxbiz2.qq.com.
magedu.com mail is handled by 5 mxbiz1.qq.com.
# 查询 NS 权威域名服务器记录
[root@yangge ~]# host -t NS magedu.com
magedu.com name server dns10.hichina.com.
magedu.com name server dns9.hichina.com.
# 查询 SOA 授权起始记录(区域权威信息)
[root@yangge ~]# host -t SOA magedu.com
magedu.com has SOA record dns9.hichina.com. hostmaster.hichina.com. 2026011209 3600 1200 86400 600
# 指定 DNS 服务器查询
[root@yangge ~]# host magedu.com 114.114.114.114
二、案例实战:部署内网 DNS 服务器
2.1 为什么企业需要自建 DNS?
| 场景 | 说明 |
|---|---|
| 服务发现 | 内网服务器之间用域名通信,而不是硬编码 IP |
| 服务迁移 | 服务迁移时只需要改 DNS 记录,不需要改所有配置文件 |
| 微服务架构 | 微服务之间通过域名互相调用,实现解耦 |
| 内网 HTTPS | 结合私有 CA,实现内网 HTTPS 加密通信 |
| 集中管理 | 所有内网域名解析统一管理,避免分散配置 |
2.2 安装与主配置文件
主环境:Rocky Linux 10。
# Rocky Linux 10:安装 Bind
[root@magedu ~]# dnf install -y bind bind-utils
# 主配置文件 /etc/named.conf
[root@magedu ~]# vim /etc/named.conf
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; }; # 修改为允许所有主机查询
recursion yes;
forwarders { # 转发(可选)
114.114.114.114; # 国内 DNS(主用)
8.8.8.8; # 谷歌 DNS(备用)
};
forward first; # 先查 forwarders,再查根服务器
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
# 根域配置(Root Hint)——指向全球 13 组根服务器,用于递归查询
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
配置参数说明:
| 参数 | 含义 |
|---|---|
| listen-on | 监听哪些 IP 地址的 53 端口 |
| allow-query | 允许哪些客户端查询(any 表示所有) |
| allow-transfer | 允许哪些服务器进行区域传输(安全设置) |
| forwarders | 上游 DNS 服务器(用于解析外部域名) |
| forward first | 先查 forwarders,查不到再查根服务器 |
| recursion yes | 允许递归查询 |
2.3 配置正向解析
2.3.1 正向解析区域声明——magedu.com
[root@magedu ~]# vim /etc/named.rfc1912.zones
zone "magedu.com" IN { # 声明区域 magedu.com
type master; # 类型为 master
file "magedu.com.zone"; # 区域文件 magedu.com.zone
allow-update { none; }; # 禁止更新(可选)
};
2.3.2 正向解析区域文件——magedu.com.zone
[root@magedu ~]# vim /var/named/magedu.com.zone
; 文件名: /var/named/magedu.com.zone
; 域名: magedu.com 正向解析区域文件
$TTL 86400
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2026072801 ; serial(版本号)
3600 ; refresh(从 DNS 服务器刷新间隔)
1800 ; retry(重试间隔)
604800 ; expire(过期时间)
86400 ; minimum TTL
)
@ IN NS ns1.magedu.com. ; DNS 服务器
ns1 IN A 192.168.100.10 ; DNS 服务器
ruoyi IN A 192.168.100.10 ; 若依系统
mysql IN A 192.168.100.20 ; MySQL 数据库
redis IN A 192.168.100.30 ; Redis 缓存
nacos IN A 192.168.100.40 ; Nacos 注册中心
2.3.3 正向解析区域声明——yangge.org
[root@magedu ~]# vim /etc/named.rfc1912.zones
zone "yangge.org" IN { # 声明区域 yangge.org
type master; # 类型 master
file "yangge.org.zone"; # 区域文件 yangge.org.zone
allow-update { none; }; # 禁止更新(可选)
};
2.3.4 正向解析区域文件——yangge.org.zone
[root@magedu ~]# vim /var/named/yangge.org.zone
; 文件名: /var/named/yangge.org.zone
; 域名: yangge.org 正向解析区域文件
$TTL 86400
@ IN SOA ns1.yangge.org. admin.yangge.org. (
2026072801 ; serial(YYYYMMDDNN,每次修改 +1)
3600 ; refresh(从 DNS 刷新间隔)
1800 ; retry(重试间隔)
604800 ; expire(过期时间)
86400 ; minimum TTL
)
@ IN NS ns1.yangge.org. ; DNS 服务器
www IN A 192.168.20.10
ns1 IN A 192.168.20.20 ; DNS 服务器
ruoyi IN A 192.168.20.30 ; 若依系统
mysql IN A 192.168.20.40 ; MySQL 数据库
2.5 配置验证与启动
# 检查配置语法
[root@magedu ~]# named-checkconf /etc/named.conf
# 检查区域文件语法
[root@magedu ~]# named-checkzone magedu.com /var/named/magedu.com.zone
zone magedu.com/IN: loaded serial 2026062201
OK
# 启动服务
[root@magedu ~]# systemctl enable --now named
# 验证 53 端口监听
[root@yangge ~]# netstat -tunlp | grep :53
tcp 0 0 10.0.0.142:53 0.0.0.0:* LISTEN 2227/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2227/named
tcp6 0 0 ::1:53 :::* LISTEN 2227/named
udp 0 0 10.0.0.142:53 0.0.0.0:* 2227/named
udp 0 0 10.0.0.142:53 0.0.0.0:* 2227/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 2227/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 2227/named
udp6 0 0 ::1:53 :::* 2227/named
udp6 0 0 ::1:53 :::* 2227/named
# 测试解析
[root@magedu ~]# dig @127.0.0.1 mysql.magedu.com A
; <<>> DiG 9.18.33 <<>> @127.0.0.1 magedu.com
;; ANSWER SECTION:
mysql.magedu.com. 86400 IN A 192.168.100.20
[root@yangge ~]# dig @127.0.0.1 mysql.magedu.com +short
192.168.100.20
2.6 客户端配置
Windows:网卡图形化添加。
Linux:
[root@tianyun ~]# nmcli conn mod ens160 ipv4.dns "DNS_Server_IP"
验证客户端解析:
# 测试正向解析
[root@tianyun ~]# dig @10.0.0.142 jd.com +short
111.13.149.108
211.144.27.126
106.39.171.134
# 也可以临时使用指定 DNS 测试
[root@tianyun ~]# dig @10.0.0.142 www.magedu.com +short
192.168.100.50
[root@tianyun ~]# dig @10.0.0.142 www.yangge.org +short
192.168.20.10
2.7 Bind 管理命令
# rndc:远程名称守护进程控制工具
[root@magedu ~]# rndc status # 查看状态
[root@magedu ~]# rndc reload # 重新加载配置(修改区域文件后)
# 以下命令为扩展命令
[root@magedu ~]# rndc reload magedu.com # 重新加载特定区域
[root@magedu ~]# rndc flush # 清空 DNS 缓存
[root@magedu ~]# rndc flushname magedu.com # 清空特定域名缓存
[root@magedu ~]# rndc querylog # 开启/关闭查询日志
修改区域文件后执行:
# 1. 修改区域文件
[root@magedu ~]# vim /var/named/magedu.com.zone
# 2. 检查语法
[root@magedu ~]# named-checkzone magedu.com /var/named/magedu.com.zone
# 3. 重新加载配置(不重启服务)
[root@magedu ~]# rndc reload
2.8 防火墙配置
# Rocky Linux 10:放行 DNS 端口
[root@magedu ~]# firewall-cmd --add-service=dns --permanent
[root@magedu ~]# firewall-cmd --reload
[root@yangge ~]# firewall-cmd --list-all
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client dns ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# 或指定端口
[root@magedu ~]# firewall-cmd --add-port=53/tcp --permanent
[root@magedu ~]# firewall-cmd --add-port=53/udp --permanent
[root@magedu ~]# firewall-cmd --reload
三、本章小结
3.1 核心知识点速记
DNS 解析流程:
hosts → 本地缓存 → 递归 DNS → 根域名服务器 → 顶级域名服务器 → 权威域名服务器。
递归 vs 迭代:
- 递归:DNS 帮你查到底(你打 114,接线员帮你查)。
- 迭代:DNS 告诉你下一层找谁(接线员告诉你号码,你自己打)。
记录类型:
A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件)、TXT(验证)。
3.2 常用命令速查
| 操作 | Rocky Linux 10 | Ubuntu 26.04 |
|---|---|---|
| 安装 Bind | dnf install -y bind bind-utils |
apt install -y bind9 bind9-utils |
| 主配置文件 | /etc/named.conf |
/etc/bind/named.conf |
| 区域文件目录 | /var/named/ |
/var/lib/bind/ |
| 检查配置 | named-checkconf /etc/named.conf |
named-checkconf /etc/bind/named.conf |
| 检查区域文件 | named-checkzone 域名 区域文件 |
named-checkzone 域名 区域文件 |
| 启动服务 | systemctl enable --now named |
systemctl enable --now named |
| 重新加载 | rndc reload |
rndc reload |
| 测试解析 | dig @127.0.0.1 magedu.com |
dig @127.0.0.1 magedu.com |
| 防火墙放行 | firewall-cmd --add-service=dns |
ufw allow 53 |
评论