Про OpenWRT, Sierra Wireless, IPv6 и нерадивых ISP-ов

Jan 12, 2020 01:18


Продолжение / корректировка / дополнение вот этого поста. Спойлер: там было гонево.

Зачесались у меня что-то шаловливые ручки поковыряться опять с IPv6. Не знаю зачем. Охота пуще неволи. Взял опять свой любимый Sierra AirCard 320U в режиме "Direct IP", роутер с OpenWRT, МТС-овскую SIMку с подключенной услугой IPv6, заперся в квартире, и давай дро экспериментировать. В процессе продолжал изучать матчасть, связанную с IPv6. Попутно выяснил энное количество полезных и не очень фактов.
  1. Бывают нормальные провайдеры, типа "Онлайма", которые выдают абонентам сразу подести "/56". Они сразу и без проблем прописываются на домашних роутерах и на устройствах позади оных.
  2. Бывают нерадивые провайдеры, типа МТС, которые выдают адреса "/64". Чтобы выдать хоть какие-нибудь из них на устройства за роутером, надо конкретно потанцевать с бубном.
  3. На самом деле МТС в этом ни капли не виноват. Там есть куча технических проблем. Они работают над этим, но пока производители модемов-телефонов-планшетов не реализуют у себя всякие новомодные фишки-мульки-фичи, бежать впереди паровоза трактористы не будут. Хотя бы потому, что на подобные НИОКРы их ITшникам тупо никто не выделит бюджет.
  4. Можно поплакаться в профильной ветке на 4pda, и товарищ из МТСа выдаст тестовую APN, которая щедро раздает "/56"-адреса. Просто на-поковырять. Но при этом очень просит не работать через эту APN и не гонять таким способом серьёзный трафик. Это именно чтоб побаловаться, не для практического применения.
  5. На хабре трактористы хвастались, что "спускают" клиентам IPv4 и IPv6 DNS-сервера, чтоб "всё было по фен-шую". На самом деле только IPv4. Но это никакого значения не имеет.
  6. Если хочется работать с IPv6 через "родные" Sierr-овские драйвера под Linux-ом, то нужно убедиться, что оные достаточно свежи. Тухлые не умеют IPv6.
  7. Сам модем в режиме "Direct IP" ("sierra_net.ko") умеет отдавать IPv6 только как SLAAC. Никакого DHCPv6, даже не пытайтесь.
  8. Соответственно, забрать у модема информацию о DNS-серверах провайдера можно только по DHCPv4, больше никак. Другими словами, нельзя поднять один только IPv6-линк без IPv4. Нужен и тот, и другой.
  9. По причине раздачи МТС-ом "/64"-адресов, "пробросить" их на устройства за роутером можно только танцами с бубном. В режиме RA Relay. С самим роутером при этом общаться по IPv6 не получится, но "в мир" всё маршрутизируется вполне корректно по обоим протоколам.
  10. Забавно, но Chrome и FireFox бессовестно нарушают RFC, не позволяя писать в своей адресной строке URL-ы вида "http://[fe80::f6f2:6dff:fede:7cf2%25eth1]/". Сволочи-подонки.

Ниже делюсь своими размышлениями о настройке IPv6 на OpenWRT. Конкретно я развлекался с МТС, но скорее всего способ подойдёт для любого провайдера, который даёт только "/64"-адреса клиентам через RA / SLAAC. Возможно, с некоторыми доработками.

Я знаю, что можно выложить конфиги UCI, это будет быстрее и короче. Но для наглядности всё-таки решил забацать скриншоты. В подробности настройки самого модема здесь вдаваться не буду. Я об этом уже писал раньше.

Настройка WAN6 (внешний интерфейс). Красным обвёл то, на что следует обратить особое внимание.

Вообще да, настройки в OpenWRT ни разу не интуитивны. Приходится очень долго разбираться, какой именно параметр ядра или демона стоит за той или иной "галкой" в веб интерфейсе. Вот вы бы догадались, что на вкладке "General" нужно отключить получение IPv6-адресов?




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




Настройка LAN (внутренний интерфейс). Тоже обвел красным. Первый скриншот достаточно очевиден.




А на втором нужно выставить именно вот так. Возможно, картинки не очень знакомые. Это OpenWRT 19.07.




Выше неправильный скриншот. Вот правильный. Смотри update к посту.




Потом всё-таки придется прогуляться в консоль и в конфиг "/etc/config/dhcp" добавить ручками:
config dhcp 'wan6'
option interface 'wan6'
option ra 'relay'
option master '1'

В веб-морду aka Luci этих настроек не завезли. Потом перезапустить демон odhcpd.
Собственно всё. Проверить, что сам момед получил адрес. Клиентов настраивать на SLAAC. В Debian-е это
allow-hotplug eth1
iface eth1 inet dhcp
iface eth1 inet6 auto

А дальше начинается изврат. Адреса-то все заинтересованные устройства получили. А вот на самом роутере как-то малость не хватает ipv6-маршрута до внутренних устройств. В интернет есть. На себя-любимого есть. Но про соседей-то никто ничего не говорил и кормить не обещал. Поэтому если специально ничего не делать, то от клиента в интернет пакетик уйдёт, но обратно не вернётся. На роутере застрянет, потому что у него доку́ментов нету. Тут у меня идеи уже конкретно закончились, и я написал вот такой shell-скрипт.

Смотри update в конце поста.
#!/bin/sh

RANGE=$(/sbin/ip -6 addr show dev wwan0 | /usr/bin/grep -oP 'inet6 \K2a00:\w{0,4}:\w{0,4}:\w{0,4}(?=[\w:]+/64)')::/64
ROUTE=$(/sbin/ip -6 route show | /usr/bin/grep -oP '2a00[\w:]+/64(?=.+br-lan)')
if [ "$RANGE" != "$ROUTE" ] ; then
[ -z "$ROUTE" ] || /sbin/ip -6 route del "$ROUTE" dev br-lan
[ "RANGE" != "::/64" ] && /sbin/ip -6 route add "$RANGE" dev br-lan
else
sleep 15
fi

Он парсит регексом IPv6-адрес, который получил wwan0 и проверяет, а есть ли маршрут с таким же префиксом вовнутрь "br-lan". Если есть - ничего не делает (спит). Если нет - добавляет. Если есть, но не такой - заменяет. Не надо говорить мне, что это какая-то дичь. Сам знаю. Но как сделать лучше - не придумал. Вполне допускаю, что для этого уже изобретен какой-нибудь хитрый демон или можно положить обработчик соответствующего события куда-нибудь в недра "/etc/hotplug.d". Но настолько глубоко архитектурой OpenWRT, увы, не владею.

Остался последний вопрос: на фига мне всё это надо? А вот тоже не знаю. Что-то захотел развлечься и развлёкся. Чисто из спортивного интереса, ради разнообразия.

UPDATE. Разобрался как делать без извращений с прописыванием маршрутов ручками / скриптами. Просто на последнем скриншоте надо по-другому выставить настройки. Добавил "правильный" скриншот.

linux, lte, openwrt, МТС, сети, интернетное, it, модемы

Previous post Next post
Up