我不是 DNS 或 IPv6 方面的专家,但我正在尝试将我们的 www 网站迁移到新主机。旧主机有 A 和 AAAA 记录,我已更新这些记录(并检查了新主机中是否启用了 ipv6 并做出响应)
现在的情况是,ipv4 ping 和 http 转到新站点,但 ipv6 仍然转到旧站点。
我正在调试这种情况,奇怪的dig our.domain AAAA
是给出了正确的地址并traceroute6 our.domain
立即返回旧的 ipv6
这怎么可能?我应该等待传播吗,还是出了什么问题?浏览器似乎更喜欢 IPv6,所以当不同的协议指向不同的主机时,事情现在有点奇怪
dig
询问 DNS 服务器 – 它是专门为与 DNS 服务器对话而编写的,不用于其他目的。但traceroute
会询问您的操作系统,操作系统可能会从 DNS 服务器以外的许多其他来源获取信息。例如,操作系统可能会查找 /etc/hosts,或使用其内部 DNS 缓存(Linux 可能将 systemd-resolved 或 nscd 作为其 DNS 缓存),或者(在极少数情况下)设置为查询 NIS 或 LDAP。(请参阅文件
/etc/nsswitch.conf
。)当两种工具根据 /etc/resolv.conf 查询 DNS 时,它们可能会以不同的顺序选择 DNS 服务器(第一个还是随机)。例如,如果您的设置是某人将 1.1.1.1 和 8.8.8.8 放入 DNS 设置中,那么将会看到不同的缓存数据。
等待旧缓存数据过期。这是最简单的选择,除非您很着急。如果您仅更改了 AAAA 记录,则之前的AAAA 记录的 TTL 定义了它将保留缓存多长时间(最长)。
如果您切换了整个名称服务器,那么您之前的委派NS 记录的 TTL才是最重要的(通常设置为 2 天)。
查看输出的底部,
dig
看看它查询了哪个服务器。查看您的 resolv.conf 并dig
针对每个服务器分别运行,看看它们是否都返回相同的结果。如果您的 nsswitch.conf 包含该
resolve
模块,则运行resolvectl
以查看其中定义了哪些 DNS 服务器。 也针对它们运行 dig。 还可以使用 resolvectl 刷新本地缓存。