我工作的 ISP 正在建立一个内部 IPv6 网络,为最终连接到 IPv6 互联网做好准备。因此,该网络中的几台服务器现在在运行时默认尝试通过其 IPv6 地址连接到 security.debian.org apt-get update
,这导致每当我下载任何类型的更新时都必须等待很长的超时。
有没有办法告诉 apt 是喜欢 IPv4 还是完全忽略 IPv6?
答案1
-o Acquire::ForceIPv4=true
运行时添加apt-get
。
如果你想让设置持久化,只需创建/etc/apt/apt.conf.d/99force-ipv4并放入Acquire::ForceIPv4 "true";
:
echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4
配置选项Acquire::ForceIPv4
并Acquire::ForceIPv6
添加到版本中0.9.7.9~exp1(看错误 611891)从 Ubuntu Saucy(2013 年 10 月发布)和 Debian Jessie(2015 年 4 月发布)开始可用。
答案2
作为吉尔斯 说, 使用gai.conf
。笔记:
- 与 APT 相比,它的工作级别(DNS 和 IP 网络)要低得多,因此它将改变全部您的应用程序网络——至少,所有使用
getaddrinfo
. - 在编辑您的 之前
gai.conf
,您应该备份它,并阅读它(别担心,它很短)。您当前的文件中可能已经提到了以下编辑;如果当前文件指示的内容与下面提到的内容不同,您可能应该更喜欢当前文件中的内容。
但如果这就是您想要的(很可能就是),那么我们就继续吧。假设我们有两个主机www.he.net
并且www.ripe.net
:
$ host www.he.net
www.he.net is an alias for he.net.
he.net has address 216.218.186.2
he.net has IPv6 address 2001:470:0:76::2
$ host www.ripe.net
www.ripe.net has address 193.0.6.139
www.ripe.net has IPv6 address 2001:67c:2e8:22::c100:68b
情况 1:所有主机均首选 IPV4
附加到/etc/gai.conf
以下行:
precedence ::ffff:0:0/96 100
保存编辑的文件后(无需重新启动),您应该看到telnet
使用 IPV4 的网络应用程序(例如 ):例如,
$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 216.218.186.2...
情况 2:特定主机首选 IPV6
如果我们只想为其www.he.net
网络选择 IPV6,我们可以附加一个掩码/前缀将其 IPV6 地址的全部或部分地址更改为/etc/gai.conf
.例如,以下行:
precedence 2001:470::/32 100
(保存编辑后的文件后)产生
$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 2001:470:0:76::2...
^C
情况 3:特定主机首选 IPV4
如果我们反转掩码,情况会反过来吗?根据@GrueMaster,附加
precedence 2001:470::/96 100
禁用 IPV6 后为他工作security.ubuntu.com
(否则它会永远停滞)。
也可以看看:
- http://www.funtoo.org/wiki/IPv6_Networking#Prefer_IPv4_over_IPv6(存档@https://web.archive.org/web/20180905053005/https://www.funtoo.org/IPv6_Networking#Prefer_IPv4_over_IPv6)
- http://www.getipv6.info/index.php/Customer_problems_that_could_occur#GNU.2FLinux(存档@https://web.archive.org/web/20180920175314/https://getipv6.info/display/IPv6/IPv6+Info+Home#GNU.2FLinux)
答案3
你可以设置apt-cacher-ng在备用计算机上充当所有主机的代理/缓存。您可以强制配置仅使用特定主机或在该一台计算机上使用 @badp 建议的 /etc/hosts 技巧。
apt-get install apt-cacher-ng
一旦你安装了 apt-cache-ng,你只需要将以下行(将 IP 地址/主机名更改为指向你的缓存机器)放入/etc/apt/apt.conf.d/90httpproxy
Acquire::http { Proxy "http://[192.168.1.254]:3142"; };
我使用该设置来减少带宽使用,但它应该可以解决您的问题。不幸的是,我不知道直接禁用 apt-get 本身的 ipv6 查找的方法。
答案4
添加一行来/etc/hosts
覆盖相关地址怎么样?例如,
130.89.149.226 ftp.debian.org
195.20.242.89 security.debian.org