IPv6, Mikrotik и Sarkor (инструкция)

Протокол IPv6 был создан более 25 лет назад. И несмотря на то, что на текущий момент он уже старше некоторых состоявшихся IT специалистов, для многих он является чем-то новым и неизведанным. Разговоры о переходе на IPv6 шли уже давно и подогревались паникой перед неизбежным концом далеко не бесконечных адресов v4. Но как бы не противилось человечество, научиться работать с этим, недружелюбным на первый взгляд протоколом, всё же, придётся.

Многие провайдеры до сих пор игнорируют необходимость внедрения нового протокола. Но это вовсе не помешало многим энтузиастам потренироваться на туннельных брокерах, некоторые из которых щедро раздают префиксы, вплоть до /48 совершенно бесплатно, практически любому желающему. Будучи одним из таких энтузиастов, я более-менее разобрался в базовых понятиях и принципах работы IPv6 и стал с нетерпеньем ждать, когда эти сети будут предоставляться нативно локальными провайдерами. И вот, в феврале 2022 года провайдер Sarkor Telecom первым в Узбекистане (по моей информации) анонсировал скорый запуск сетей IPv6 для обычных абонентов. С момента анонса прошло прилично времени, пока нововведение добралось до моего узла. Это и понятно, ведь внедрение ipv6 требует серьёзных изменений в работе сети и тесно связано с серьёзными последствиями, в случае плохо обдуманных решений.

Основные опасения тут связаны с тем, что в сети шестой версии абсолютно все устройства имеют собственный «белый» адрес, а значит, видимы из «мира». Людям, привыкшим к демилитаризованным зонам за NAT следует учесть это и очень серьёзно подойти к настройке фаерволлов. Если ранее в домашней сети можно было не беспокоиться о хранилище или камере со стандартным паролем (или вовсе без него) то теперь, получив глобальный адрес, такое устройство может легко стать жертвой злоумышленника. Правда, тут стоит оговориться, что «насканить» уязвимое устройство в сети v6 не так-то просто, поскольку даже в самом маленьком префиксе /64 (который дадут абоненту домой) чуть более 18 квинтиллионов адресов. Говоря проще – дохрена! Впрочем, есть ведь и шанс, что ваше устройство само обратится на вредоносный сервер, раскрыв свой адрес?

Что-ж, если вы дочитали (или пролистали) до этого абзаца – значит (по крайней мере, я на это надеюсь) вы в полной мере понимаете, что вы делаете и зачем вам это нужно.

Приступим, непосредственно, к настройке.
У меня установлена версия RouterOS 7.6 и в ней уже встроен IPv6. В случае с шестой веткой, возможно, вам потребуется включить одноимённый пакет поддержки протокола.

1) Включаем DHCPv6-client прямо на pppoe соединении.
Галочками отмечены опции для получения DNSv6 от провайдера, и ещё Rapid commit, которая позволяет быстрее «договориться» с DHCPv6 сервером, в случае, если на нём так-же включена такая опция.

В интерфейсах выбираем ваше PPPoE соединение в сторону саркора. В качестве имени пула можно указать что фантазии угодно. Длинна префикса в моём случае /64 бита. Если вдруг вам посчастливится стать владельцем сети покрупнее – ставьте соответствующее число. Маршрут по умолчанию далее мы получим в любом случае, так что галочку тут можно не ставить.

2) Если всё завязалось как надо, в нижнем правом углу окошка настройки DHCP клиента вы увидите надпись Status: bound а во вкладке status вы найдёте префикс, выданный провайдером.
Копируем этот префикс в буфер и переходим в IPv6 > Addresses

Добавляем новый адрес. В поле адреса вставляем из буфера ранее скопированный префикс. В поле From pool выбираем пул адресов. Если он у вас не появился, значит что-то пошло не так в предыдущих шагах.
В качестве интерфейса тут нужно выбрать тот интерфейс, через который ваш роутер будет раздавать адреса в локальную сеть. Этот способ заменят привычный нам DHCPv4. Тут вместо DHCP так называемый «Advertising» который в данном случае можно перевести как объявление адресов в сеть. Если хотим раздать адреса – отмечаем соответствующий чекбокс. Альтернативный путь – не раздавать адреса кому попало, а прописать их вручную только нужным устройствам. Имейте в виду, что на данный момент наш любимый tas-ix не особо в курсе, что такое ipv6 по этому, скорее всего, трафик в этом адресном пространстве побежит мимо всяких пиринговых стыков и локальных CDN. Подумайте хорошенько, нужно ли вам это. :)

3) Если не передумали, двигаем в IPv6 > Neghbor Discoveri и убеждаемся в том, что ND включен для интерфейса, в котором обитает наше сетевое окружение. По дефолту в этой настройке стоит разрешение на все интерфейсы, но я предпочёл ограничиться бриджем своей локалки, ибо интерфейсов у меня много, а раздавать туда адреса совершенно ни к чему.

4) Так-же, на всякий пожарный, стоит заглянуть в ipv6 > settings и убедиться в том, что поддержка протокола не выключена, а транзит (forward) не запрещён.

При необходимости, можно зайти в IP > DNS и добавить туда какие-либо дополнительные v6 адреса DNS серверов. В моём случае я уже получил их динамически по DHCPv6.

5) И вот наступает момент, когда, казалось бы, всё должно работать, но тут меня ждал подлый сюрприз. Половина сайтов не открывается, а SSH сессия по ipv6 тупо зависает, спустя несколько секунд после подключения. Я попробовал открыть ssh сессию прямо с микротика и как ни странно, она заработала нормально. Тогда мне пришло в голову проверить, какой размер пакета пролезает через сеть с роутера, а какой с клиента локалки. Пинги с разной длиной пакета сразу же указали на ключ к разгадке: если с роутера пакеты спокойно добегали в размере 1492 байта (MTU PPPoE соединения) то с клиентской машины максимальный размер оказался 1444 байта. Ну это уже ни в какие фреймы..! ;) Если честно, я пока так и не разобрался в причинах такого поведения, и решил проблему добавив в фаерволл правила для автоматической подстройки размера пакета.

И так, идём в IPv6 > Firewall > Mangle и жмём плюсик.

У двух правил разные только направления, всё остальное идентично друг другу.

Конечная остановка: 

Если вы всё сделали верно – попингуйте мой сайт, и вы увидите длинный и некрасивый ipv6 адрес. ;)


!ВАЖНО!
Напоминаю ещё раз! Не забудьте про фаерволл. Вот базовые правила, которые закроют всю активность извне, разрешая при этом вашей локалке бегать в интернеты.

/ipv6 firewall filter
add action=accept chain=input comment="Related, Established" connection-state=\
established,related,untracked
add action=accept chain=input comment="accept from my net" in-interface=bridge
add action=accept chain=input comment="accept ICMPv6" protocol=icmpv6
add action=accept chain=forward comment="Related, established" connection-state=\
established,related,untracked in-interface=sarkor
add action=drop chain=forward comment="DROP fw to my net" connection-state=invalid,new in-interface=\
sarkor
add action=drop chain=input comment="DROP all input" connection-state=invalid,new in-interface=sarkor \
protocol=tcp

Имя интерфейса заменить на имя вашего PPPoE соединения. Исключения добавлять по необходимости. Варить 20 минут, соли по вкусу. ;)