- PVSM.RU - https://www.pvsm.ru -
Использовать 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 [1] есть плагины для фильтрации A или AAAA записей в ответах на запрос разрешения имени сайта (filter-aaaa.so [2]). Плагин filter-aaaa удаляет AAAA-записи домена. Плагин filter-a соответственно удаляет-записи. Можно удалять записи для любого запроса, либо для отдельных клиентов, выделяемых по IP-адресу.
При небольшой доработке плагинов появляется возможность фильтровать записи только для определённых доменов. Доработанные плагины расположены здесь:
GitHub - DimaRU/bind9-filter: Selective filtering of AAAA or A records. Plugin for BIND9. · GitHub [3]
Сразу пример конфигурации для плагинов:
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 сети.
Буду рад, если это решение будет кому-либо полезно.
Автор: FlamerX
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dns-2/451336
Ссылки в тексте:
[1] bind9: https://bind9.readthedocs.io/en/stable/manpages.html#std-iscman-named
[2] filter-aaaa.so: https://bind9.readthedocs.io/en/stable/manpages.html#filter-aaaa-so-filter-aaaa-in-dns-responses-when-a-is-present
[3] GitHub - DimaRU/bind9-filter: Selective filtering of AAAA or A records. Plugin for BIND9. · GitHub: https://github.com/DimaRU/bind9-filter
[4] Источник: https://habr.com/ru/articles/1033568/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1033568
Нажмите здесь для печати.