Віддайте перевагу 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.