... для компенсації пошкоджених серверів DNS, які не знаходяться під нашим контролем.
Наша проблема: ми розгортаємо вбудовані пристрої, які збирають дані сенсорів на різних, переважно IPv4-сайтах. Деякі сайти мають погано підтримувані мережі, наприклад, неправильно налаштовані або зламані кешовані файли DNS та / або брандмауери, які або взагалі ігнорують запити AAAA, або відповідають на них зламаними відповідями (наприклад, неправильний джерело IP!). Як зовнішній постачальник відділу обладнання, ми не маємо впливу на (іноді неохоче) ІТ-відділи. Шанси їх незабаром скористатися серверами / брандмауерами DNS незабаром є незначними.
Ефект на нашому пристрої полягає в тому, що з кожним gethostbyname () процесам доводиться чекати, поки очікується час запиту AAAA, після чого деякі процеси вже вичерпали спроби їх з'єднання.
Я шукаю рішення, які є ...
- загальносистемні. Я не можу налаштувати десятки додатків окремо
- непостійний і настроюваний. Нам потрібно (повторно) включити IPv6 там, де / коли він буде виправлений / розгорнутий. Перезавантаження в порядку.
- Якщо рішення вимагає заміни основної бібліотеки на зразок glibc, пакет бібліотеки заміни повинен бути доступний з відомого добре підтримуваного сховища (наприклад, Debian Testing, Ubuntu всесвіт, EPEL). Самостійне будівництво не є варіантом з такої кількості причин, що я навіть не знаю, з чого почати, тому просто їх не перелічую ...
Найбільш очевидним рішенням буде налаштувати бібліотеку резолюцій, наприклад через / etc / { resolutionv , nsswitch , gai } .conf, щоб не запитувати записи AAAA. no-inet6
Рекомендований тут варіант resv.conf був би саме тим , що я шукаю. На жаль, він не реалізований, принаймні, не в наших системах (libc6-2.13-38 + deb7u4 на Debian 7; libc6-2.19-0ubuntu6.3 на Ubuntu 14.04)
То як же тоді? Виявлені такі методи, запропоновані як в SF, так і в інших місцях, але вони не працюють:
- Відключення IPv6 взагалі, наприклад, шляхом чорного списку ipv6 LKM в /etc/modprobe.d/ або
sysctl -w net.ipv6.conf.all.disable_ipv6=1
. ( З цікавості: Чому резолютор запитує AAAA, де IPv6 вимкнено? ) - Видалення
options inet6
з /etc/resolv.conf. Її там не було в першу чергу,inet6
просто включено за замовчуванням у ці дні. - Налаштування
options single-request
в /etc/resolv.conf. Це лише гарантує, що запити A та AAAA виконуються послідовно, а не паралельно - Зміна
precedence
в /etc/gai.conf. Це не впливає на запити DNS, лише на те, як обробляються кілька відповідей. - Використання зовнішніх розв'язувачів (або запуск локального демона розв'язувача, який обходить зламані сервери DNS) допоможе, але зазвичай забороняється політикою брандмауера компанії. І це може зробити внутрішні ресурси недоступними.
Альтернативні потворні ідеї:
- Запустіть кеш DNS на localhost. Налаштуйте його для переадресації всіх запитів, що не є AAAA, але відповіді на запити AAAA або NOERROR, або NXDOMAIN (залежно від результату відповідного A-запиту). Я не знаю, кеш DNS, здатний це зробити.
- Використовуйте кілька розумних збігів iptables u32 або DNS-модуль iptables Ondrej Caletka для відповідності запитам AAAA, щоб або icmp-відхилив їх (як би реагувала lib на них?) Або перенаправляв їх на локальний сервер DNS, який відповідає на все з порожнім НОМЕРОМ.
Зауважте, що щодо SE є подібні, пов'язані питання. Моє запитання відрізняється тим, що воно розкриває актуальну проблему, яку я намагаюся вирішити, оскільки вона містить чіткі вимоги, оскільки вона містить чорні списки деяких непропонованих непрацюючих рішень, і оскільки вона не є специфічною для однієї програми. Після цієї дискусії я розмістив своє запитання.