如果我将网络设置为仅 IPv6,为什么某些 DNS 地址无法解析?

如果我将网络设置为仅 IPv6,为什么某些 DNS 地址无法解析?

我正在尝试将我的家庭网络移至仅 IPv6。

我第一次尝试关闭 OpenWRT 盒子的 IPv4 WAN 接口。当我这样做时,Google 继续工作,由此我得出结论,我的 ISP 已准备好使用 IPv6,因为它给了我一个 IPv6 地址,并且可以正确解析 Google 和 Apple 的名称。但后来我尝试了我的国家(巴西)的一些其他地址,发现这些网站完全无法访问,包括我自己的 ISP。

我追踪问题,认为是解析这些站点的 IPv6 地址时出现错误。如果我在 IPv6 下 ping 这些站点(或使用 ping6),它们不会解析为 IPv6 地址,我认为这就是问题所在。例如:

$ ping6 www.google.com
PING6(56=40+8+8 bytes) 2804:14d:5c33:1ac6:c971:6205:4a7a:a49 --> 2800:3f0:4004:802::1011

$ ping6 www.serverfault.com
ping6: getaddrinfo -- nodename nor servname provided, or not known

我尝试在 OpenWRT 的 IPv6 接口上设置 Google DNS 的 IPv6 地址,但问题并未解决。现在,我重新打开路由器上的 IPv4 接口,并在 MacBook 上禁用 IPv4 并重复相同的测试,结果相同。

其他网站(如 www.microsoft.com)可以解析 IPv6 地址,但无法正确加载。我猜他们在巴西的 CDN 可能存在问题,无法正确处理 IPv6,所以我无法获取图像和 CSS。

我猜测 IPv4 和 IPv6 世界之间会存在某种“透明网关”,至少可以使互联网方面的一切正常运行,因为 IPv6 发布已经是 3 年前的事了,但看来我猜错了。

有人能重现我的结果吗?由于我所在的公司是受名称解析问题影响的公司之一,那么需要做些什么才能使这些地址在仅 IPv6 配置下工作?

答案1

具有 IPv4 地址的网站不一定能在 IPv6 网络上运行(反之亦然),除非这些网站同时支持 IPv4 和 IPv6。

正如一些评论已经指出的那样,这些网站工作的另一种方式是,如果您的 ISP 自动将 IPv6 请求“映射”到其正确的 IPv4 目的地,反之亦然。

另外,如果主机名具有 IPv6 DNS 记录 (AAAA),但服务器本身不支持 IPv6,则网站仍然无法运行。(为什么有人会为不响应 IPv6 查询的主机名设置 AAAA 记录,这超出了我的理解范围,但我将其作为一个理论示例提出来)。

因此,如果您的家庭网络仅通过 IPv6 运行,并且您的 ISP 不会自动将 IPv6 地址转换为正确的 IPv4 地址,那么您将无法访问仅在 IPv4 上运行的网站。

ServerFault.com 不支持 IPv6。在撰写本文时,这里有一个网页可以检查其他网站是否支持 IPv6:http://ipv6-test.com/validate.php

答案2

使您的场景正常工作所需要的是 DNS64 和 NAT64。

由于您的 ISP 通过其他方式为您提供 IPv4 访问权限,因此他们默认不提供 DNS64 是完全合理的。

DNS64 对于像 Google DNS 这样的服务也没有多大意义。首先,DNS64 违背了 Google 的目标,即提供不以任何方式破坏 DNS 响应的 DNS 服务。

而将 DNS64 纳入服务中意味着 Google 还必须运营其 DNS64 可以指向的 NAT64 服务,这意味着大量额外的带宽使用。大多数用户可能不希望他们到所有仅 IPv4 站点的流量都经过 Google 的网络。这可能会导致大多数此类站点的速度变慢。

有公共 NAT64 网关,公共 DNS64 服务器指向它们。您可以使用其中一个。但我不知道南美洲有哪个。而且在另一个大陆使用 NAT64 会大大降低流量。

您最好查明您的 ISP 是否有 DNS64 服务器和 NAT64 网关,您可以使用它们。即使他们默认不将您送到那里,他们可能仍然有。您只需获取他们的 DNS64 服务器的静态 IPv6 地址,并配置您的路由器以使用这些地址。

或者,如果您的路由器支持,您的路由器可以充当 NAT64 和/或 DNS64。如果您希望路由器充当 NAT64,则需要在 WAN 上运行双栈,在 LAN 上运行仅 IPv6。如果您的路由器在 WAN 接口上有一个公共 IPv4 地址,则这种配置最有意义。

相关内容