web-dev-qa-db-ja.com

apt-getがIPv6方式を使用することは*できません*

私が働いているISPは、最終的にIPv6インターネットに接続する準備として、内部IPv6ネットワークをセットアップしています。その結果、このネットワーク内のいくつかのサーバーはapt-get updateの実行時にデフォルトでIPv6アドレスを介してsecurity.debian.orgに接続しようとし、その結果、あらゆる種類のアップデートをダウンロードする。

IPv4を優先するか、IPv6を完全に無視するようにaptに指示する方法はありますか?

245
Shadur

追加 -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〜exp1bug 611891 を参照)は、Ubuntu Saucy(リリース2013年10月)およびDebian Jessie(2015年4月にリリース)。

324
mmoya

Gillesによる のように、gai.confを使用します。ノート:

  1. これはAPTよりもはるかに低いレベル(DNSおよびIPネットワーキング)で機能するため、アプリケーションネットワークの方法allを変更します-少なくとも、そのすべてgetaddrinfoを使用します。
  2. gai.confを編集する前に、バックアップし、それを読む必要があります(心配する必要はありません。短いからです)。以下の編集は、おそらく現在のファイルですでに言及されています。現在のファイルが以下で説明されているものとは異なるものを示している場合は、おそらく現在のファイルの内容を優先する必要があります。

しかし、これが(おそらくそうであることが望ましい)必要な場合は、先に進みましょう。 2つのホスト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

ケース1:すべてのホストにIPV4を使用する

次の行を/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アドレスのすべてまたは一部のみに mask/prefix/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を無効にした後、彼のために働きました(そうしないと、永久に停止します)。


以下も参照してください。

84
Lmwangi

すべてのホストのプロキシ/キャッシュとして機能するように、スペアマシンにapt-cacher-ngを設定できます。特定のホストのみを使用するように構成を強制するか、その1台のマシンで@badpによって提案された/ etc/hostsトリックを使用できます。

apt-get install apt-cacher-ng

Apt-cache-ngのセットアップが完了したら、次の行を/ etc/apt/apt.conf.d/90httpproxyに(IPアドレス/ホスト名をキャッシュマシンを指すように変更して)ドロップするだけです。 =

Acquire::http { Proxy "http://[192.168.1.254]:3142"; };

私はその設定を使用して帯域幅の使用量を減らしていますが、問題を回避する必要があります。残念ながら、apt-get自体のipv6ルックアップを直接無効にする方法は知りません。

10
Richm

これを回避するには、ip6応答をドロップするDNSプロキシサーバーを設定します。

5
pjc50

/etc/hostsに行を追加して、関連するアドレスを上書きしてみませんか?例えば。、

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 
4
badp

古いトピックをハイジャックしていますが、最近同じ問題に直面しています。したがって、上記のアドバイスと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

少し異なる方法で問題を解決しました-に(== --- ==)security.debian.orgを含むIPv6ネットワークの優先順位を下げました /etc/gai.conf

# Make IPv6 for security.debian.org undesirable
precedence 2001:8d8:580::/48    5
precedence 2001:a78:5::/48      5

そのため、security.debian.orgを除いて、IPv6が推奨されます。

1
Timur Bakeyev

2014年10月8日の時点で、同じ問題があり、ローカルネットワーク上のプロキシの背後にあるdebianを更新しようとしました。他の人に関連することを期待して、ここに私の返事を投稿します。他の人が述べたように、_/etc/hosts_の編集は注意が必要です。

しかし、個人的には更新を実行したかっただけです。

更新を行うときの/etc/apt/sources.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への追加:

_#Workaround for making apt-get work (08-10-2014)
195.20.242.89 security.debian.org
130.89.148.12 ftp.debian.org
_

現在、_apt-get update ; apt-get upgrade_をrootとして実行するとうまくいきました。

他の回答で述べたように、ドメインでHostコマンドを実行して、正しいipを取得し、hostsファイルに挿入します。

例:

_$ Host ftp.debian.org
ftp.debian.org has address 130.89.148.12
_

これにより、システムが正常にDebian GNU/Linux testing (jessie)に更新されました。テストリポジトリで実行したくない場合は、ソースから削除するだけです。テストリポジトリは、いくつかのパッケージの最新の更新を提供しますが、安定しているとは見なされていません。

1
NordicViking

私はこれを行うより良い方法を見つけました。 sources.listファイルを開き、リポジトリのホスト名を書き留めます。それらのIPv4アドレスを取得し、ホスト名ではなくIPv4アドレスでsources.listを編集します。 Apt-getは、IPv6をバイパスして、指定したIPv4アドレスを介してリポジトリに接続する必要があります。

リポジトリには通常、何らかの方法でロードバランシングやIPジオロケーションが設定されているという欠点がありますが、この方法はもちろんバイパスされます。ただし、ごく少数の人がそれを行っているかどうかは問題ではありません。 1つのミラーが遅いことがわかった場合は、別のレポIPアドレスを取得して(たとえば、オンラインpingサービスを使用して)、それを使用してください。

0
D. Strout