Добавлю свежий практический пример по IPv6 на KN-1811 / KeeneticOS 5.1b4 (preview 5.01.B.4.0-1).
Это именно проблема с текущей реализацией при нескольких выходах в сеть, маршрутизации по DNS и нежелании раздавать домашним устройствам публичный IPv6-префикс провайдера.
Схема такая:
провайдер выдаёт IPv6 и делегированный префикс;
на роутере используется штатная IPv6-маршрутизация KeeneticOS;
используется маршрутизация доменов через dns-proxy route ... Wireguard<N> auto reject;
хочется, чтобы устройства в Home получали только ULA, маршрут по умолчанию на роутер и DNS тоже через роутер;
публичный адрес из префикса провайдера на устройства раздавать наоборот — не хочется.
Причина простая: если клиент получает публичный 2a02:..., меняется вся модель безопасности и приватности. Устройство уже не просто “внутри домашней сети за роутером”, а имеет публичный IPv6-адрес. Да, входящий трафик можно фильтровать, но сама модель становится другой.
Штатная настройка выглядит логично:
Но при включении mode slaac штатный radvd раздаёт в домашнюю сеть сразу оба префикса:
- ULA fdf4:.../64;
- публичный префикс провайдера 2a02:.../64.
В итоге Windows-клиент получает и fdf4:..., и 2a02:..., плюс маршрут по умолчанию и DNS через RA/RDNSS.
Отдельной настройки вида “SLAAC только для ULA” или “не раздавать публичный префикс провайдера в LAN” я в CLI не нашёл.
Пробовал:
В моём случае это не убрало публичный префикс из RA.
Если же сделать:
то штатная раздача RA выключается полностью. Префиксы на роутере остаются, маршрутизация есть, но клиенты не получают ни SLAAC-адреса, ни маршрут по умолчанию, ни DNS — вообще ipv6 отсутствует дальше кинетика.
То есть сейчас выбор такой:
mode slaac — клиентам раздаются и ULA, и публичный IPv6 провайдера.
no mode — клиентам не раздаётся вообще ничего.
Рабочий обходной вариант оказался таким: оставить всю штатную маршрутизацию KeeneticOS, но заменить только источник RA.
Штатно остаётся:
получение IPv6 на ISP;
получение делегированного префикса;
ipv6 local-prefix default;
маршрутизация;
dns-proxy;
firewall;
работа через Wireguard-интерфейсы.
А штатный RA выключается:
Вместо него запускается обычный radvd через entware на br0, который раздаёт только ULA:
После этого Windows-клиент получает:
только fdf4:...;
без 2a02:... на клиенте;
маршрут по умолчанию через link-local адрес роутера;
DNS тоже через link-local адрес роутера.
При этом внешний IPv6 продолжает работать. Проверка с исходным адресом fdf4:... проходит, снаружи соединение видно как адрес из провайдерского 2a02:... префикса. То есть штатная маршрутизация/трансляция префикса на роутере продолжает работать, просто публичный префикс больше не раздаётся клиентам напрямую.
Сравнение получается такое
Штатный Keenetic mode slaac:
включается одной командой;
но раздаёт клиентам и ULA, и публичный префикс провайдера;
нет понятной настройки “раздавать только local-prefix”;
no mode выключает весь RA целиком.
Пользовательский radvd:
вся маршрутизация остаётся штатной;
клиентам можно раздавать только ULA;
DNS можно оставить строго через роутер;
маршрутизация доменов через dns-proxy route продолжает работать;
но это уже ручной обход, потому что приходится забирать у KeeneticOS управление RA.
Отдельная связанная проблема — DNS в IPv6.
Сейчас есть несколько разных мест, которые влияют на DNS6:
interface ipv6 name-servers auto / no ipv6 name-servers auto;
ipv6 name-server;
ipv6 subnet dns-server;
RDNSS в RA;
dns-proxy route ... <interface> auto reject.
Сам dns-proxy route очень полезен. На нём можно строить нормальную маршрутизацию доменов через разные выходы: ISP, Wireguard0, Wireguard1 и т.д.
Но в IPv6 не хватает единой понятной политики:
принимать или не принимать DNS6 от провайдера;
что именно отдавать клиентам через RDNSS/DHCPv6;
как гарантировать, что клиенты используют роутер как DNS;
как не допустить утечки запросов в DNS6 провайдера;
как связать это с dns-proxy route, чтобы IPv4 и IPv6 имена маршрутизировались одинаково.
Что хотелось бы видеть в KeeneticOS:
1. Управление RA по префиксам в подсети.
Например:
раздавать только ULA;
раздавать только публичный префикс;
раздавать оба;
не раздавать конкретный делегированный префикс;
отдельно управлять RDNSS/DNSSL.
2. Явное управление трансляцией IPv6-префиксов.
Сейчас видно, что внутри оно есть и работает, иначе ULA-клиент не выходил бы наружу через адрес провайдера. Но пользователю это почти никак не управляется и плохо диагностируется.
Нужны команды, которые показывают:
какие префиксы транслируются;
через какой выход;
что будет при нескольких провайдерах;
почему выбран именно этот внешний префикс.
3. Нормальная работа с несколькими IPv6-выходами.
Например:
ISP;
Wireguard0;
Wireguard1;
второй провайдер с IPv6.
Нужны понятные правила выбора выхода, исходного префикса, firewall-правил и DNS-маршрутов. Сейчас при добавлении второго IPv6-выхода слишком легко получить непредсказуемое поведение.
4. Единая политика DNS6.
Хочется иметь возможность явно сказать:
DNS6 от провайдера не принимать;
клиентам отдавать только роутер;
все DNS-запросы клиентов пропускать через dns-proxy;
маршруты dns-proxy route применять и к A, и к AAAA;
не обходить DoT/DoH или настроенные DNS-маршруты через провайдерские DNS6.
5. Диагностика.
Тут тоже — очень не хватает команд вида:
показать, какие RA сейчас реально отправляются в Home;
показать, какие префиксы раздаются клиентам;
показать RDNSS для каждой подсети;
показать состояние трансляции IPv6-префиксов;
показать, почему конкретный клиент получил или не получил конкретный IPv6-адрес.
Видел в мане ipv6 subnet debug, но описания нет у этого добра.
Итог.
Низкоуровнево в KeeneticOS уже есть почти всё нужное: ULA, делегирование префикса, subnet, маршрутизация, firewall, dns-proxy route, внутренняя трансляция префиксов.
Не хватает управляемой связки поверх этого.
Из-за отсутствия одной настройки “SLAAC только для ULA, публичный префикс в LAN не раздавать” приходится выключать штатный mode slaac и запускать свой radvd. При этом вся остальная штатная часть KeeneticOS работает правильно и предсказуемо.