VPSKnow

域名 DNS 解析不生效排查指南

初级-中级
24分钟

域名解析问题最容易让人误判:你本地看到没生效,不代表全网没生效;公共 DNS 生效了,也不代表浏览器没有缓存;Cloudflare 开了代理后,看到的 IP 也不再是源站 IP。排查 DNS 要按链路拆开看。

🧭 先理解 DNS 生效链路

一次域名访问大致会经过:域名注册商的 NS 设置、权威 DNS 记录、公共递归 DNS、本地系统缓存、浏览器缓存,最后才到服务器或 CDN。

1
注册商 NS
2
权威 DNS
3
公共 DNS
4
本地缓存

🧩 A、AAAA、CNAME 和根域名限制

  • A 记录:域名指向 IPv4 地址,VPS 建站最常用。
  • AAAA 记录:域名指向 IPv6 地址,如果服务器 IPv6 没配好,可能导致部分网络访问失败。
  • CNAME:域名别名,常用于 www 指向主域或 CDN 域名。
  • 根域名:部分 DNS 平台不允许根域名直接 CNAME,需要使用 ALIAS/ANAME 或 A 记录。

🏛️ 检查权威 DNS 是否正确

权威 DNS 是源头。如果权威 DNS 上记录就是错的,等再久也不会变对。

  # 查询当前系统看到的解析结果
nslookup example.com

# 查询指定公共 DNS
nslookup example.com 1.1.1.1
nslookup example.com 8.8.8.8

# dig 查询 A / AAAA / CNAME
dig example.com A
dig example.com AAAA
dig www.example.com CNAME

# 查询权威 DNS
dig example.com NS
dig @权威DNS服务器 example.com A

🌍 检查公共 DNS 和本地缓存

如果权威 DNS 正确,但 1.1.1.1、8.8.8.8 或本地查询结果不同,通常是 TTL 和缓存传播问题。先确认 TTL,再等待或清缓存。

  # Windows 清理 DNS 缓存
ipconfig /flushdns

# macOS 常见清理方式
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# Linux systemd-resolved
sudo resolvectl flush-caches
resolvectl query example.com

☁️ Cloudflare 代理状态排查

Cloudflare 的橙色云朵开启后,外部查询会看到 Cloudflare IP,而不是你的 VPS IP。这是正常现象。真正要检查的是源站 IP 是否填对、SSL/TLS 模式是否匹配、回源端口是否开放。

如果你只是想验证 DNS 是否指向源站,可以临时关闭代理变成灰色云朵,确认后再开启。生产站点操作前注意缓存和访问影响。

🔌 AAAA 记录导致访问异常

很多“我这里能打开,别人打不开”的问题来自 IPv6。浏览器可能优先尝试 AAAA 记录,但服务器 IPv6、防火墙或 Web 服务没有正确配置。

  # 查询 IPv6 记录
dig example.com AAAA

# 测试 IPv4 和 IPv6 访问
curl -4 -I https://example.com
curl -6 -I https://example.com

# 如果 IPv6 未配置完整,先删除 AAAA 记录再测试。

排查清单

  1. 确认注册商 NS 已经指向当前 DNS 平台。
  2. 确认权威 DNS 上 A/CNAME/AAAA 记录正确。
  3. 确认没有旧记录、重复记录或错误的通配符记录。
  4. 确认公共 DNS 查询结果是否已经更新。
  5. 清理本地和浏览器 DNS 缓存。
  6. 如果使用 Cloudflare,确认代理状态和 SSL/TLS 模式。
  7. 如果有 AAAA 记录,确认 IPv6 服务真的可用。

常见问题解答

DNS 修改后多久生效?

取决于 TTL、公共 DNS 缓存和本地缓存。几分钟到数小时都可能,NS 变更通常更慢。

为什么开了 Cloudflare 后查不到我的 VPS IP?

橙色云朵代理开启后外部看到的是 Cloudflare 边缘 IP,这是正常的隐藏源站行为。

CNAME 可以和 A 记录同时存在吗?

同一个主机名通常不应该同时有 CNAME 和其它记录,否则会产生解析冲突。

删除 AAAA 记录会影响网站吗?

如果你没有正确配置 IPv6,删除错误的 AAAA 记录通常能改善访问稳定性;但会让纯 IPv6 用户无法通过 IPv6 访问。