Віддайте перевагу A (IPv4) пошуку DNS перед пошуками 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можна знайти на сторінці людини.


спасибі, ти врятував мій день! один з мого сервера продовжує отримувати результати ipv6 від dns-сервера, але мій сервер просто не міг нормально працювати w / ipv6
Boon

Привіт, чи потрібна ця настройка для завантаження системи або перезавантаження послуги чи перезавантаження? Я вважаю вашу відповідь корисною, але ви можете її відредагувати, щоб виправити такі сумніви.
Марко

На сторінці "man" gai.confйдеться про те, що для правильної модифікованої поведінки потрібно відміняти всі рядки, а не лише IPv4. З 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.
Ian D. Allen

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 для деталей горі)


1
Сторінка посібника до resoluv.conf вказує, що запропонований вами варіант робить точно протилежним "Цей параметр [...] змушує glibc виконувати запити IPv6 та IPv4 послідовно (ціною деякого уповільнення процесу вирішення)." - man7.org/linux/man-pages/man5/resolver.5.html
ndemou

послідовний = перший, потім другий - на відміну від паралельного. це чудово працює тут.
cweiske
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.