RouterOS WireGuard

21 августа 2020 года, компания MikroTik опубликовала версию RouterOS 7.1beta2 с поддержкой WireGuard

What's new in 7.1beta2 (2020-Aug-21 12:29):

!) added "bgp-network" output filter flag;
!) added bonding interface support for Layer3 hardware offloading;
!) added IPv6 nexthop support for IPv4 routes;
!) added Layer3 hardware offloading support for CRS309-1G-8S+IN, CRS312-4C+8XG-RM, CRS326-24S+2Q+RM and CRS354-48G-4S+2Q+RM;
!) added WireGuard support;
*) disk - improved external disk read/write speed;
*) ospf - fixed point to point routes becoming inactive;
*) route - fixed source address selection of outgoing packets;
*) other minor fixes and improvements;

Давайте попробуем посмотреть что нам подготовили ребята из MikroTik и попробуем разобраться в каких-нибудь деталях.

Главное помните в production есть место только long-term релизам, не о каких stable и тем более testing или development не идёт и речи.

Обновляем RouterOS до версии RouterOS 7.1beta2 и смотрим в winbox.

.Раздел WireGuard в главном меню WinBox

Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard

Как видим WireGuard доступен в WinBox сразу в главном меню, но через консоль он доступен, как и положено в разделе interface.

[admin@vasilevkirill.ru] /interface/wireguard> 

На всякий случай напоминаю, что в RouterOS седьмой версии слегка изменился синтаксис, теперь разделитель между разделами не пробел, а слеш (slash), по аналогии так же как и в API RouterOS шестой версии, что конечно значительно удобнее.

Создадим интерфейс

[admin@vasilevkirill.ru] /interface/wireguard add name=wireguard-test listen-port=666

И посмотрим результат

[admin@vasilevkirill.ru] /interface wireguard
add listen-port=666 mtu=1420 name=wireguard-test private-key="WAXLRnORvGTkuoSVVH6hqx89bLyW88q51ThCifSxv3o="

Кстати обратите внимание export всё ещё выводит путь к разделу, в старом формате. Да пока синтаксис обратно-совместим, можно пользоваться как пробелом, так и слешом для разделения уровней.

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

Нам необходимо выяснить публичный ключ

[admin@vasilevkirill.ru] /interface/wireguard print 
 0 name="test" mtu=1420 listen-port=666
   private-key="WAXLRnORvGTkuoSVVH6hqx89bLyW88q51ThCifSxv3o=" 
   public-key="Cz1ar0f20XfkV93GqubTBO1zArFP4PxHyJs4hXxWGE0="

Именно этот public ключ мы должны передать на клиента.

Так же необходимо назначить на интерфейс WireGuard ip адрес

[admin@vasilevkirill.ru] /ip address
add address=10.255.255.1/24 interface=wireguard-test

Далее заходим на самого клиента, в моём случае я буду делать всё на iPhone на других платформах аналогично с учётом специфика клиента.

Заходим в клиентаСоздаём туннель
Васильев Кирилл Mikrotik RouterOS WireGuard
Васильев Кирилл Mikrotik RouterOS WireGuard

Далее нам необходимо подготовить интерфейс на клиенте

Задаём имя интерфейсаГенерируем ключи
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard
Скопируйте public ключНастройка сети
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard

Ключ нам необходимо передать на MikroTik, а адреса клиентов должны лежать в сети адреса интерфейса WireGuard указанном на MikroTik.

Необходимо настроить peer на клиенте

Настройки пираПараметры для peer
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard
Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard

Добавляем клиента на MikroTik

[admin@vasilevkirill.ru] /interface wireguard peers
add allowed-address=0.0.0.0/0 interface=wireguard-test persistent-keepalive=10 \
	public-key="0XNCHvwFammDULmDQ50vLKq4jAnD4pDpVTSOnzZjbG4="

public-key - которые был сгенерирован на клиенте.

.Проверка

Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard

.Результат на клиенте

Васильев Кирилл Vasilevkirill Mikrotik RouterOS WireGuard

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

Я же здесь просто хотел вам показать, что это работает и с этим можно жить.

Поделиться

Обсуждение