IPv6 в OpenWRT

Oct 22, 2022 01:19


Продолжение предыдущего поста.

Посидел я значит, покумекал. И внезапно понял, что то, чего я добиваюсь - это есть суть хрестоматийная схема Dual ISP без BGP. И решается она только через ULA и NAT.

Поэтому не надо страдать ерундой и пытаться выдавать клиенту во внутренней сети и приватный, и публичный IPv6-адрес. Надо выдавать только приватный. А если хочется иметь дома сервачки с проном, то выкинуть их в отдельный L2-сегмент и делегировать адреса от провайдера прицельно только им.

Что ж, идея понятна. Дальше я уткнулся в то, что реализация работы с IPv6 в OpenWRT какая-то черезжопная очень странная. Ряд необходимых настроек невозможно выполнить через веб-морду, только через UCI. Чтобы прикрутить IPv6 NAT, нужно самому прописывать в настройках файрволла специальный shell-скрипт. Возможно, это потому что у меня слишком тухлая версия (я до сих пор по некоторым причинам сижу на 19.07). Возможно, оно в принципе так запроектировано. Не знаю. Но основные идеи следующие (далее речь пойдёт конкретно про связку OpenWRT+IPv6).
  1. Подход, когда ты просто присваиваешь интерфейсу статический адрес "руками", как на "взрослом" Linux-е, здесь не катит. "Вы не понимаете, это другое". Надо сперва определить желаемый ULA-диапазон (там есть для этого отдельная опция), в случае необходимости задать hint (смещение относительно начала блока, если хочется брать-раздавать адреса не с самого начала) и таки включить Prefix Delivery на внутреннем интерфейсе (казалось бы, при чём тут Лужков?).
  2. Дальше крутить настройку "ip6class" на внутреннем интерфейсе (в веб-интерфейсе её нет, по крайней мере у меня в OpenWRT 19.07). Это строка, которая говорит откуда надо раздавать (deliverить) адреса. Например, если хочется только от провайдера, то писать там "wan6". Если хочется только ULA, то "local". Если и то, и другое, то "wan6 local".
  3. Включить настройку "спускать маршрут по умолчанию, даже если провайдер не дает IPv6". Вот она уже есть в веб-морде (LUCI).
  4. Отключить проверку валидности Source IP. По умолчанию она включена, и будет мешать NAT-у, т.к. при поступлении изнутри "некошерных" пакетов, то есть не из диапазона провайдера, роутер тупо отбросит их (reject) с мотивацей "не подходят под ingress policy". Этой настройки в веб-морде тоже нет. Называется "sourcefilter", применяется к внешнему интерфейсу.
  5. Отключить правило Firewall-а, которое разрешает передачу ICMPv6-сообщений от провайдера в LAN.
  6. Установить необходимые модули ядра из пакета "kmod-ipt-nat6".
  7. Дальше мудохаться с настройкой собственно NAT по инструкции из вики проекта.

Вот так вот всё неочевидно. Но у меня, вроде, получилось. В "полноценном" Linux-е оно, конечно, попроще будет. Без вот этих странных приседаний.

Еще вылезла мелкая засада. Я не могу бесшовно обновиться с 19.07 до 22.03, пушо они в какой-то момент поменяли сетевой фреймворк. Надо сбрасывать настройки до заводских и потом конфигурировать всё "с нуля". А у меня роутер к стене прикручен, и провода я до сих пор так и не обжал, до сих пор на Wi-Fi сижу. Хочется, конечно, обновиться и посмотреть как оно сделано в 22.03. Но когда руки дойдут, не знаю.

Ещё наткнулся на странный эффект. На моём ноутбуке помимо "честных" интерфейсов есть еще xfrm-интерфейс для IPSec-а. Так вот, если он поднят, то почему-то default-ные маршруты улетают туда (хоть не должны). Пришлось ставить костыль типа "sysctl -w net.ipv6.conf.xfrm0.disable_ipv6=1". Не знаю почему, и вряд ли осилю разобраться.

Всем хороших роутеров и IPv6.

грабли, openwrt, ipv6, сети, технологии

Previous post Next post
Up