我从 DSL 连接升级到 AT&T Fiber。现在,Ubuntu 22.04 (Jammy) 无法与许多网站建立 http 或 ping 连接。我只是举了一个例子。dig 对所有事情都很好用。所以,DNS 很好。GET google.com 工作正常(其他一些也一样)。GET discover.com 出现“网络不可达”的情况,许多其他情况也是如此。
Chromebook 在同一个路由器上运行良好。Windows 机器在同一个路由器上运行良好。
如果我连接 Ubuntu -> LAN 端 Google 网状路由器,Google 网状路由器 WAN 端口 -> AT&T 光纤路由器,它就可以工作。无论 Google (Nest) 网状路由器在其 NAT 协议中执行什么操作,都可以解决问题。
重新启动并不能解决问题(简单地使用 ip link set enp4s0 down/up 循环 NIC 也不能解决问题)。
Yahoo.com 也可以。大多数网站都坏了。
答案1
你描述的方式,特别是在禁用 IPv6 时它的工作方式,听起来像是与非常古老的对等互联争议提供商之间(这些并不是什么新鲜事,我也没有关注近年来的发展,但我可以想象它们仍然存在)。
我已经发现这解决方法,当然也不是完全修复。基本上,您要找出哪些 IPv6 前缀未被路由到最终目的地(在链接的示例中,这些都是 Cogent 前缀),然后禁用这些前缀的路由,如下所示(从上面的示例中复制):
#!/bin/sh
for prefix in 2001:0550::/32 2001:067c:12e8::/48 2001:0978::/32 2607:9700::/32 2607:f298:000a::/48 2607:f5d8::/32 2610:00f8:2f00::/48 2610:00f8:2fed::/48 2620:009a:8000::/48 2620:00fb::/48 2620:00fb::/56
do
ip -6 route add unreachable $prefix 2>/dev/null
done
exit 0
正确的解决方法(在您确认这确实是问题之后!)当然是向你的提供商投诉并希望这些争议最终能够得到彻底解决。您可以通过运行以下命令来查明问题的确切位置:
mtr -n -6 <ipv6_address>
从您的机器和可以到达该地址的机器(当然您可以省略-n
,但我更喜欢使用数字地址,并且在找出问题所在时,通过查询找出名称whois <ipv6>
)
现在下一个问题是,为什么 Chromebook 和 Windows 可以在同一个路由器上运行。我能想到两种可能性:
- 由于某种原因,他们已经禁用了 IPv6。
- 他们使用不同的 DNS 解析器(来自您的 Fiber 提供商的默认解析器,并且在您的 Ubuntu 机器中您已经设置了一些公共解析器,如 8.8.8.8),它可能被配置为过滤掉它知道您无法访问的 IPv6 路由。(有点牵强,但有可能)。
如果你使用 Google 网状路由器,它起作用的原因应该是类似的,该路由器可能没有设置为给你一个公共 IPv6 地址,所以基本上它会导致你的网络只有一个链接本地 IPv6 地址而无法访问任何公共地址,这使得所有连接都回退到 IPv4。