Почему yum разрешает dl.google.com на адрес IPv6?

Я установил браузер Chrome Chrome на Fedora 18. Теперь, когда я пытаюсь обновить программное обеспечение с помощью yum upgrade , он сообщает о следующей ошибке, и я не могу обновить хром.

 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. 

Какова возможная причина и как я могу это исправить?

По умолчанию yum будет разрешать как IPv4, так и IPv6-адреса имени хоста / домена, см. Снимок экрана wirehark ниже (я не знаю программу python, поэтому захват сетевого трафика – единственный способ узнать, как yum разрешить имя хоста).

yum разрешить IP-адрес, захватить

Чтобы разрешить только адрес 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=4 выше на ip_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 

Я не знаю о юме. Похоже, что отсутствует реализация Happy Eyeballs, т.е. отключение к ipv4. Существует адрес ipv6 …

  $ host 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 строки precedence ::ffff:0:0/96 100 . Это дает приоритет адресам ipv4.

Я думаю, что обычно это должно сработать. У вас будет локальный адрес ipv6, но локальный адрес ipv4 (или публичный без NAT). Затем должен быть назначен идентификатор DNS-сервера libc. Это указано в RFC 3484.

Интересно, это проблема типа Тередо. Ваш маршрутизатор (например, аэропорт Apple) назначил вам глобальный адрес IPV6 через ненадежный туннель? Мой компьютер (без глобального ipv6) выглядит так:

  $ ip addr | grep inet6
     inet6 :: 1/128 область хоста 
     inet6 fe80 :: 215: afff: fe9f: fcd2 / 64 scope link 

Вы можете полностью отключить IPv6, добавив

net.ipv6.conf.all.disable_ipv6 = 1

к файлу в файле /etc/sysctl.d , например /etc/sysctl.d/disable-ipv6.conf .