我在 Fedora 18 上安装了 Google chrome 浏览器。现在,当我尝试使用 更新软件时yum upgrade
,它报告以下错误,并且我无法更新 chrome。
http://dl.google.com/linux/chrome/rpm/stable/x86_64/repodata/repomd.xml: [Errno 14] curl#7 - "Failed to connect to 2404:6800:4005:c00::88: Network is unreachable"
看起来 dl.google.com 已解析为 IPv6 地址,但我不使用 IPv6,并按ping dl.google.com
预期返回 IPv4 地址。
# ping dl.google.com
PING dl.l.google.com (74.125.128.93) 56(84) bytes of data.
可能的原因是什么?我该如何解决这个问题?
答案1
默认情况下,yum 将解析主机/域名的 IPv4 和 IPv6 地址,请参见下面的wireshark屏幕截图(我不懂python程序,因此网络流量捕获是找出yum如何解析主机名的唯一方法)。
要仅解析 IPv4 地址,只需添加ip_resolve=4
或ip_resolve=ipv4
配置yum.conf
(请参阅 参考资料man yum.conf
以获取更多帮助)。对于 Fedora,使用 root 帐户从终端执行以下命令:
echo "ip_resolve=4" >> /etc/yum.conf
要仅解析 IPv6 地址,请将ip_resolve=4
上面更改为ip_resolve=6
。
其他节目
wget
和curl
# To resolve IPv4 address only
wget -4
curl -4
# To resolve IPv6 address only
wget -6
curl -6
host
host
还有-4
和-6
选项,但它们的含义不同 wget 和 curl,它们强制host
使用 IPv4/IPv6 传输来查询主机名。
# To resolve IPv4 address only
host -t A
# To resolve IPv6 address only
host -t AAAA
答案2
= 编辑 =
事实证明yum
曾是正确尝试 ipv4 和 ipv6。 glibc 中的 dns 解析器正确检测到您的计算机没有可路由的 ipv6 地址,因此它首选 ipv4 地址。然而 glibc 仍然返回 ipv6 地址。它只是将 ipv6 地址放在首选项列表的底部。
所以yum
最后尝试了ipv6地址。不幸的是,似乎yum
只显示了最后一个错误。所以yum
只显示了 ipv6 的错误 - 你已经预料到会失败! - 并且没有显示 ipv4 的错误是什么。
= 之前的答案 - 关于这个问题是完全错误的 =
我不知道嗯。该错误听起来像是缺少 Happy Eyeballs 的实现,即回退到 ipv4。那里是一个 IPv6 地址...
$ 主机 dl.google.com dl.google.com 是 dl.l.google.com 的别名。 dl.l.google.com 的地址为 173.194.34.132 ...许多随机排列的地址... dl.l.google.com 的地址为 173.194.34.137 dl.l.google.com 的 IPv6 地址为 2a00:1450:400c:c06::5d
显然,出现问题时有一个解决方法,即编辑 /etc/gai.conf 并取消注释该行precedence ::ffff:0:0/96 100
。这会优先考虑 ipv4 地址。
我认为正常情况下它应该可以工作。您将拥有一个链接本地 ipv6 地址,以及一个站点本地 ipv4 地址(或没有 NAT 的公共地址)。 libc DNS 解析器应该优先选择 ipv4 目的地。 RFC 3484 中对此进行了规定。
我想知道这是否是一个 Teredo 风格的问题。您的路由器(例如 Apple Airport)是否通过不可靠的隧道为您分配了全球 IPV6 地址?我的电脑(没有全局 ipv6)如下所示:
$ ip 地址 |grep inet6 inet6 ::1/128 范围主机 inet6 fe80::215:afff:fe9f:fcd2/64 范围链接
答案3
您可以通过添加来完全禁用 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
/etc/sysctl.d
例如中的文件/etc/sysctl.d/disable-ipv6.conf
。