域名解析突然不生效:按本地、DNS 服务器与解析记录三层定位的 6 步
【摘要】 域名突然打不开、ping IP 却通,多半是 DNS 解析链路出了问题。本文按本地、DNS 服务器、解析记录三层定位,给出 6 步排查方法:查 hosts 与 resolv.conf、换 DNS 交叉验证、看 TTL 缓存、核对云解析服务 DNS 记录集、确认权威与域名状态,附验证命令与常见坑。
【摘要】域名昨天还能正常访问,今天突然打不开,换个网络能打开、直接访问服务器 IP 也能通,问题大概率出在 DNS 解析链路上。本文按本地、DNS 服务器、解析记录三层定位,给出 6 步可直接照做的排查方法,附验证命令与常见坑。
一、问题:哪些现象指向 DNS,而不是服务器宕机
先把现象分清楚,少走弯路。如果出现下面几种情况,优先按 DNS 查:
- 浏览器报“找不到服务器 / DNS_PROBE_FINISHED_NXDOMAIN”或“无法解析主机名”,但直接用服务器公网 IP 访问业务是通的。
- 同一个域名,在公司网络打不开,用手机流量却能打开;或者反过来。
- 域名刚改过解析记录(换 IP、换 CNAME、新增子域名),部分用户生效、部分用户仍访问旧地址。
ping 域名失败或解析到一个明显不对的 IP,但ping 服务器 IP正常。
反之,如果域名能解析到正确 IP,但连接超时或报 502/504,那是后端或网络通路的问题,不要在 DNS 上反复折腾。
二、前提:动手前先确认这三点
- 确认域名本身还有效:域名没有过期、没有因实名或违规被暂停解析,注册商状态正常。
- 确认你改的是哪一处解析:华为云云解析服务 DNS 控制台里的公网域名记录集,还是注册商、第三方 DNS 托管。改错地方,查多久都没用。
- 确认你是在哪台机器上测:本机、办公网出口、服务器、客户侧,DNS 结果可能各不相同。把“在哪测、解析到什么、期望是什么”先记下来,后面每一步都对照这张表。
三、分步操作:按本地、DNS 服务器、解析记录三层定位的 6 步
第 1 步:先确认解析结果,再确认网络通不通
在出问题的机器上跑下面两条命令,对照看结果:
ping -c 4 example.com
ping -c 4 1.1.1.1
再用 nslookup 与 dig 看解析细节,确认域名到底解析到了哪个 IP:
nslookup example.com
dig example.com
ping 域名失败、ping 1.1.1.1成功:网络本身是通的,问题在解析。ping 1.1.1.1也失败:先查本地网络、网关与安全组,不要先改 DNS 记录。dig的 ANSWER SECTION 里没有记录,或返回 NXDOMAIN:解析记录本身可能缺失,跳到第 5 步核对记录集。
第 2 步:查本地 hosts 与本机 DNS 配置
本地配置优先级最高,也最容易被忽略。先看这两处:
cat /etc/hosts
cat /etc/resolv.conf
/etc/hosts里如果有一条把example.com写死了旧 IP,改 DNS 记录也不会生效,先删掉或改掉这条。/etc/resolv.conf里看nameserver是谁。如果是公司内网 DNS 或一台已下线的 DNS,先换成可用的公共 DNS 再测,例如:
dig @223.5.5.5 example.com
dig @8.8.8.8 example.com
- Windows 上用
ipconfig /all看 DNS 服务器地址,用ipconfig /displaydns看本机缓存;清除缓存用ipconfig /flushdns。Linux 上 systemd-resolved 环境可用sudo resolvectl flush-caches清缓存。
第 3 步:换一台 DNS 服务器交叉验证
同一台机器、同一个域名,分别问两台不同的 DNS 服务器:
dig @223.5.5.5 example.com
dig @8.8.8.8 example.com
dig @114.114.114.114 example.com
- 三台返回一致、都是错误结果:问题在记录本身或权威 DNS,往第 5 步走。
- 只有某一台返回错误:那台 DNS 的缓存或转发可能有问题,临时改用正常的 DNS 服务器,排查那台 DNS 的转发与缓存配置。
- 顺手测
dig +trace example.com,看解析链路在哪一跳断掉,是根、顶级域还是权威 DNS 没有响应。
第 4 步:看缓存与 TTL,判断是“没生效”还是“配置错了”
刚改过解析记录后不生效,十有八九是 TTL 缓存。看 dig 输出里每条记录的 TTL(剩余秒数),它会倒数递减。
- TTL 还剩 600 秒:各地递归 DNS 最多再缓存 600 秒,等它过期再测,不要反复改记录。
- 每次改记录都把 TTL 设得很长(例如 86400 秒):下次变更要等一天,紧急变更前先把 TTL 临时改小(例如 60 秒),等旧 TTL 过期,改完再调回去。
- 用
curl -v https://example.com看实际走到哪里,确认请求确实发往了dig返回的那个 IP。
第 5 步:到云解析服务 DNS 控制台核对记录集
登录华为云控制台,进入云解析服务 DNS,打开对应的公网域名,逐项核对记录集:
- 记录名是否写对:
www与@(空主机头)是两条不同记录,只配了www.example.com,裸域名example.com依然解析不到。 - 记录类型是否正确:指向 IP 用 A 记录,指向另一个域名用 CNAME;A 记录的值必须是 IP,不能填域名。
- 记录值是否最新:是不是还指向已释放的旧 IP、旧 CNAME。
- 线路与 TTL:有没有误配了仅某线路生效的线路解析;TTL 是不是被设得过大。
- 状态是否正常:域名是否欠费、记录集是否被暂停,内网域名是否关联了正确的 VPC。
改完记录后回到第 1 步,用 dig 重新验证,不要只看控制台页面就认为生效了。
第 6 步:确认权威侧与域名状态
如果多台公共 DNS 都查不到记录,再往上查一层:
dig +trace example.com
whois example.com
whois先确认域名未过期、注册商的 DNS 服务器地址没有被改错。dig +trace看权威 DNS 是否正常响应;权威 DNS 无响应或返回 SERVFAIL,是 DNS 服务商侧的问题,按服务商的工单通道反馈。- 私有域名、内网域名只在关联的 VPC 内生效,在 VPC 外查不到是正常现象,不要把它当成故障去改公网记录。
四、验证:三条命令确认彻底修好
改完后,在原来出问题的机器上按顺序跑一遍,全部通过才算修好:
dig example.com
curl -I https://example.com
ping -c 4 example.com
dig返回的 IP 与控制台记录集完全一致。curl -I能拿到正常的 HTTP 状态码(例如 200 或 301),而不是解析失败。- 换一个网络(例如手机流量)再测一次,确认不是只在本机修好了。
如果只在某一台机器上修好,继续查那台机器的 hosts、缓存与 DNS 配置;如果只在某一个网络修好,继续查那个网络的 DNS 转发。
五、常见坑
- 只配了
www,忘了配@:用户直接输入裸域名访问,解析不到,误以为全站挂了。 - hosts 里写死了旧 IP:改 DNS 记录、清浏览器缓存都没用,因为 hosts 的优先级高于 DNS。
- TTL 设了 86400 秒才改记录:新记录要等一天才在各地生效,紧急变更前务必先降 TTL。
- A 记录里填了域名:A 记录的值只能是 IP,填域名解析不到,应用层也连不上。
- 公网记录与内网记录混在一起:内网域名在 VPC 外查不到是正常的,公网解析不要用内网地址做记录值。
- 只清空浏览器缓存就以为清了 DNS 缓存:浏览器缓存、操作系统缓存、递归 DNS 缓存是三层,各层都要按 TTL 等或按上面的命令清。
六、小结清单
- 先分清现象:能 ping 通 IP、但域名不通,优先查 DNS。
- 定位顺序固定:本地 hosts 与 resolv.conf → 换 DNS 服务器交叉验证 → 看 TTL 缓存 → 控制台核对记录集 → 查权威与域名状态。
- 每次只改一处,改完用
dig验证再做下一步;不要同时改记录、换 DNS、清缓存。 - 变更前先降 TTL,变更后等 TTL 过期,跨网络复测一次才算完成。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)