Фильтрация AAAA-записей средствами BIND9

Mar 31, 2015 23:57


Говно IPv6 ширится. Уже многие ресурсы доступны как по IPv4, так и по IPv6. За примерами далеко ходить не надо: те же Яндекс, Google и иже с ними. Соответственно, в ответ на прямые (Forward) DNS-запросы часто одновременно прилетают несколько адресов: как A-запись (IPv4), так и AAAA-запись (IPv6).

В современных операционных системах IPv6 считается более приоритетным, чем IPv4. Что часто приводит к нехилым тормозам при попытках посёрфить в интернете, если провайдер не предоставляет IPv6-линка. Об этом я уже писал вот здесь.

Какой-нибудь Яндекс сцука до фига умный: он на своих DNS-серверах анализирует, из сети какого провайдера пришёл A-запрос. А потом по своей собственной базе данных смотрит: предоставляет ли этот провайдер своим абонентам IPv6 или нет. И если второе ("нет"), то AAAA-записи в ответ на такой запрос просто не отдаёт. А вот Google сцука тупой. Он не парится и без разбору всем подряд отдаёт и A, и AAAA-записи своих ресурсов.

Долго ли коротко, суть проблемы со временем дошла до понимания разработчиков популярных DNS-серверов. И начиная с версии 9.7.0b2 демон BIND поддерживает директиву "filter-aaaa-on-v4", которая говорит ему о том, что если рекурсивный A-запрос пришёл с IPv4-линка, то из ответа на такой запрос следует выпилить все AAAA-записи. Что очень неплохо помогает в борьбе с разными говнопровайдерами.

Есть только три нюанса.
  1. BIND должен быть собран с конфигурационной опцией "--enable-filter-aaaa". Так например, пакет в Debian Wheezy "из коробки" скомпилирован без упомянутого параметра. В нём без пересборки директива "filter-aaaa-on-v4" работать не будет. А вот в Wheezy-Backports и в Jessie уже всё сделано "как надо".
  2. Эта директива никак не влияет на генерируемые самим DNS-сервером запросы "дальше в мир". Если у самого DNS-сервера также нет IPv6-линков "внаружу", то нужно ещё в глобальную конфигурацию добавить строчку "server ::/0 { bogus yes; };". Это означает "игнорировать ответы от всех серверов с IPv6-адресами".
  3. Директива "filter-aaaa-on-v4" может присутствовать только внутри view. При попытке использовать её глобально сервер скажет "я - не я, и лошадь не моя" выдаст ошибку.

Вот так мы боремся с IPv6 побеждаем сырость.

И попутно два вопроса к виндовым сисадминам.
  • Имеется ли подобный функционал в виндовых DNS-серверах?
  • Каким образом на клиентских машинах (например, под управлением Windows 7) можно установить режим предпочтения IPv4-адресов по аналогии с тем, как это делается в Linux?

dns, администрирование, linux, сети

Previous post Next post
Up