Снижение приоритета (предпочитаемости) IPv6

Впервые опубликовано 2011-11-17.

Настроив у себя IPv6-туннель от одного из туннельных брокеров, вы вероятно заметите, что в случаях когда удалённые сайты или прочие сервера имеют как IPv4, так и IPv6-адрес, ваши компьютеры теперь будут предпочитать связываться с ними по протоколу IPv6.

Поскольку весь ваш IPv6-трафик в случае с туннельным брокером идёт через его сервер, в ряде случаев данное поведение может оказаться нежелательным. Используемый при обращении к тем же серверам напрямую по IPv4 маршрут может оказаться более коротким, и обеспечивать более высокую скорость.

В качестве примеров, где это может оказаться важным, можно назвать загрузку обновлений ОС с имеющих поддержку IPv6 файловых зеркал, а также просмотр YouTube, с недавнего времени добавившего IPv6-адреса своим серверам раздачи видео. Последнее, судя по всему, является довольно частой жалобой: «после установки туннеля YouTube тормозит», когда по итогам диагностики выясняется, что получение видео с данного сервиса теперь идёт по IPv6 через туннельный сервер в Европе, вместо (к примеру) установленных Гуглом в Москве или непосредственно у вашего провайдера кэширующих серверов его собственной CDN.

Решением проблемы может являться придание IPv6-адресам вашего туннельного брокера статуса «низкоприоритетных», т.е. используемых только при отсутствии возможности соединиться по IPv4. Такой статус по-умолчанию уже имеют 6to4 и Teredo-адреса (поэтому с ними вышеописанной проблемы в общем случае не возникает).

GNU/Linux

Необходимо отредактировать файл /etc/gai.conf. По-умолчанию там уже есть следующая закомментированная секция:

# label   <mask>   <value>
#    Add another rule to the RFC 3484 label table.  See section 2.1 in
#    RFC 3484.  The default is:
#
#label ::1/128       0
#label ::/0          1
#label 2002::/16     2
#label ::/96         3
#label ::ffff:0:0/96 4
#label fec0::/10     5
#label fc00::/7      6
#label 2001:0::/32   7

Раскомментируйте её, и добавьте в список (к примеру со значением «2», т.е. равным со 6to4-адресами приоритетом) ту IPv6-сеть вашего туннельного брокера, адрес из которой выдан вам и сконфигурирован у вас на туннельном интерфейсе. В случае с Hurricane Electric это 2001:470::/32. В результате секция будет выглядеть следующим образом:

label ::1/128       0
label ::/0          1
label 2002::/16     2
label 2001:470::/32 2
label ::/96         3
label ::ffff:0:0/96 4
label fec0::/10     5
label fc00::/7      6
label 2001:0::/32   7

Этого должно быть достаточно, чтобы IPv6 использовался только при подключении к IPv6-only сервисам, либо при явном указании требования использовать IPv6 в соответствующей программе («ssh -6», «curl -6» и т.д). В остальных случаях автоматически будет предпочитаться IPv4.

/etc/gai.conf определяет поведение системных функций получения IP-адресов по DNS-имени (getaddrinfo из GNU libc), соответственно изменение в этом файле повлияет на поведение подавляющего большинства программ. Однако для вступления его в силу, все эти программы необходимо будет перезапустить.

Ссылки

Squid 3

К сожалению, для работы с DNS-именами Squid в настоящее время не пользуется системными функциями (предпочитая собственные их реализации), поэтому изменение в gai.conf никак на его поведение не повлияет. Более того, насколько мне известно, вышеупомянутые значения по умолчанию из RFC 3484 он также игнорирует, а значит может предпочитать IPv6-соединение даже в случае туннелей 6to4 и Teredo. Однако есть способ запретить использование им IPv6 для конкретного домена. Для этого отредактируйте /etc/squid3/squid.conf, добавив туда, к примеру, в случае с YouTube:

acl youtube dstdomain .youtube.com
tcp_outgoing_address 0.0.0.0 youtube

Для всех адресов в домене youtube.com теперь будет использоваться подключение по IPv4.

Windows

P.S.

Не забудьте убрать все эти костыли настройки после того, как ваш провайдер выдаст вам нативный IPv6. :)


deprefer-ipv6.txt · Последние изменения: 2012-07-06 06:37 UTC От rm