Mikrotik: больше никаких компромиссов!

Ещё пару-тройку лет назад, я считал OpenWRT апогеем удобства и гибкости для небольших сетей. Ради этой прошивки, я не поскупился на железку, не из самого бюджетного сегмента. Тем не менее я получил не совсем то, что хотел. Да, я получил возможность внедрить в домашнюю сеть некоторые “навороты”, как например: управление приоритизацией трафика, сетевое хранилище на базе роутера, ведение статистики по клиентам в домашней сети и даже поддержка сервера VoIP на той же железке. Казалось, что теперь я могу контролировать всё и делается это относительно просто. И вот однажды я решил поиграться с не очень популярным среди обычных пользователей устройством. Мне в руки попал Mikrotik hAP lite.

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

Независимо от ценовой категории, все роутеры Mikrotik работают на проприетарной операционной системе RouterOS и имеют примерно одинаковый набор возможностей, а все отличия в основном связаны с составом аппаратных интерфейсов. Исключением является поддержка виртуализации, наличие которой зависит от архитектуры процессора.

Знакомство с RouterOS принесло мне массу приятных впечатлений. Больше всего меня поразило представление, в котором было объединено огромное количество сетевых технологий профессионального класса. Интерфейс настройки устройства содержит в себе практически всё, что можно было впихнуть в маршрутизатор, но при этом, всё это организовано в максимально понятном и удобном виде. Кроме того, в сравнении с маршрутизаторами на базе обычных дистрибутивов Linux, RouterOS выглядит монолитной и потому, гораздо более надёжной системой. Это становится особенно заметным, когда замечаешь соблюдение взаимосвязи параметров настроек из разных частей интерфейса конфигурации. Так, к примеру, удаление объекта, от которого зависит другой объект вовсе не вызовет неожиданных ошибок и невозможности запуска всего сервиса.

Моя домашняя сеть больше никогда не будет прежней…

Держа в руках такой “бешеный комбайн”, так и хочется опробовать всё, что он только может. :) Конечно, многое из этого для маленькой частной сети просто не нужно. Но всё же, я напряг свою фантазию и приправил свою домашнюю сеть кое-чем интересным.

Со статикой у нас беда, по этому сначала включаем DDNS. Имя длинное, за то бесплатно. ;) Кстати, если имеется собственный домен, то можно упростить себе жизнь, путём создания CNAME записи и прикрепления её к бесплатно полученному имени. Главное – не забудьте поставить максимально короткий TTL.

По роду моей деятельности, мне приходится управлять несколькими закрытыми сетями, и тем, что в них находится. Для этого я использую VPN туннели. Раньше, по необходимости, я подключался к каждому из этих туннелей прямо с рабочего компьютера. Но гораздо более удобным вариантом было иметь постоянный доступ ко всем сетям одновременно. Четвёртый уровень лицензии RouterOS (который поставляется с домашними моделями) позволяет содержать до 200 VPN соединений. Этого должно хватить даже самым прожжённым сисадминам. ;) Дабы не накручивать дополнительные таблицы маршрутизации с ретрансляцией адресов, я заранее позаботился о том, чтобы подсети за каждым из этих соединений были разными и не пересекались друг с другом.

Убираем с VPN соединений добавление маршрута по умолчанию, а вместо него добавляем статические маршруты в каждую из подсетей. В качестве шлюза нужно указать имя VPN интерфейса.

Теперь, когда мой домашний роутер превратился в ЦУП, необходимо сделать так, чтобы работать можно было и за пределами дома. Для этого нужно настроить VPN сервер, с которым я смогу соединиться откуда угодно. В качестве имени сервера для удалённого подключения я буду использовать ранее полученное имя с DDNS.

Гибкость тут не ограничена, по этому можно позволить себе отделить котлеты от мух  гостевую сеть от основной, к примеру для того, чтобы клиенты на вашем Wi-Fi никак не смогли попасть куда им не следует. Для этого можно создать несколько разных пулов IP адресов, а в фаерволле ограничить транзит из одних подсетей в другие, изолировав таким образом их друг от друга.

Я не стал настраивать OpenVPN и SSTP, поскольку подключение по этим протоколам требует специфической настройки с клиентской стороны, а pptp и l2tp мена пока ещё не подводили.

Если нужно настроить QoS, следует учитывать скорости разных сетевых направлений. В моём случае часть ресурсов в направлении Tas-ix доступна на скорости 100 мегабит, а всё остальное ограничено тарифным планом на 5 МБит/с. Следовательно, у меня бы ни за что не получилось делить скорость поровну, если бы я не разделил очереди по направлениям. Для этого я добавил нужные подсети в Address List и в соответствии с этим списком разметил входящие и исходящие соединения.

Теперь трафик в моей домашней сети делится между “по-братски” между всеми её клиентами. ;) При необходимости, отдельным клиентам можно установить персональные ограничения. Кстати, Address List поддерживает не только ip адреса, но и домены. В этом случае к добавленной записи с именем хоста будет автоматически добавлена динамическая запись с его резолвом.

IPv6

У меня есть динамический IPv4. Динамический, но за то белый! А раз так, можно добавить ещё чего-нибудь. Например подключить IPv6.

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

Теперь, когда пакет IPv6 добавлен, нужно получить сеть. Если ваш провайдер даёт нативный IPv6 – круто! В моём случае мне доступен только вариант с туннельным брокером. О нём и пойдёт речь.

Регистрируемся вот тут https://tunnelbroker.net/

После регистрации и добавления нового туннеля, можно приступить к настройке микротика

Приятная деталь заключается в том, что Hurricane Electric встроили в кабинет генератор настроек с шаблонами под разное железо. Смело вносим эти настройки в роутер. Более подробную инструкцию, как раздать адреса вашей локалке, а также настроить DNS и фаерволл под IPv6 смотрите вот тут https://telecom-sales.ru/content/stati/nastrojka-ipv6-s-pomoshyu-tunnelbrocker-na-mikrotik/

Учитывая, что IP адрес у меня динамический, мне понадобился скрипт обновления внешнего адреса на стороне туннельного брокера. Скрипт этот выглядит вот так:

:local HEtunnelinterface "sit1"
:local HEtunnelid "ПАРОЛЬ"
:local HEuserid "ЛОГИН"
:local HEmd5pass "КЛЮЧ ОБНОВЛЕНИЯ ДЛЯ API"
:local HEupdatehost "ipv4.tunnelbroker.net"
:local HEupdatepath "/nic/update"
:local WANinterface "Имя WAN интерфейса"
:local outputfile ("HE-" . $HEtunnelid . ".txt")

# Internal processing below...
# ----------------------------------
:local HEipv4addr

# Get WAN interface IP address
:set HEipv4addr [/ip address get [/ip address find interface=$WANinterface] address]
:set HEipv4addr [:pick [:tostr $HEipv4addr] 0 [:find [:tostr $HEipv4addr] "/"]]

:if ([:len $HEipv4addr] = 0) do={
   :log error ("Could not get IP for interface " . $WANinterface)
   :error ("Could not get IP for interface " . $WANinterface)
}

# Update the HEtunnelinterface with WAN IP
/interface 6to4 {
   :if ([get ($HEtunnelinterface) local-address] != $HEipv4addr) do={
      :log info ("Updating " . $HEtunnelinterface . " local-address with new IP " . $HEipv4addr . "...")
      set ($HEtunnelinterface) local-address=$HEipv4addr
   }
}

:log info ("Updating IPv6 Tunnel " . $HEtunnelid . " Client IPv4 address to new IP " . $HEipv4addr . "...")
/tool fetch mode=https \
                  host=($HEupdatehost) \
                  url=("https://" . $HEupdatehost . $HEupdatepath . \
                          "?hostname=" . $HEtunnelid . \
                          "&myip=" . $HEipv4addr) \
                  user=($HEuserid) \
                  password=($HEmd5pass) \
                  dst-path=($outputfile)
                  
:log info ([/file get ($outputfile) contents])
/file remove ($outputfile)

Скрипт можно запускать через шедаллер или по событиям. Первый вариант у меня прижился лучше.

Гостевая сеть с отдельным выходом в интернет.

Новогодние праздники – хороший повод творить добро! Вот и я не стоял на месте и придумал раздать всем вокруг свой Wi-Fi. Но, так как в моей сети посторонним шастать не следует, да и вообще, не хотелось бы выпускать кого попало со своего домашнего IP адреса, я решил схитрить.

Создаём гостевую сетку на виртуальном интерфейсе. Прикручиваем к нему открытый профайл.

Настраиваем DHCP для гостевой сетки и даём ей какой-нибудь левый пул.

А теперь самое главное. Добавляем маршрутизацию. Для это надо сначала пометить пакеты, которые исходят из нашей гостевой сетки.

А маршрут будет уходить через VPN интерфейс.

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

Первым мы разрешим транзит через VPN, а вторым запретим всё остальное с гостевого интерфейса. Ну вот и всё!

Продолжение, скорее всего, следует… ;)