我正在尝试curl ipv6 地址,但没有成功。
如果我尝试说:
我等待超时并得到network unreachable
如果我强迫ipv4
,一切都很好。
然后,如果我强制使用 ipv6,如下所示:
我得到:
卷曲:(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 连接的任何内容都开始工作!