Convince apt-get * not * использовать метод IPv6
ISP, с которым я работаю, - это настройка внутренней сети IPv6 при подготовке к подключению к интернету IPv6. В результате несколько серверов в этой сети теперь пытаются подключиться к security.debian.org по адресу IPv6 по умолчанию при запуске apt-get update
, и это приводит к необходимости ждать длительный таймаут, когда я загружаю обновления любого типа.
Есть ли способ сказать apt, чтобы либо предпочесть IPv4, либо вообще игнорировать IPv6?
9 ответов
Добавить -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
Параметры конфигурации Приобретение :: ForceIPv4
и Acquire :: ForceIPv6
были добавлены в версию 0.9.7.9 ~ exp1 (см. bug 611891 ), который доступен с Ubuntu Saucy (выпущен в октябре 2013 года) и Debian Jessie (выпущен в апреле 2015 года).
Как Жиль говорит , используйте gai.conf
Скажем, у нас есть два хоста www.he.net и www.ripe.net
$ host www.he.net
www.he.net - это псевдоним для he.net.
he.net имеет адрес 216.218.186.2
У него есть IPv6-адрес 2001: 470: 0: 76 :: 2
$ host www.ripe.net
www.ripe.net имеет адрес 193.0.6.139
www.ripe.net имеет IPv6-адрес 2001: 67c: 2e8: 22 :: c100: 68b
Случай 1: Предпочитает IPV4
Добавьте в /etc/gai.conf следующее:
приоритет :: ffff: 0: 0/96 100
, то имеем:
$ telnet www.ripe.net 81
Попытка 193.0.6.139 ...
^ C
$ telnet www.he.net 81
Попытка 216.218.186.2 ...
Случай 2: Предпочитает IPV6 для определенных хостов
Если мы добавим
приоритет 2001: 470 :: /32 100
, то имеем
$ telnet www.ripe.net 81
Попытка 193.0.6.139 ...
^ C
$ telnet www.he.net 81
Пытается 2001: 470: 0: 76 :: 2 ...
^ C
Таким образом, мы предпочитаем эту сеть для ipv6 и ipv4 всюду.
Случай 3: Предпочитает ipv4 для определенных хостов
Интересно, инвертируем ли мы маску назад?
EDIT # 1
В соответствии с @GrueMaster это верно.
приоритет 2001: 470 :: /96 100
Работал для него. Чтобы заставить его работать, security.ubuntu.com ipv6 необходимо отключить. Это застопорилось навсегда.
См. также:
Вы можете настроить apt-cacher-ng на резервную машину, чтобы действовать как прокси-сервер для всех ваших хостов. Вы можете заставить конфигурацию использовать только определенные хосты или использовать трюк /etc /hosts, предложенный @badp на этой машине.
apt-get install apt-cacher-ng
После установки apt-cache-ng вам просто нужно отбросить следующую строку (с измененным IP-адресом /именем хоста, чтобы указать на ваш компьютер-кэшер) в /etc/apt/apt.conf.d/90httpproxy
Приобретение :: http {Proxy "http: //[192.168.1.254]: 3142"; };
Я использую эту настройку для сокращения использования полосы пропускания, но это должно решить вашу проблему. К сожалению, я не знаю, как напрямую отключить поиск ipv6 для apt-get.
Вы можете обойти это, установив прокси-сервер DNS, который сбросил ip6-ответы.
Как добавить строку в /etc /hosts
, переопределяя соответствующие адреса? например.
130.89.149.226 ftp.debian.org
195.20.242.89 security.debian.org
По состоянию на октябрь 2014 года у меня была та же проблема, пытаясь обновить debian за прокси-сервером в локальной сети. В надежде, что это будет актуально для других, я отправляю свой ответ здесь. Как уже упоминалось, редактирование /etc /hosts
- это то, о чем нужно быть осторожным.
Но лично я просто хотел сделать обновление.
Содержимое /etc/apt/sources.list при выполнении обновления (оно отличалось до обновления ..):
deb http://http.debian.net/debian/test main
deb-src http://http.debian.net/debian/test 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:
Приобретение :: http :: proxy "http://192.168.1.10:7777/";
Приобретите :: http :: Timeout "10";
Acquire :: ftp :: Timeout "10";
Дополнение к /etc /hosts:
#Workaround для создания 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 работал хорошо.
Как упоминалось в других ответах, используйте команду run host в домене, чтобы получить правильный ip для вставки в файл hosts.
Пример:
$ host ftp.debian.org
ftp.debian.org имеет адрес 130.89.148.12
Это успешно обновило систему до Debian GNU /Linux testing (jessie)
. Возможно, вы не захотите запускать тестовые репозитории, а затем просто удалите их из источников. Тестирование репозиториев дает вам более свежие обновления нескольких пакетов, но не считается стабильным.
Я нашел намного лучший способ сделать это. Откройте файл sources.list
и запишите имена хостов репозиториев. Получите их адреса IPv4 , а затем отредактируйте sources.list
с адресами IPv4, а не с именами хостов. Теперь Apt-get должен связаться с репозиториями по указанным вами IPv4-адресам, минуя IPv6.
Существует недостаток, заключающийся в том, что у РЕПО обычно есть какая-то система балансировки нагрузки и /или геолокация IP, что этот метод, конечно, обходит. Однако не имеет значения, только ли это делают некоторые люди. Если вы обнаружите, что одно зеркало медленное, попробуйте получить еще один IP-адрес репо (например, используя онлайн-службу ping) и используйте это.
Увольнение старой темы, но в последнее время она столкнулась с той же проблемой. Итак, на основании приведенного выше совета и вывода хоста и whois :
# host security.debian.org
security.debian.org имеет адрес 212.211.132.250
security.debian.org имеет адрес 195.20.242.89
security.debian.org имеет адрес 212.211.132.32
security.debian.org имеет IPv6-адрес 2001: 8d8: 580: 400: 6564: a62: 0: 2
security.debian.org имеет IPv6-адрес 2001: a78: 5: 0: 216: 35ff: fe7f: be4f
security.debian.org имеет IPv6-адрес 2001: a78: 5: 1: 216: 35ff: fe7f: 6ceb
Решенная проблема несколько по-другому - снизила приоритет сетей IPv6, содержащих security.debian.org в /etc/gai.conf :
# Сделать IPv6 для security.debian.org нежелательным
приоритет 2001: 8d8: 580 :: /48 5
приоритет 2001: a78: 5 :: /48 5
Таким образом, IPv6 по-прежнему предпочтительнее, кроме security.debian.org .
Вы можете попробовать это, если будете работать для вас
user @ ubuntuvm: ~ $ sudo bash
root @ ubuntuvm: ~ # echo 1> /Труды /системы /нетто /ipv6 /CONF /eth0 /disable_ipv6
- > замените имя интерфейса