DNS 记录与解析排查
场景
内部系统换 IP 了,域名还指着旧的;或者新域名解析不生效。
前置条件
- 有域名的管理权限
- 知道当前解析值
- 了解 TTL 的影响
配置
常见记录类型:
| 类型 | 用途 | 例子 |
|---|---|---|
| A | 域名 → IPv4 | kb.example.com → 10.0.0.10 |
| AAAA | 域名 → IPv6 | kb.example.com → 2001:db8::10 |
| CNAME | 别名 | www → kb.example.com |
| MX | 邮件 | mail.example.com |
| TXT | 验证 / SPF | v=spf1 ... |
| NS | 委派 | ns1.example.com |
修改流程:先在 DNS 服务商后台改记录,把 TTL 提前调小(比如 300 秒),观察没问题再恢复。
验证
dig +short kb.example.com
dig kb.example.com @8.8.8.8
dig +trace kb.example.com
nslookup kb.example.com
resolvectl query kb.example.com # systemd-resolved
本机解析优先级:
cat /etc/resolv.conf
cat /etc/nsswitch.conf | grep hosts
回滚
改回原来的记录值即可,但要等 TTL 过期。
坑
- TTL 是缓存时间,改了记录不会立刻全网生效,之前调小 TTL 很重要。
- CNAME 不能和 MX/TXT 同时存在于同一记录名上。
- 内网 DNS 和公网 DNS 是两套,改错了地方等于没改。
/etc/hosts优先级高于 DNS,排查时先看。- 解析到 IPv6 优先,但机器没 IPv6 路由,表现是「解析得到却连不上」。
- 域名过期或者实名认证没通过,解析会被停。