DNS 是什么
DNS(Domain Name System,域名系统)是互联网的"电话簿",负责把人类易记的域名(如 www.example.com)翻译成机器使用的 IP 地址(如 93.184.216.34)。
核心价值:
- 免去记忆一长串 IP 数字
- 服务 IP 变更时,域名不变,用户无感知(解耦)
- 支持负载均衡、CDN 调度等高级能力(同一域名返回不同 IP)
DNS 是一个分布式、层级化的数据库系统,不是一台服务器 —— 全球由成千上万的 DNS 服务器协作完成解析。它工作在 UDP/TCP 53 端口(通常 UDP 优先,大报文或区域传送用 TCP)。
域名空间与层级结构
域名采用树形层级结构,从根开始逐级向下:
. ← 根域(root)
|
┌────┼────┐
com net org cn ← 顶级域(TLD,Top-Level Domain)
|
example ← 二级域(注册的域名)
|
www mail blog ← 子域(subdomain,可任意划分)
关键概念:
- FQDN(完全限定域名):从叶子到根的完整域名,如
www.example.com.(末尾有个点表示根)。 - 根域:以
.表示,全球 13 组根服务器(a-m.root-servers.net,实际是任播多实例)。 - 顶级域:通用顶级域(com/net/org)、国家顶级域(cn/jp/uk)等。
- 权威性:谁拥有某域名的权威数据,谁就能"拍板"回答该域名的解析。
域 vs 区的区别:一个域可以再划分为多个"区(zone)"管理,每个区有独立的权威服务器。例如 example.com 域可以拆成 example.com 与 sub.example.com 两个 zone 分别管理。
DNS 记录类型
| 记录类型 | 全称 | 作用 | 示例 |
|---|---|---|---|
| A | Address | 域名 → IPv4 地址 | www IN A 93.184.216.34 |
| AAAA | Address (v6) | 域名 → IPv6 地址 | www IN AAAA 2606:2800:220:1::1 |
| CNAME | Canonical Name | 别名指向另一个域名 | blog IN CNAME www.example.com |
| MX | Mail Exchange | 邮件服务器(带优先级) | IN MX 10 mail.example.com |
| NS | Name Server | 该域名的权威服务器 | example.com IN NS ns1.example.com |
| SOA | Start of Authority | 区数据的起始/主控信息 | 见下方详解 |
| TXT | Text | 任意文本(SPF/DKIM/域名验证) | IN TXT "v=spf1 include:_spf.google.com ~all" |
| SRV | Service | 服务定位(_service._proto) | _sip._tcp IN SRV 10 60 5060 sip.example.com |
| PTR | Pointer | 反向:IP → 域名 | 34.216.184.93.in-addr.arpa IN PTR www.example.com |
| CAA | CA Authorization | 限制可为该域签发证书的 CA | IN CAA 0 issue "letsencrypt.org" |
SOA 记录详解(每个区第一条记录):
example.com. IN SOA ns1.example.com. admin.example.com. (
2026082501 ; Serial 序列号:每次修改必须增大
7200 ; Refresh 从服务器刷新间隔
3600 ; Retry 刷新失败重试间隔
1209600 ; Expire 从服务器数据过期时间
300 ) ; Negative TTL 否定缓存时间
CNAME 注意事项:CNAME 不能与其他记录共存于同一名字(CNAME 目标不能是 CNAME 链环);MX/NS 等记录不能指向 CNAME。
域名解析流程
浏览器输入 www.example.com 后:
用户/浏览器
│ ① 查询缓存(浏览器→操作系统)
▼
本地递归解析器(如运营商 DNS 8.8.8.8、路由器 DNS)
│ ② 递归解析(代表用户一路追问)
├──▶ 根服务器:问 .com 的权威是谁? ← 迭代
├──▶ .com 顶级域服务器:问 example.com 的权威是谁? ← 迭代
├──▶ example.com 权威服务器:www 的 A 记录是什么? ← 迭代
│
▼ ③ 拿到答案,缓存并返回
用户得到 IP,建立连接
两种查询方式:
- 递归查询(Recursive):解析器替客户端"跑腿",客户端只问一次,拿到最终结果。解析器通常开启递归。
- 迭代查询(Iterative):服务器不替客户端跑腿,而是"指路"(告诉你下一步问谁),客户端自己逐级追问。权威服务器只做迭代。
权威 vs 递归:
- 权威服务器(Authoritative):持有自己管理区的真实数据,直接回答;不开递归。
- 递归解析器(Recursive Resolver):替用户递归查询并缓存结果。
DNS 服务器类型
| 类型 | 职责 | 典型部署 |
|---|---|---|
| 根服务器 | 指点顶级域权威 | 全球 13 组(任播) |
| 顶级域服务器 | 管理 TLD 下的注册数据 | Verisign(com/net)等 |
| 权威服务器 | 回答自己 zone 的解析 | 企业自建 BIND、云 DNS(DNSPod/阿里云) |
| 递归解析器 | 替用户递归并缓存 | 运营商 DNS、8.8.8.8、114.114.114.114 |
| 转发器(Forwarder) | 自己不递归,把请求转发给上游 | 内网 DNS、家庭路由器 |
| 缓存服务器 | 只缓存不权威 | 内网加速 |
主从结构:权威区通常有主服务器(Master,可写)与从服务器(Slave,只读副本,通过区域传送同步)—— 保证高可用。
DNS 协议基础
- 传输:默认 UDP 53;响应超过 512 字节(DNS over UDP 上限)时返回 TC 标志,客户端改用 TCP 53 重试;区域传送(AXFR/IXFR)用 TCP。
- 报文结构:固定 12 字节头部(ID、标志、四段计数)+ 问题段 + 回答段 + 授权段 + 附加段。
- 常用标志:QR(查询/响应)、AA(权威回答)、TC(截断)、RD(期望递归)、RA(允许递归)、RCODE(返回码)。
- 返回码(RCODE):-
NOERROR正常-NXDOMAIN域名不存在(负应答)-SERVFAIL服务器故障/无法回答-REFUSED拒绝(策略限制,如不允许递归) - DoH/DoT(DNS over HTTPS/TLS):加密 DNS,防窃听与篡改,BIND 9.18+ 支持 DoT。
TTL 与缓存
TTL(Time To Live):记录被缓存的时间(秒)。每条记录/每个区都有 TTL。
- 作用:减少上游查询压力、加速解析。
- 代价:TTL 太长 → 记录变更后全网生效慢;太短 → 查询频繁。
- 典型值:A 记录 300~86400s;SOA 与 NS 建议 86400(1 天)及以上;变更前先调低 TTL 可加速生效。
- 缓存层级:浏览器 → 操作系统 → 递归解析器,每层都按 TTL 缓存。
- 负缓存:NXDOMAIN 结果也会被缓存(时长由 SOA 的 Negative TTL 控制),这就是"新域名/新记录迟迟查不到"的常见原因。
诊断工具
dig(最强大,BIND 自带)
dig www.example.com # 默认查询 A 记录
dig @8.8.8.8 www.example.com # 指定 DNS 服务器
dig www.example.com +trace # 从根开始逐级追踪
dig example.com SOA # 查 SOA
dig -x 93.184.216.34 # 反向查询
dig www.example.com +short # 只输出结果
dig @ns1.example.com example.com AXFR # 区域传送测试
nslookup(Windows/通用)
nslookup www.example.com
nslookup -type=MX example.com
nslookup -query=NS example.com 8.8.8.8
host(简洁)
host www.example.com
host -t TXT example.com
常见排查套路:
- 本地解析 vs
dig @8.8.8.8:区分是本地缓存/递归问题还是权威问题 +trace:定位是哪一级(根/TLD/权威)出的问题- 对比多个公共 DNS:判断是否全局生效还是局部缓存
- 看 TTL:确认是否还在缓存期
常见问题与排障思路
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 解析返回 NXDOMAIN | 记录未添加/未生效、负缓存 | 查权威服务器记录、清缓存 |
| 解析很慢(首次) | 递归链路长、上游慢 | 检查转发器、开启缓存、缩短链路 |
| 修改记录不生效 | TTL 缓存未过期 | 改前调低 TTL、等 TTL 过期 |
| SERVFAIL | 权威服务器故障、DNSSEC 校验失败 | 查权威状态、dig +dnssec 看校验链 |
| REFUSED | 服务器策略拒绝(递归限制) | 检查 allow-query/allow-recursion 配置 |
| 内网域名解析到外网 IP | 视图(view)/ split-horizon 配置问题 | 检查 BIND view 匹配规则 |
| 部分地区解析异常 | 缓存不一致、主从未同步 | 检查从服务器同步状态、Serial 对比 |
| 被投毒/劫持 | 明文 DNS 被中间人篡改 | 启用 DNSSEC、DoH/DoT、可信上游 |
下一教程:《BIND 服务器详解》—— 从安装配置、zone 文件、日志到安全加固的完整实战。
第 1 / 9 节