1.1 DNS 域名解析服务原理
1.1.1 DNS 核心作用与类型
DNS 是分布式层级域名系统,把好记的域名和 IP 互相映射。
- 正向解析:域名 → IP(最常用,如
www.bdqn.com得到 IP) - 反向解析:IP → 域名;多用于邮件反垃圾、审计;反向区域命名格式:
网段倒序.in‑addr.arpa
Zone(区域):DNS 服务器所管辖的域名 / 网段范围,是 DNS 管理最小单元。分正向 zone、反向 zone。
DNS 三种服务器角色
同一台服务器,对不同 zone 可以充当不同角色。
表格
| 角色 | 数据来源 | 核心特点 | 适用场景 |
|---|---|---|---|
| 缓存域名服务器 | 根 / 外部 DNS 查询结果 | 没有自己的区域数据,只缓存查询结果 | 企业内网,加速解析,减少出口流量 |
| 主域名服务器(master 权威) | 管理员手动编辑 zone 文件 | 拥有该区域最高权威,原始数据来源 | 内网 / 公网域名权威解析 |
| 从域名服务器(slave 备份) | 自动从主服务器下载同步 zone 数据 | 不能手动改数据,做热备份,分担查询压力 | 高可用,主故障可接管解析 |
1.1.2 BIND 安装与服务控制
BIND 是工业级 DNS 软件,服务进程名叫
named;DNS 端口:UDP 53(解析查询),TCP 53(主从区域数据传输同步)
表格
| 软件包 | 作用 |
|---|---|
| bind | 主程序、主配置文件 |
| bind‑utils | dig / nslookup / host 测试工具,必装 |
| bind‑chroot | 安全伪根隔离,提升安全 |
安装:
dnf -y install bind bind‑utils bind‑chroot服务操作:
systemctl status named systemctl start named systemctl enable named systemctl restart named # 修改配置后完全重启 systemctl reload named # 重载配置,不中断服务,优先用 reload检查端口:
netstat -anpu | grep named确认 UDP 53 监听。
1.2 构建缓存域名服务器
1.2.1 缓存 DNS 价值
- 缓存查询结果,重复请求直接返回,提升内网解析速度。
- 减少内网机器直接访问公网 DNS,降低出口带宽。
缓存服务器没有自己的域名区域数据。两种查询模式:
- 方式 1:
type hint读取named.ca根服务器文件,迭代查询根 → 顶级域。 - 方式 2:
forwarders {}转发器,直接把请求交给指定公共 DNS,企业内网更推荐,速度更快。
1.2.2 搭建缓存 DNS
主配置文件/etc/named.conf
⚠️ BIND 语法坑:每一行配置结尾分号
;不能丢!注释#或者/* */。
options { listen‑on port 53 {192.168.10.101; }; # listen‑on‑v6 port 53 { ::1; }; # 注释 ipv6 directory "/var/named"; allow‑query { any; }; # 允许哪些客户端来查询 recursion yes; # 缓存服务器必须开启递归查询 dnssec‑validation no; # 测试环境关闭 dnssec # 启用转发器,二选一,启用转发器就可以注释掉下面根 zone forwarders { 114.114.114.114; 202.96.128.86; }; }; 根域 hint;如果配置 forwarders,该段可以注释 zone "." IN { type hint; file "named.ca"; };检查语法(每次改完配置必执行!)
named‑checkconf客户端测试:把网卡 DNS1 指向缓存服务器 IP。
nslookup www.baidu.com # Non‑authoritative answer → 非权威回答,代表结果来自缓存服务器,特征标识1.2.3 缓存 DNS 优化
- 使用国内运营商转发器,替代根 hint,速度更快。
max‑cache‑size 1G;在 options {} 内设置最大缓存占用。- 生产环境打开
dnssec‑validation yes防 DNS 劫持。
1.3 主 / 从域名服务器
主服务器保存原始 zone 数据;从服务器不能手动编辑 zone,自动拉取主服务器数据,实现高可用备份。⚠️主服务器 zone 文件修改记录,SOA 序列号必须增大,否则从服务器不会同步更新!
1.3.1 主域名服务器搭建
- 修改
/etc/named.conf
options { listen‑on port 53 {192.168.10.101; }; directory "/var/named"; allow‑query { any; }; recursion yes; dnssec‑validation no; }; 正向区域 bdqn.com zone "bdqn.com" IN { type master; file "bdqn.com.zone"; allow‑transfer {192.168.10.102; }; # 只允许从服务器 IP 同步数据,安全! }; 反向区域 zone "10.168.192.in‑addr.arpa" IN { type master; file "192.168.10.arpa"; allow‑transfer {192.168.10.102; }; };- 创建正向区域数据文件
/var/named/bdqn.com.zone
zone 文件记录类型汇总 | 记录 | 作用 | |---|---| |SOA | 权威起始,序列号、刷新、重试、过期、否定缓存;改记录序列号要 + 1| |NS | 声明该域的 DNS 服务器 | |MX | 邮件交换,数字越小优先级越高 | |A | 域名 → IPv4| |AAAA | 域名 → IPv6| |CNAME | 别名记录 | |PTR | 反向解析 IP → 域名,只用写 IP 主机位 | |*| 泛域名,匹配所有未定义子域名 |
$TTL 86400 @ IN SOA bdqn.com. admin.bdqn.com. ( 2025020311 ; 序列号,修改 zone 必须递增! 4H ; 刷新间隔(从服务器多久来拉取更新) 30M ; 重试间隔 12H ; 失效时间 1D ) ; 否定缓存 TTL @ IN NS ns1.bdqn.com. @ IN NS ns2.bdqn.com. @ IN MX 10 mail.bdqn.com. ns1 IN A 192.168.10.101 ns2 IN A 192.168.10.102 www IN A 192.168.10.104 mail IN A 192.168.10.105 study IN A 192.168.10.106 IN A 192.168.10.107 ; 泛域名- 反向 zone 文件
/var/named/192.168.10.arpa
$TTL 86400 @ IN SOA bdqn.com. admin.bdqn.com. ( 2025020311 4H 30M 12H 1D ) @ IN NS ns1.bdqn.com. @ IN NS ns2.bdqn.com. 104 IN PTR www.bdqn.com. 105 IN PTR mail.bdqn.com. 106 IN PTR study.bdqn.com. 101 IN PTR ns1.bdqn.com. 102 IN PTR ns2.bdqn.com.- 修改文件属组为
named!named 进程以 named 用户运行,root 创建的文件默认读不到!
chown :named /var/named/bdqn.com.zone /var/named/192.168.10.arpa 语法校验 named‑checkzone bdqn.com /var/named/bdqn.com.zone named‑checkzone 10.168.192.in‑addr.arpa /var/named/192.168.10.arpa named‑checkconf -z
-z参数会同时检查主配置 + 全部 zone 文件,排错强烈推荐。
systemctl restart named
1.3.3 从域名服务器搭建
从服务器不需要手写 zone 数据文件!自动下载,保存目录/var/named/slaves/。从服务器的named.conf配置:
options { listen‑on port 53 {192.168.10.102; }; directory "/var/named"; allow‑query { any; }; recursion yes; dnssec‑validation no; }; zone "bdqn.com" IN { type slave; masters {192.168.10.101; }; # 写主 DNS 的 IP file "slaves/bdqn.com.zone"; }; zone "10.168.192.in‑addr.arpa" IN { type slave; masters {192.168.10.101; }; file "slaves/192.168.10.arpa"; };检查语法,启动 named,查看 slaves 目录是否生成同步下来的 zone 文件。日志看同步:tail -f /var/log/messages,看到transfer completed代表同步成功。
1.3.4 主从高可用关键点
- 主服务器配置
allow‑transfer {从服务器IP;};,拒绝陌生机器扒取全部域名数据。 - 主 zone 修改记录,SOA 序列号数字必须增大,否则从服务器不会同步!
- 测试高可用:停止主服务器
systemctl stop named,客户端填从 DNS,依旧正常解析。 - 从服务器不能手动修改 slaves 下的 zone,重启 named 会被主服务器数据覆盖。
1.4 基于 BIND View 构建智能 DNS
1.4.1 原理
普通 DNS:不管哪个客户端,查询同一个域名返回完全一样 IP。View 视图:根据客户端来源 IP 网段,匹配不同视图,每个视图使用独立 zone 文件,返回不同解析结果。
典型场景:内网用户访问域名返回内网 IP,外网用户访问同一个域名返回公网 IP;南北网就近解析。
⚠️ View 匹配从上往下执行,精确网段写在前面,any 写最后;一旦匹配命中就不再往下匹配。每个 view 里面需要配置 zone,如果需要访问外网域名,view 内部必须带上
hint 根 zone或者 forwarders 转发。
1.4.2 内外网隔离 View 配置示例
options { listen‑on port 53 { any; }; directory "/var/named"; allow‑query { any; }; recursion yes; dnssec‑validation no; }; 内网视图:精确网段放最前面 view "internal" { match‑clients {192.168.10.0/24; }; zone "bdqn.com" IN { type master; file "bdqn.com.zone.internal"; }; zone "." IN { type hint; file "named.ca"; }; }; 外网视图,剩下所有客户端 view "external" { match‑clients { any; }; zone "bdqn.com" IN { type master; file "bdqn.com.zone.external"; }; };分别创建bdqn.com.zone.internal内网 zone 文件、bdqn.com.zone.external外网 zone 文件,两套 zone 记录可以完全不一样。修改属组chown :named,全套语法检查:named‑checkconf -z,重启 named。
1.4.4 View 注意事项
- 匹配顺序:更精确网段写在前面,any 放最后,顺序错直接解析异常。
- 每个 view 内部,如果要访问公网域名,必须配置 hint 根 zone 或者 forwarders 转发。
- 每个 view 拥有独立 zone,互不干扰。
- 不能把 zone 写在 view 外面,全部 zone 必须收纳到对应的 view 大括号里面。
本章总结
- DNS 分为正向解析(域名 → IP)、反向解析(IP → 域名);Zone 区域是 DNS 最小管理单元。服务器角色:缓存 DNS(无 zone)、主 DNS(权威 master)、从 DNS(slave 同步主服务器 zone)。
- BIND 由
named.conf主配置 + zone 区域数据文件组成;配置结束必须执行named‑checkconf -z语法校验,分号;不能丢。 - 缓存 DNS 依靠递归查询,推荐用 forwarders 转发器替代根 hint,适合企业内网加速。
- 主‑从 DNS 高可用:主服务器 zone 修改后SOA 序列号必须递增,从服务器才会同步;主配置
allow‑transfer限制同步来源 IP。 - View 智能 DNS,根据客户端来源 IP 网段匹配不同视图,实现同一域名对不同客户端返回不同 IP;视图从上往下匹配,精确规则写前面;view 内部需要配置根域保证公网域名解析。
高频命令速查表
表格
| 功能 | 命令 |
|---|---|
| named 全套语法检查 | named‑checkconf -z |