web-dev-qa-db-ja.com

yumがdl.google.comをIPv6アドレスに解決するのはなぜですか?

Google chromeブラウザをFedora 18にインストールしました。yum upgradeを使用してソフトウェアを更新しようとすると、次のエラーが報告され、chromeを更新できません。

http://dl.google.com/linux/chrome/rpm/stable/x86_64/repodata/repomd.xml: [Errno 14] curl#7 - "Failed to connect to 2404:6800:4005:c00::88: Network is unreachable"

Dl.google.comはIPv6アドレスに解決されるようですが、IPv6を使用していないため、ping dl.google.comは期待どおりにIPv4アドレスを返します。

# ping dl.google.com
PING dl.l.google.com (74.125.128.93) 56(84) bytes of data.

考えられる理由は何ですか、これをどのように修正できますか?

7
LiuYan 刘研

デフォルトでは、yumはホスト/ドメイン名のIPv4アドレスとIPv6アドレスの両方を解決します。以下のWiresharkスクリーンショットを参照してください(pythonプログラムがわからないので、ネットワークトラフィックのキャプチャを見つける唯一の方法ですyumがホスト名を解決する方法を説明します)。

yum resolve IP address, capture

IPv4アドレスのみを解決するには、ip_resolve=4またはip_resolve=ipv4 configをyum.confに追加するだけです(詳細はman yum.confを参照)。 Fedoraの場合、rootアカウントを使用してターミナルから次のコマンドを実行します。

echo "ip_resolve=4" >> /etc/yum.conf

IPv6アドレスのみを解決するには、上記のip_resolve=4ip_resolve=6に変更します。

その他のプログラム

wgetおよびcurl

# To resolve IPv4 address only
wget -4
curl -4

# To resolve IPv6 address only
wget -6
curl -6

Host

Hostには-4および-6オプションもありますが、同じ意味のwgetとcurlはありません。これらはHostにIPv4/IPv6トランスポートを使用してホストをクエリするように強制します名前。

# To resolve IPv4 address only
Host -t A

# To resolve IPv6 address only
Host -t AAAA
10
LiuYan 刘研

=編集=

yumwasは、ipv4とipv6の両方を正しく試行していることがわかります。また、glibcのDNSリゾルバーは、コンピューターにルーティング可能なipv6アドレスがないことを正しく検出したため、ipv4アドレスを優先しました。ただし、glibcは引き続きipv6アドレスを返しました。これは、優先リストの一番下にipv6アドレスを置くだけです。

したがって、yumは最後にipv6アドレスを試しました。残念ながら、yumは最後のエラーのみを表示したようです。したがって、yumはipv6のエラーのみを示しました-すでに失敗すると予想されていました! -そして、ipv4のエラーが何であるかを示しませんでした。

=以前の回答-これは問題について完全に間違っていました=

私はyumについて知りません。エラーには、Happy Eyeballsの実装がない、つまりipv4へのフォールバックがないようです。ありis ipv6アドレス...

$ホストdl.google.com 
 dl.google.comはdl.l.google.comのエイリアスです。
 dl.l.google.comはアドレス173.194.34.132 
 ...多くのランダムに並べ替えられたアドレス... 
 dl.l.google.comはアドレス173.194.34.137を持っています
 dl.l.google.comはIPv6アドレス2a00:1450:400c:c06を持っています:: 5d

どうやらこれがうまくいかない場合の回避策は、/ etc/gai.confを編集してprecedence ::ffff:0:0/96 100行のコメントを外すことです。これにより、ipv4アドレスが優先されます。

私は通常それがうまくいくはずだと思います。リンクローカルipv6アドレスがありますが、サイトローカルipv4アドレス(またはNATなしのパブリックアドレス)です。 libc DNSリゾルバーは、ipv4宛先を優先する必要があります。これはRFC 3484で指定されています。

これはTeredoスタイルの問題なのでしょうか。ルーター(Apple Airport)など)が信頼できないトンネルを介してグローバルIPV6アドレスを割り当てましたか?私のコンピューター(グローバルipv6なし)は次のようになります:

$ ip addr | grep inet6 
 inet6 :: 1/128 scope Host 
 inet6 fe80 :: 215:afff:fe9f:fcd2/64 scope link
4
sourcejedi

追加することでIPv6を完全に無効にできます

net.ipv6.conf.all.disable_ipv6 = 1

/etc/sysctl.d内のファイル(例:/etc/sysctl.d/disable-ipv6.conf)。

1
Wieland