默认情况下,使用 ipv6 的 Curl 不工作

默认情况下,使用 ipv6 的 Curl 不工作

我正在尝试curl ipv6 地址,但没有成功。

如果我尝试说:

卷曲https://google.com

我等待超时并得到network unreachable

如果我强迫ipv4,一切都很好。

卷曲-4https://google.com

然后,如果我强制使用 ipv6,如下所示:

卷曲-6https://google.com

我得到:

卷曲:(7)无法连接到2800:3f0:4001:806 :: 1005:网络无法访问

ipv6我想这与解析地址有关。

我看到在其他具有较新版本的某些 Linux 发行版的计算机上,这些请求运行良好,所以我猜测它必须对我使用 做一些事情Ubuntu 10.10,而这个问题没有得到解决。

我希望能够在不使用选项的情况下正常卷曲:-4,我需要修改什么才能正常使用ipv6地址卷曲?

答案1

解析IPv6地址不是问题。该名称解析工作正常,因为curl 报告它无法到达网络 2800:3f0:4001:806::1005;这说明名字翻译确实成功了。这与名称查找中的错误不同:

 $ curl -6 http://does.not.exist.foo.
 curl: (6) Couldn't resolve host 'does.not.exist.foo.'

为了到达 IPv6 地址,您需要有一条到达目标地址的路由,并且很少有连接具有任何 IPv6 连接。在我写这篇文章的机器上,我几乎没有 v6 路由:

$ route -A inet6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
fe80::/64                      ::                         U    256 0     0 wlan0
ff00::/8                       ::                         U    256 0     0 wlan0

这表示您我知道如何访问我的本地网络,仅此而已。将此与我的 IPv4 路由进行对比

$ route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0

这表明我已经获得了非常关键的路由信息​​。我知道如何通过将数据包传递到位于 192.168.1.1 的默认路由器来到达没有明确路由的任何地方。

您的名称解析工作正常。您确实需要到目标网络的 IPv6 路由,但提供该设施的地方还太少。

答案2

检查ifconfig输出中是否有以 开头的行inet6 addr。您的计算机可能分配了一个实际上不起作用的 IPv6 地址,并且 Linux 现在尝试使用这个不起作用的地址而不是工作的 IPv4 地址。

答案3

我尝试连接到其他网络并且成功。

与此同时,我将操作系统更新为 MINT v15,但问题仍然存在。

实际上,它甚至变得更奇怪,因为我可以curl一次,一切都会好起来,而不是我第二次这样做,它会出现同样的旧错误。

最后我打电话给我的 ISP,他们将我的调制解调器设置为出厂设置并更新了软件。

现在一切似乎都运行良好。

答案4

如果有人像我一样在 Google 上发现了这个问题,为了解决这个问题,我只需调整 IPv6 的防火墙规则即可。

默认情况下,我阻止了传入链上的所有内容 - 在添加规则以允许建立连接后,ping 请求和来自本地主机 IPv6 连接的任何内容都开始工作!

相关内容