说服 apt-get *not* 使用 IPv6 方法

Sha*_*dur 262 apt ipv6

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

有没有办法告诉 apt 是更喜欢 IPv4 还是完全忽略 IPv6?

mmo*_*oya 344

-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
Run Code Online (Sandbox Code Playgroud)

配置选项Acquire::ForceIPv4Acquire::ForceIPv6已添加到版本0.9.7.9~exp1(参见错误 611891),该版本自 Ubuntu Saucy(2013 年 10 月发布)和 Debian Jessie(2015 年 4 月发布)起可用。

  • 将“已接受”移至此;虽然最初的 30 分答案是完全正确的,但它适用于更广泛的范围,同时提供了*只是*限制 apt-get 的选项。 (7认同)
  • @ZAB 因为如果您没有对文件的写访问权限,`sudo echo 'test' > file` 将不起作用,因为重定向是在用户权限下执行的 (6认同)

Lmw*_*ngi 90

正如吉尔斯所说,使用gai.conf. 笔记:

  1. 这在比 APT 低得多的级别(DNS 和 IP 网络)上工作,因此它将改变您所有应用程序的网络方式——至少,所有使用getaddrinfo.
  2. 在编辑你的 之前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
Run Code Online (Sandbox Code Playgroud)

案例 1:所有主机都首选 IPV4

附加到/etc/gai.conf以下行:

precedence ::ffff:0:0/96  100
Run Code Online (Sandbox Code Playgroud)

保存编辑后的文件(无需重新启动)后,您应该会看到telnet使用 IPV4 的网络应用程序(例如):例如,

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 216.218.186.2...
Run Code Online (Sandbox Code Playgroud)

案例 2:对特定主机更喜欢 IPV6

如果我们只想www.he.net为其网络或它的网络偏爱 IPV6 ,我们可以将其全部或部分 IPV6 地址的掩码/前缀附加到/etc/gai.conf. 例如,以下行:

precedence 2001:470::/32 100
Run Code Online (Sandbox Code Playgroud)

(保存编辑后的文件后)产生

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 2001:470:0:76::2...
^C
Run Code Online (Sandbox Code Playgroud)

案例 3:对特定主机更喜欢 IPV4

如果我们反转掩码,反过来会成立吗?根据@GrueMaster,附加

precedence 2001:470::/96 100
Run Code Online (Sandbox Code Playgroud)

在禁用 IPV6 后为他工作security.ubuntu.com(否则它会永远停止)。


也可以看看:


Ric*_*chm 11

您可以在备用机器上设置apt-cacher-ng作为所有主机的代理/缓存。您可以强制配置只使用特定的主机,或者在一台机器上使用@badp 建议的 /etc/hosts 技巧。

apt-get install apt-cacher-ng
Run Code Online (Sandbox Code Playgroud)

完成 apt-cache-ng 设置后,您只需要在/etc/apt/apt.conf.d/90httpproxy 中删除以下行(更改 IP 地址/主机名以指向您的缓存机器)

Acquire::http { Proxy "http://[192.168.1.254]:3142"; };
Run Code Online (Sandbox Code Playgroud)

我使用该设置来减少带宽使用,但它应该可以解决您的问题。不幸的是,我不知道有什么方法可以直接禁用 apt-get 本身的 ipv6 查找。


bad*_*adp 5

/etc/hosts覆盖相关地址时添加一行如何?例如,

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 
Run Code Online (Sandbox Code Playgroud)

  • 如果事实证明绝对没有其他方法,我会将这个解决方案留到最后;我*真的*不喜欢将`/etc/hosts` 与我自己不拥有的 IP 地址混在一起。 (14认同)

pjc*_*c50 5

您可以通过设置丢弃 ip6 响应的 DNS 代理服务器来解决此问题。