apt-getがIPv6方式を使用しないように説得する


239

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

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


3
ルーティング障害ですぐに返ってはいけませんか?
pjc50

7
いいえ、内部ネットワークが複数のサブネット間でルーティングを行うことは完全に可能ですが(ホストにはIPv6デフォルトゲートウェイがあります)、外部へのIPv6接続はありません。
アンドリューメディコ

5
セットアップする方法はおそらくあります/etc/gai.confようにsecurity.debian.org、レコードのは、AAAレコードの前に返されますが、私は、そのファイルに置くために何を正確に知りません。
ジル

3
@AndrewMedico-しかし、彼らのネットワークのデフォルトゲートウェイは、外部ipV6接続がないことを認識して、エッジでのアウトバウンド試行をかなり迅速に拒否すべきではありませんか?ここにはネットワークの問題と質問があります。
マイケルコーン

7
エッジルーター/ファイアウォール/問題を引き起こしているものを修正することが、これを処理する「最良の」方法です。それはすべき ICMP宛先到達不能パケットを返送します。これは起こっていないか、何かがそれをブロックしています。いずれにしても、問題はネットワークの人々に報告されるべきです。
マイケルハンプトン14

回答:


319

-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(参照バグ611891を Ubuntuの生意気(2013年10月発売)とDebianジェシー(2015年4月発売)以降で使用可能です)。


7
「受け入れられた」ものをこれに移動します。元の30ポイントの回答は完全に正しいものですが、はるかに広い範囲で適用できますが、これは単に apt-getを制限するオプションを提供します。
シャドゥール

答えを適切に記述してください。-o Acquire :: ForceIPv4 = trueは、ユーザーがipv4を使用できるようにするコマンドへの追加です
ケンドリック

ケンドリックの提案に従って更新された回答
mmoya

1
私の残りの部分から判断すると、apt.conf次のように書く必要があります:(Acquire::ForceIPv4 "true";二重引用符付き)
ミラビロス14

6
@ZABファイルへの書き込みアクセス権を持っていない場合は、ので、sudo echo 'test' > fileリダイレクションはユーザ権限で実行されているため、動作しません
LeartS

81

以下のようジルは言う、使用gai.conf。ノート:

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

しかし、これがあなたが望むものであるなら(おそらくそうです)、先に進みましょう。2つのホストが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

編集したファイルを保存した後(再起動する必要はありません)、telnetIPV4を使用したネットワークアプリ(例:)が表示されます。例:

$ 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(そうでなければ、永久に失速します)。


こちらもご覧ください:


おそらく、上記のリンクが消えた場合にコンテンツを要約しますか?
ファヒムミタ

では、特定の名前、または少なくとも特定のアドレス(範囲)に対してIPv6を無効にする構文は何ですか?これを投稿に追加すると、ここで最良の回答になります。
ジル

ありがとう。#security.debian.org has IPv6 address 2610:148:1f10:3::73 \n #security.debian.org has IPv6 address 2001:4f8:8:36::6 \n precedence 2001:4f8::/96 100 \n precedence 2610:148::/96 100 /etc/gai.confに2行追加しましたが、apt-getの更新は完璧に機能します。
明るい

10

予備のマシンに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ルックアップを直接無効にする方法を知りません。


まだ完璧な解決策ではありませんが、得られる可能性が高いと言えます。ありがとう。
シャドゥール

5

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


あなたの地元のリゾルバーはまだAAAAレコードを取得しようとしませんか?そしてタイムアウト?
ミケル

4

/etc/hosts関連するアドレスを上書きする際に行を追加してはどうですか?例えば、

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 

13
他に方法がないことが判明した場合、このソリューションを最後に保存します。自分が所有していないIPアドレスで散らかるのは本当に好きでありません/etc/hosts
シャドゥール

@Shadurはい、私はあなたのポイントを完全に見ることができます:)
badp

注意:それはIPその後、ホスト名であるように、これらは、裏返しする必要がある
マイク・T

1

古いトピックをハイジャックしましたが、最近同じ問題に直面しました。したがって、上記のアドバイスと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ネットワークの優先度低下にsecurity.debian.org/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

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 upgraderootとして実行するのがうまくいきました。

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

例:

$ host ftp.debian.org
ftp.debian.org has address 130.89.148.12

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


繰り返しhostsますが、ファイルの変更は非常に最適なソリューションです。
シャドゥール

0

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

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


2
実際に、あなたがすでに説明した理由から、それは本当に悪い解決策です。
シャドゥール

-4

あなたのために働くならこれを試すことができます

user@ubuntuvm:~$ sudo bash
root@ubuntuvm:~# echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6 

->インターフェイス名を置き換えます


これは、私が尋ねたのとは異なる質問に対する解決策です。
シャドゥール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.