我工作的ISP正在建立内部IPv6网络,以准备最终连接到IPv6互联网。结果,运行apt-get update时,此网络中的多个服务器现在默认尝试通过其IPv6地址连接到security.debian.org,这导致每当我下载任何更新时,都必须等待很长的超时时间。分类。

是否有办法告诉他们更喜欢IPv4还是完全忽略IPv6?

评论

那不应该因为路由失败而立即返回吗?

不,它们的内部网络完全有可能在多个子网之间路由(并且主机具有IPv6默认网关),但没有与外界的IPv6连接。

可能有一种方法可以设置/etc/gai.conf,以便在AAA记录之前返回security.debian.org的A记录,但是我不知道确切要在该文件中放入什么。

@AndrewMedico-但其网络的默认网关是否不应该知道没有外部ipV6连接并很快拒绝边缘的出站尝试?我认为这里既有网络问题,也有提出的问题。

修复边缘路由器/防火墙/导致问题的所有方法是解决此问题的“最佳”方法。它应该返回一个ICMP目标不可达数据包。这要么没有发生,要么有什么阻止了它。无论哪种方式,问题都应报告给您的网络人员。

#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::ForceIPv4Acquire::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.netwww.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