深色模式
DNS 原理与 dig 排错
摘要:当「网站打不开但 IP 能 ping 通」时,多半是 DNS 问题。本文用
dig把递归解析过程看个清楚,并给出常见排错套路。
适用环境
bash
# 需要 dig(bind-utils / dnsutils)
which dig || sudo apt install dnsutils # Debian/Ubuntu
which dig || sudo yum install bind-utils # RHEL/CentOS1
2
3
2
3
操作步骤
1. 最简解析:只看答案
bash
dig +short www.example.com
# 输出形如:93.184.216.341
2
2
2. 看完整过程(重点)
bash
dig www.example.com1
关注四段:
QUESTION SECTION:你问了什么ANSWER SECTION:得到的记录与 TTLSERVER:实际应答的 DNS 服务器Query time:耗时,慢说明链路或服务器有问题
3. 指定公共 DNS 对比
bash
dig www.example.com @223.5.5.5 # 阿里公共 DNS
dig www.example.com @8.8.8.8 # Google DNS1
2
2
如果指定公共 DNS 能解析、本机默认不能,问题在本地 /etc/resolv.conf 或内网 DNS。
4. 追踪递归全过程
bash
dig +trace www.example.com1
从根(.)→ TLD(com.)→ 权威服务器逐级显示,能精确定位「卡在哪一环」。
5. 查特定记录类型
bash
dig MX example.com +short
dig TXT example.com +short
dig AAAA www.example.com +short # IPv61
2
3
2
3
验证
bash
# 三步健康检查
dig +short example.com @223.5.5.5 # 1. 公共 DNS 能解析?
getent hosts example.com # 2. 系统解析能生效?
ping -c1 $(dig +short example.com @223.5.5.5 | head -1) # 3. 解析出的 IP 通?1
2
3
4
2
3
4
三步全过 = DNS 正常;第 1 步失败 = 域名/解析链问题;第 2 步失败 = 本机解析配置问题;第 3 步失败 = 网络层问题。
常见坑
WARNING
dig 默认不读 /etc/hosts 和 nsswitch.conf,它只问 DNS 服务器。想验证「系统层面能否解析到正确 IP」,请改用 getent hosts 域名。
DANGER
+trace 会向公网根服务器发大量查询,在受限/内网隔离环境可能被安全策略拦截或触发告警,按需使用。