Предпочитать DNS-запросы A (IPv4) перед AAAA (IPv6)

44

Обратите внимание, что моя недавно установленная Ubuntu 10.10 всегда выполняет поиск DNS AAAA перед поиском записи A. Можно ли как-то настроить систему для поиска в первую очередь?

(Хотя различные браузеры и другие приложения могут содержать свои собственные средства распознавания, я говорю о тех, что в glibc)

н.у.к.
источник
Чтобы уточнить, вы хотите, чтобы присутствовали как IPv4, так и IPv6?
Белаква
Желательно да. Но так как у меня есть только локальная ссылка на IPv6, довольно бесполезно каждый раз запрашивать, например, запись AAAA на google.com, а потом запрашивать запись A.

Ответы:

53

Это стандарт расстановки приоритетов IPv6 над IPv4, чтобы позволить IP следующего поколения вступить во владение :)

Вы можете изменить это, отредактировав блоки приоритетов в /etc/gai.conf(gai означает getaddrinfoстандартный системный вызов для разрешения имен хостов). Просто закомментируйте строку, как описано в файле:

# Для сайтов, которые предпочитают соединения IPv4, измените последнюю строку на

#precedence :: ffff: 0: 0/96 100

Подробное объяснение gai.confможно найти на странице руководства.

freddyb
источник
спасибо, ты спас мой день! один из моих серверов продолжает получать результаты ipv6 с DNS-сервера, но мой сервер просто не может работать должным образом с ipv6
Boon
Привет, для этого параметра требуется sysctl или любая перезагрузка службы или перезагрузка, чтобы вступили в силу? Я нашел ваш ответ полезным, но вы можете отредактировать его, чтобы исправить такие сомнения.
Марко
Страница man для gai.confвас говорит, что вы должны откомментировать все строки, а не только IPv4, чтобы получить правильное модифицированное поведение. From gai.conf(5): «Еще раз, наличие единственной строки приоритета в файле конфигурации приводит к тому, что таблица по умолчанию не используется». Если вы хотите, чтобы другие строки таблицы по умолчанию продолжали работать, вы также должны откомментировать их.
Ян Д. Аллен
10

Моя проблема была такой же, у меня были запросы IPV6, сделанные до IPV4, и они тратили ресурсы впустую, поэтому я изменил свой файл /etc/gai.conf, так как freddyb опубликовал, но мой сценарий немного отличается, мой сервер Natted, поэтому IPv4 не будет иметь приоритет над IPv6 только с этой строкой. Решение также закомментирует другие строки на gai.conf, так что это будет выглядеть так

#For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96 100
...
#    For sites which use site-local IPv4 addresses behind NAT there is
#    the problem that even if IPv4 addresses are preferred they do not
#    have the same scope and are therefore not sorted first.  To change
#    this use only these rules:
#
scopev4 ::ffff:169.254.0.0/112  2
scopev4 ::ffff:127.0.0.0/104    2
scopev4 ::ffff:0.0.0.0/96       14

Таким образом, ваш сервер попробует сначала ipv4, даже если вы Natted!

Карлос Хо Контины
источник
2
/etc/gai.confФайл в Ubuntu 15.04 «яркий» говорит , что эти три scopev4линии , которые вы предлагаете выше уже по умолчанию. Я сделал только однострочное precedence ::ffff:0:0/96 100изменение, и это работало даже за NAT.
Ян Д. Аллен
1

Если вы вообще не хотите, чтобы IPv6 был включен, вы можете отключить IPv6 для этого. http://www.webupd8.org/2010/05/how-to-disable-ipv6-in-ubuntu-1004.html

если нет, вы можете попробовать добавить

options single-request

В ваш файл /etc/resolv.conf. (см. http://udrepper.livejournal.com/20948.html для подробностей)

ipv6_twit
источник
1
Страница руководства для resolv.conf указывает на то, что предлагаемый вами вариант делает именно противоположное: «Этот параметр [...] заставляет glibc выполнять запросы IPv6 и IPv4 последовательно (за счет некоторого замедления процесса разрешения)». - man7.org/linux/man-pages/man5/resolver.5.html
ndemou
последовательный = сначала один, затем другой - в отличие от параллельного. здесь работает нормально
cweiske