DNS改了仍访问旧IP:缓存与解析路径排查
域名记录已经改成新 IP,有的网络仍访问旧服务器,先分清是哪一层还在使用旧值:权威 DNS、当前网络的递归 DNS,还是本机和浏览器。只刷新页面,不能证明 DNS 已更新。
本文以本地 Windows 的 PowerShell 为例,检查的域名可以指向任意系统的服务器。命令中的 www.example.com、example.com、ns1.example.net 和 203.0.113.10 都是示例,必须换成自己的完整域名、DNS 服务器及目标 IP。本文不修改解析记录。
1. 先确认改的是访问中的那个名称
记录浏览器地址栏中的完整域名、修改时间、旧 IP、新 IP 和记录类型。example.com 与 www.example.com 是两条不同的名称;页面跳转到了另一个子域名,也要检查跳转后的名称。
在本地 PowerShell 执行:
nslookup -type=A www.example.com.
nslookup -type=AAAA www.example.com.
nslookup -type=CNAME www.example.com.
末尾的点表示完整域名,避免本地搜索后缀干扰。输出开头的 Server/服务器 和 Address/地址 是本次询问的 DNS 服务器,不是网站 IP;网站答案在后面的名称、地址或别名字段中。
| 结果 | 下一步 |
|---|---|
| A 已是新地址,AAAA 仍指向旧服务器 | 部分客户端可能走 IPv6。核对 IPv6 网站部署与证书,再决定如何调整 AAAA,不能只改 A 后就判定迁移完成。 |
| 同一名称返回新旧两个 A 地址 | 检查是否仍保留旧记录,以及是否有意使用多个后端;不要把每次落到不同地址都当成缓存。 |
| 返回 CNAME | 继续查询别名目标的 A、AAAA。改了别名目标,但目标的最终地址未更新,也会继续访问旧机器。 |
| 使用 CDN、代理解析或按地区返回不同地址 | 返回接入节点地址可能是正常结果,应与当前接入方式比较,不能要求所有访问者都拿到源站 IP。 |
某一种记录没有答案,不代表域名完全不可用,例如只部署 IPv4 的站点可以没有 AAAA。若看到超时、NXDOMAIN 或 SERVFAIL,保留完整错误,不能把它们都解释成“缓存没刷新”。基础填写方式见DNS 记录配置与核验。
2. 对照权威 DNS,确认源头是否已更新
先查询根域名的名称服务器,并与域名注册管理中的 NS、实际 DNS 托管控制台核对:
nslookup -type=NS example.com.
把下面的 ns1.example.net 换成确认后的权威名称服务器,分别询问每一台,不要照抄示例名称:
nslookup -type=A www.example.com. ns1.example.net
nslookup -type=AAAA www.example.com. ns1.example.net
nslookup -type=CNAME www.example.com. ns1.example.net
如果所有权威服务器都还给出旧记录,先检查是否改错托管平台、主机记录或没有保存;反复清本机缓存不会改变源头。若部分权威服务器新、部分旧,检查 DNS 托管侧的同步情况。跨域 CNAME 的最终目标可能不由这台权威服务器负责,看到别名后要继续查目标域名,不能因它未附带最终 IP 就认定记录失效。
NS 查询本身也可能受缓存影响。如果本次还更换了 NS,或子域名单独委派给其他 DNS,请先按更换 NS 与迁移解析教程核对实际委派关系。向错误的权威服务器查询,得不到有效的对照。
3. 权威已更新,当前网络为什么仍是旧值
将第 1 步默认 DNS 的答案与第 2 步权威答案比较。需要查看 TTL 时,可在 PowerShell 查询指定的递归 DNS;把示例 IP 换成第 1 步显示的 DNS 服务器地址:
Resolve-DnsName -Name 'www.example.com.' -Type A -Server '192.0.2.53' -DnsOnly -NoHostsFile
TTL 的单位是秒,表示该条回答的缓存时间信息。不同名称、记录类型和 CNAME 链上的每一段可能有不同 TTL。旧记录已经被缓存后,再把控制台 TTL 调低,不会立即改写各处已有缓存。
若权威是新值、当前递归 DNS 是旧值,记录服务器地址、查询时间、答案和 TTL,稍后向同一服务器复查,并用另一网络作对照。不要连续改回旧 IP、再改新 IP,这会增加判断难度。超过原有缓存时间仍异常时,继续检查委派、分地区解析及解析服务的异常,不能无限等待。
计划迁移时,可提前降低相关记录的 TTL,并留足原 TTL 过期的时间再切换;已经发生的切换不能靠事后调低 TTL 保证立即完成。
4. DNS 查询正确,只有这台电脑仍访问旧站
nslookup 直接查询 DNS 服务器,不等同于浏览器的实际解析过程。先检查 Windows 本机缓存;下面两行只读:
Resolve-DnsName -Name 'www.example.com' -Type A -CacheOnly
Resolve-DnsName -Name 'www.example.com' -Type AAAA -CacheOnly
没有对应缓存时可能返回错误,不能据此判断公网 DNS 故障。确认本机保存了旧值后,在管理员 PowerShell 中执行 Clear-DnsClientCache,再重新打开站点。这只清本机 DNS 客户端缓存,不会清运营商 DNS、路由器或其他设备的缓存。
还应查看 C:\Windows\System32\drivers\etc\hosts 是否曾手动固定该域名的地址。只核对相关行,不要清空整个文件。浏览器的安全 DNS、代理以及应用自身的缓存也可能使用另一条解析路径;先记录这些设置并对照问题发生范围,不要直接重置整机网络。
5. 排除“DNS 已更新,但新站本身还没准备好”
如果新服务器允许你从当前网络直接访问,可用下面的单次请求测试指定 IP,同时保留域名及 HTTPS 证书校验。在已安装 curl 的 Windows 终端执行;使用 curl.exe,避免 PowerShell 中同名别名的差异:
curl.exe --noproxy "*" --resolve "www.example.com:443:203.0.113.10" --connect-timeout 5 --max-time 15 -sS -o NUL -w "ip=%{remote_ip} http=%{http_code} redirect=%{redirect_url}\n" "https://www.example.com/"
把域名和新 IP 同时替换。该命令不修改系统 DNS 或 hosts;--noproxy "*" 让这次请求直连,因此不能代表浏览器经代理时的表现。只测试自己的普通页面,不重复请求下单、支付或其他会产生业务动作的地址。
输出中的 ip 应是指定目标。证书报错、连接失败或 5xx 应继续查新站;301/302 要核对跳转目标;收到 HTTP 响应也不代表所有业务功能正常。源站只允许 CDN 接入时,直连被拒绝可能符合设计,不应为测试而扩大开放范围。
最后从原来出问题的网络重新打开完整域名,检查页面内容、HTTPS 和一次正常业务操作。若新旧服务器仍并行,保留迁移期间的数据核对安排,不能仅凭自己电脑解析到新 IP 就立即删除旧站数据。网站层排查见DNS 正确但网站打不开;反馈问题时附各层查询结果,按日志脱敏指南处理后提交工单。
技术依据:DNS 标准 RFC 1034、Windows DNS 客户端与 nslookup 文档、curl 官方手册。核对日期:2026 年 11 月 4 日。