Использовать IPv6 я начал давно. Сначала это было просто любопытство, тем более что всегда использовал компьютер с Linux в качестве маршрутизатора, так что дополнительно настроить IPv6 туннель до HE было несложно. Да, со временем использование IPv6 стало иметь прямой смысл.

Да, в заметке речь конечно идёт о dual stack, одновременном использовании IPv4 и IPv6, до использования “чистого” IPv6 придётся подождать.

Про подключение IPv6 и настройку на habr достаточно статей, так что на этом останавливаться не буду. Мой опыт основан на использовании туннеля от Hurricane Electric, но предложенное решение годится для любых способов подключения.

Проблемы

В процессе использования IPv6 стали накапливаться некоторые проблемы. Некоторые сайты, у которых появились AAAA - записи в DNS, на самом деле не работали через IPv6. Потом обнаружилось, что поиск в google постоянно выдаёт капчу, тоже самое с yandex.

Последнее, то заставило меня как-то решать проблему с IPv6 - к моему удивлению, обнаружилось, что на приставке Apple TV приоритизирован IPv4, и соответственно, youtube работает через него, хотя под Windows/MacOS/Linux/iOS/Android всё как обычно - IPv6 имеет приоритет над IPv4, и если для какого-либо сервиса есть AAAA записи в DNS, то он будет работать через IPv6.

Решение

Решение лежит на поверхности. Для bind9 есть плагины для фильтрации A или AAAA записей в ответах на запрос разрешения имени сайта (filter-aaaa.so). Плагин filter-aaaa удаляет AAAA-записи домена. Плагин filter-a соответственно удаляет-записи. Можно удалять записи для любого запроса, либо для отдельных клиентов, выделяемых по IP-адресу.

При небольшой доработке плагинов появляется возможность фильтровать записи только для определённых доменов. Доработанные плагины расположены здесь:

GitHub - DimaRU/bind9-filter: Selective filtering of AAAA or A records. Plugin for BIND9. · GitHub

Сразу пример конфигурации для плагинов:

plugin query "filter-a-cond.so" {
   filter-a-on-v6 yes;
   filter-a-on-v4 yes;
   filter-a { any; };
   only-for-domains { "youtube.com."; "accounts.youtube.com"; "i.ytimg.com."; 
	   "wide-youtube.l.google.com."; "www3.l.google.com."; "clients.l.google.com."; 
	   "yt3.googleusercontent.com."; "googlevideo.com."; "accounts.google.com."; "youtube-ui.l.google.com.";};
};

plugin query "filter-aaaa-cond.so" {
   filter-aaaa-on-v6 yes;
   filter-aaaa-on-v4 yes;
   filter-aaaa { any; };
   only-for-domains_exact { "www.google.com."; };
};

Тут мы фильтруем A-записи для доменов необходимых для работы youtube, соответственно оно работает только через IPv6, что и требовалось для Apple TV. Для www.google.com фильтруются AAAA-записи, это решает проблему с капчей.

Собственно, при доработке плагинов добавлены 2 опции:

only-for-domains_exact: Список доменов, для которых будет выполнена фильтрация записей.

only-for-domains: Список доменов, для которых будет выполнена фильтрация записей. В отличие от опции only-for-domains_exact, фильтрация будет выполнена так же для всех субдоменов из перечисленных в списке доменов.

Сборка

Сборка плагинов осуществляется через докер, детали есть в README репозитория. В настоящее время сборка сконфигурирована для bind9 stable version для Ubuntu 24.04. Если нужно что-то другое, пишите в issue репозитория.

В целом конфигурирование bind9 - не тривиальная, но выполнимая задача, особенно для тех, кто заморочился на конфигурирование домашней IPv6 сети.

Буду рад, если это решение будет кому-либо полезно.

Комментарии (4)


  1. redoBakir
    10.05.2026 16:39

    да, та же фигня с капчами при включенном IPv6, спасибо за совет, пока работает)


  1. p7000
    10.05.2026 16:39

    можно ходить не на google.com, а на ipv4.google.com


  1. backfield9818
    10.05.2026 16:39

    ||google.com^$dnstype=A,dnsrewrite=NOERROR
    ||*.google.com^$dnstype=A,dnsrewrite=NOERROR
    ||googleapis.com^$dnstype=A,dnsrewrite=NOERROR
    ||gstatic.com^$dnstype=A,dnsrewrite=NOERROR

    Cloude написал мне правила для Adguard (только приложение, DNS фильтрация). Не особо в них разбираюсь, но вроде работает, проверял выдачу. Правила возвращают пустой NODATA-ответ на A-запросы , оставляя AAAA-ответы нетронутыми — браузер получает только IPv6-адреса Google.


  1. select26
    10.05.2026 16:39

    А зачем эти все приседания с фильтрами, плагинами? Чтобы что?

    Чтобы всем таки похвастаться, что вы используете v6?

    Нет ответа на это вопрос.

    Я тоже был великий этузиаст ipv6. Потом, после долгих лет работы в enterprise, понял что это не дает никаких преимуществ, а проблемы доставляет явные. Часть из них вы описали. Еще есть сам по себе геморрой с поддержкой второго стека: маршрутизация, настройки FW и WAF (а они принципиально отличаются для v6), проблемы с логированием - не все библиотеки и программы понимают формат v6, библиотеки проверки валидности ip адреса и т.п.

    Дома, когда я честно себе объяснил, что нет СМЫСЛА поддерживать v6 и его отключил - настала тишина. Больше нет проблем, что TV не резолвит, что maven у супруги не получает какую-то зависимость. Что разные маршруты и latency с разных устройств, т.к. приоритет или набор разрешенных протоколов у них разный. Просто тишина.

    По привычке до сих пор висит прокси, который имеет приоритет v6, но он уже давно не используется.

    Сам факт того, что внедрение нового протокола идет третье десятилетие говорит о его "востребованности". Сравните, например, с LLM.

    Извините, наболело.