DNS解析原理与配置
DNS(Domain Name System)是互联网的"电话簿",负责将人类可读的域名转换为机器可识别的 IP 地址。理解 DNS 解析流程对排查网络问题、配置 Web 服务至关重要。本文梳理完整的 DNS 解析链路及常用排查工具。
一、DNS解析完整流程
当浏览器访问 www.p2pblaze.com 时,解析流程如下:
- 浏览器缓存:浏览器首先检查自身 DNS 缓存,命中则直接使用。
- 操作系统缓存:浏览器未命中时查询 OS 级缓存(如 nscd、systemd-resolved)。
- 本地 hosts 文件:检查
/etc/hosts是否有静态映射。 - 本地 DNS 服务器:向配置的递归 DNS 服务器(如 8.8.8.8)发起查询。
- 递归查询:递归服务器依次查询根服务器、顶级域服务器、权威服务器。
- 返回结果:权威服务器返回最终 IP,递归服务器缓存结果并返回给客户端。
二、递归查询与迭代查询
DNS 查询分为两种模式:
- 递归查询:客户端向本地 DNS 服务器发起请求,由本地服务器负责完成全部后续查询并返回最终结果。客户端与递归服务器之间是递归查询。
- 迭代查询:递归服务器向根、顶级域、权威服务器查询时,每次得到的是"下一步该问谁"的提示,需要服务器自己逐级追问。递归服务器与上游之间是迭代查询。
三、本地DNS配置
查看当前 DNS 配置:
# 查看解析配置
cat /etc/resolv.conf
# systemd-resolved 状态
resolvectl status
静态配置 DNS(Ubuntu 18.04+)通过 Netplan:
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [p2pblaze.com]
四、记录类型
常见的 DNS 记录类型:
- A:域名指向 IPv4 地址
- AAAA:域名指向 IPv6 地址
- CNAME:将一个域名别名指向另一个域名
- MX:邮件交换记录,指定邮件服务器
- TXT:文本记录,常用于域名所有权验证、SPF、DKIM
- NS:指定由哪些 DNS 服务器解析该域名
- SOA:起始授权机构,记录域的主权威服务器与管理信息
五、dig命令详解
dig 是 DNS 排查最强大的工具:
# 基本查询
dig www.p2pblaze.com
# 指定记录类型
dig MX p2pblaze.com
dig TXT p2pblaze.com
# 指定 DNS 服务器查询
dig @8.8.8.8 www.p2pblaze.com
# 仅显示简要答案
dig +short www.p2pblaze.com
# 追踪完整解析链路
dig +trace www.p2pblaze.com
+trace 输出会从根服务器开始逐级展示解析过程,是理解 DNS 层级结构的最佳工具。
六、排查实战
场景:访问 www.p2pblaze.com 解析异常。排查步骤:
# 1. 检查本地解析是否生效
dig www.p2pblaze.com +short
# 2. 对比不同 DNS 服务器结果
dig @8.8.8.8 www.p2pblaze.com +short
dig @1.1.1.1 www.p2pblaze.com +short
# 3. 检查 NS 记录是否指向正确权威服务器
dig NS p2pblaze.com +short
# 4. 追踪解析链路定位异常层级
dig +trace www.p2pblaze.com
# 5. 检查 hosts 文件是否有错误静态映射
cat /etc/hosts
# 6. 清除本地 DNS 缓存
sudo resolvectl flush-caches
小结
DNS 解析是一个多级缓存的分布式系统,排查问题时遵循"从近到远"原则:先查本地缓存与配置,再查递归服务器,最后查权威服务器。dig 与 nslookup 是日常排错的利器,掌握 +trace 选项能快速定位解析链路故障。