Mikrotik (RouterOS) + Wireguard

Вступление

Один из способом сделать доступным некоторые внутренние (домашние) сервисы из Интернета является VPN. Можно, конечно, отдельные порты опубликовать и через ssh, но для более полноценной связи лучше использовать другие решения. Я уже писал и про ZeroTier, и про OpenVPN, и получил упреки, что незаслуженно забыл про Wireguard…

Так или иначе, мне стало не хватать VPN клиента (в т.ч. и Wireguard) на отдельно стоящем серверочке, потребовалось связать (в данном случае с vNet в Azure, хотя это не принципиально) всю домашнюю сеть с несколькими ресурсами. И я решил, что пора уже сделать это через роутер, для полноценного site-to-site.

Хотя Keenetic и научился поддерживать Wireguard на новых прошивках, для старенькой Ultra я такой не нашел. С OpenWRT тоже не срослось (для Ultra II есть, а моя моедль старовата). Так что я решил, что пора проапгрейдиться. И, поскольку Mikrotik RouterOS выкатила бету 7 версии с Wireguard, я решил, что пора изучить это чудо.

Действительность оказалась несколько сложнее, чем я рассчитывал, однако все получилось. И сейчас опишу основные моменты, которые нигде не смог найти, и до которых пришлось доходить самому.

Основные моменты

Взял я MikroTik hAP ac2. Модель старая, без излишеств, но все, что нужно, делает.

Хотя дела с Микротиками я раньше не имел, запустил его достаточно быстро. Были некоторые сложности с тем, что в настройке DHCP Server недостаточно установить Network, чтобы IP адреса начали раздаваться из этой сети. Оказалось, что есть еще и отдельный IP Pool. Но это мелочи. Так что довольно быстро я приступил к настройкам именно Wireguard.

Конечно же, ничего не заработало. Более того, «на той стороне» я даже не видел входящих пакетов.

c8cb169b3913ff7cde51d7255e6c6519.png

Потом уже я обратил внимание, что в поле Endpoint указан только IP адрес, но отсутствует порт. Попробовал указать его явно, но обломался. Поле становится красным и не проходит валидацию.

8eac5b7329b8df17afdfc4f4e51da37c.png

Пошел разбираться с командной строкой. Для меня, в первый раз увидевшего RouterOS, там, конечно, не сахар. Более-менее, разобрался, конечно. Но как узнать, какие вообще параметры имеются, так и не понял. Ну т.е. до /interface wireguard peers я добрался. Даже про add догадался. Только вот при этом система спрашивала только interface, public-key и allowed-address. В общем, всякими переборами подобрал команду:

add allowed-address=192.168.66.128/25,10.10.0.0/16 endpoint=66.166.166.42:51820 \
interface=wg0 persistent-keepalive=30 public-key="многобукв="

Т.е. порт можно указать только через командную строку. Впрочем, все равно не заработало.

Напомню, что wg0 был создан ранее через web-интерфейс. Или WinBox, не помню. Он чуток получше, чем веб-интерфейс, но порт тоже не давал указать. И тут до меня дошло, что на обычном Linux я ведь еще IP адрес своего локального хоста указываю. А тут его не задавал. Заработало только после:

/ip address
add address=192.168.66.253/24 interface=wg0 network=192.168.66.0

Собственно все:) В сети есть инструкции, как установить Wireguard на Mikrotik с OpenWRT. Но как по мне, это извращение. А вот поднять его в родном RouterOS можно за несколько минут. Когда уже знаешь, как. Работает прекрасно, вообще без нареканий.

P.S. Адреса я, конечно, менял. Но allowed-address=192.168.66.128/25 и add address=192.168.66.253/24 не ошибка. Просто у меня к двум серверам подключение. Половина сети класса С на один сервер, половина на другой.

P.P. S. Почему Wireguard, а не OpenVPN? Например, производительность:

ba55630e572d403ba3d7353f4f857d7d.png

https://blog.entrostat.com/openvpn-vs-wireguard-network-performance-tests/

А еще простота настройки и кое-что по мелочи.

© Habrahabr.ru