apt-get update
时,此网络中的多个服务器现在默认尝试通过其IPv6地址连接到security.debian.org,这导致每当我下载任何更新时,都必须等待很长的超时时间。分类。 是否有办法告诉他们更喜欢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版本(请参见bug 611891),自Ubuntu Saucy(于2013年10月发布)和Debian Jessie(于2015年4月发布)可用。 )。评论
将“已接受”移至此;虽然最初的30点答案是完全正确的,但它的适用范围更广,同时提供了仅限制apt-get的选项。
– Shadur
13年11月12日在18:21
请正确描述您的答案。 -o Acquire :: ForceIPv4 = true是命令的新增内容,允许用户使用ipv4
–肯德里克
2014年5月23日在1:42
根据肯德里克的建议更新答案
–mmoya
2014年5月23日在8:02
从我的apt.conf的其余部分来看,您需要这样编写:Acquire :: ForceIPv4“ true”; (带双引号)
– mirabilos
2014年12月13日15:09
@ZAB,因为如果您没有对该文件的写访问权,则sudo echo'test'> file将不起作用,因为使用用户权限执行了重定向
–LeartS
16-09-30在9:54
#2 楼
如Gilles所说,请使用gai.conf
。注意:它在比APT低得多的级别(DNS和IP网络)下工作,因此它将更改您的所有应用程序网络的方式-至少,所有使用
getaddrinfo
的方式。 br />编辑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
将以下行附加到
/etc/gai.conf
:precedence ::ffff:0:0/96 100
保存编辑后的文件(无需重新启动)后,您应该使用IPV4查看联网应用(例如
telnet
):例如,$ 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
在为
security.ubuntu.com
禁用IPV6后为他工作(否则它将永远停滞)。另请参阅: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)
评论
如果上述链接消失了,也许总结一下内容?
– Faheem Mitha
2011年5月16日15:04
那么,针对特定名称或至少针对特定地址(范围)禁用IPv6的语法是什么?如果您将其添加到帖子中,这将是此处的最佳答案。
–吉尔斯'所以-不再是邪恶的'
2011年5月16日16:16
谢谢。我添加了2行#security.debian.org具有IPv6地址2610:148:1f10:3 :: 73 \ n#security.debian.org具有IPv6地址2001:4f8:8:36 :: 6 \ n优先级2001:4f8 :: / 96 100 \ n优先于2610:148 :: / 96 100到我的/etc/gai.conf和apt-get update现在可以正常使用了。
–不要亮
2015年6月1日,0:49
#3 楼
您可以在备用计算机上设置apt-cacher-ng来充当所有主机的代理/缓存。您可以强制配置仅使用特定主机,或在该计算机上使用@badp建议的/ etc / hosts技巧。apt-get install apt-cacher-ng
一旦有了apt-cache -ng设置,您只需要在/etc/apt/apt.conf.d/90httpproxy
Acquire::http { Proxy "http://[192.168.1.254]:3142"; };
我使用该设置来减少带宽使用,但是它可以解决您的问题。不幸的是,我不知道一种直接禁用apt-get本身的ipv6查找的方法。
评论
仍然不是一个完美的解决方案,但可能会达到最佳。谢谢。
– Shadur
2011-3-24在10:49
#4 楼
您可以通过设置丢弃ip6响应的DNS代理服务器来解决此问题。评论
您的本地解析器是否仍会尝试获取AAAA记录?又超时了?
– Mikel
2012年5月15日下午14:32
#5 楼
如何在/etc/hosts
中添加一行以覆盖相关地址?例如,130.89.149.226 ftp.debian.org
195.20.242.89 security.debian.org
评论
如果事实证明绝对没有其他办法,我将把这个解决方案留到最后。我真的不喜欢用我自己不拥有的IP地址弄乱/ etc / hosts。
– Shadur
2011-3-23在11:34
@Shadur是的,我完全明白你的意思了:)
– Badp
2011年3月23日12:49
#6 楼
劫持旧话题,但最近也面临同样的问题。因此,根据上面给出的建议以及host和whois的输出:# host security.debian.org
security.debian.org has address 212.211.132.250
security.debian.org has address 195.20.242.89
security.debian.org has address 212.211.132.32
security.debian.org has IPv6 address 2001:8d8:580:400:6564:a62:0:2
security.debian.org has IPv6 address 2001:a78:5:0:216:35ff:fe7f:be4f
security.debian.org has IPv6 address 2001:a78:5:1:216:35ff:fe7f:6ceb
以稍微不同的方式解决了问题-降低了包含以下内容的IPv6网络的优先级/etc/gai.conf中的security.debian.org:
# Make IPv6 for security.debian.org undesirable
precedence 2001:8d8:580::/48 5
precedence 2001:a78:5::/48 5
因此,除security.debian.org之外,IPv6仍是首选。
#7 楼
截至2014年10月8日,我遇到了同样的问题,试图在本地网络上的代理后面更新debian。希望对其他人有帮助,我在这里发表回应。正如其他人提到的那样,编辑/etc/hosts
是一件应该小心的事情。但是我个人只是想完成更新。 .list进行更新时(在更新之前有所不同。.):
deb http://http.debian.net/debian/ testing main
deb-src http://http.debian.net/debian/ testing main
deb http://mirrors.kernel.org/debian/ wheezy main
deb-src http://mirrors.kernel.org/debian/ wheezy main
deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main
/etc/apt/apt.conf的内容:
Acquire::http::proxy "http://192.168.1.10:7777/";
Acquire::http::Timeout "10";
Acquire::ftp::Timeout "10";
/ etc / hosts的添加: br />如其他答案中所述,请在域上使用host命令运行,以获取正确的ip插入到hosts文件中。
示例: />
成功将系统更新为
apt-get update ; apt-get upgrade
。您可能不希望使用测试存储库,而只是从源中删除它。测试存储库为您提供了多个软件包的最新更新,但不稳定。评论
同样,修改主机文件是次优的解决方案。
– Shadur
17年9月27日在9:07
#8 楼
我发现了一种更好的方法。打开您的sources.list
文件,记下存储库的主机名。获取其IPv4地址,然后使用IPv4地址而不是主机名编辑sources.list
。 Apt-get现在应该绕过IPv6,通过您指定的IPv4地址联系存储库。缺点是存储库通常具有某种负载平衡和/或IP地理位置设置,这种方法当然可以绕开。但是,只有几个人在执行此操作并不重要。如果确实发现一个镜像很慢,请尝试获取另一个回购IP地址(例如,通过使用联机ping服务),然后使用该IP地址。
评论
实际上,由于您已经描述的原因,这是一个非常糟糕的解决方案。
– Shadur
13年4月18日在4:46
#9 楼
如果适合您,可以尝试使用此方法user@ubuntuvm:~$ sudo bash
root@ubuntuvm:~# echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6
->替换您的接口名称
评论
这是与我提出的问题不同的解决方案。
– Shadur
15年7月12日在18:10
评论
那不应该因为路由失败而立即返回吗?不,它们的内部网络完全有可能在多个子网之间路由(并且主机具有IPv6默认网关),但没有与外界的IPv6连接。
可能有一种方法可以设置/etc/gai.conf,以便在AAA记录之前返回security.debian.org的A记录,但是我不知道确切要在该文件中放入什么。
@AndrewMedico-但其网络的默认网关是否不应该知道没有外部ipV6连接并很快拒绝边缘的出站尝试?我认为这里既有网络问题,也有提出的问题。
修复边缘路由器/防火墙/导致问题的所有方法是解决此问题的“最佳”方法。它应该返回一个ICMP目标不可达数据包。这要么没有发生,要么有什么阻止了它。无论哪种方式,问题都应报告给您的网络人员。