Как стать автором
Обновить

Настройка WireGuard на Mikrotik

Время на прочтение5 мин
Количество просмотров114K

Что такое WireGuard

Если не касаться wiki и официального сайта, и объяснять как можно проще, то это VPN туннелирование через UDP.

Это возможность быстро, максимально просто и надёжно, с хорошим уровнем безопасности соединить две точки между собой.

Соединение одноранговое, открытый исходный код, и полу-автоматизированное создание маршрутов(для некоторых клиентов) - что еще нужно, для счастья ;)

Возможность использовать WireGuard появилась в mikrotik начиная с седьмой версии RouterOS.

Как работает подключение (простым языком)

У нас есть две точки:

  • Точка А с внешним адресом 111.111.111.111

  • Точка Б с внешним адресом 222.222.222.222

С точки зрения WireGuard эти адреса называются Endpoint.

Также у точек есть внутренние сети или LAN:

  • Точка А. 192.168.100.0/24

  • Точка Б. 192.168.200.0/24

Эти сети мы и хотим связать между собой. Для WireGuard это называется AllowedAddress, или разрешенные адреса для точки. Для Точки А нам нужно будет указать разрешенные адреса - 192.168.200.0/24. Для Точки Б, соответственно - 192.168.100.0/24

Помимо этого мы должны определить для точек А и Б их адреса. Они используются для интерфейса, который создает WireGuard и передачи внутри протокола. В настройках большинства клиентов это будет называться Address. В mikrotik мы создадим отдельный адрес.

  • Точка А. 10.10.10.1

  • Точка Б. 10.10.11.1

Всё! Этого достаточно для создания подключения и его работы.

В итоге всё это будет выглядеть так:

Краткая схема работы WireGuard
Краткая схема работы WireGuard

Отличия WireGuard и OpenVPN

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

  • В WireGuard не нужно создавать сертификаты, в отличии от OpenVpn, и следить за ними. Это и плюс и минус в зависимости от цели использования.

  • В WireGuard создаются одноранговые соединения, где каждая точка может быть как сервером так и клиентом. Это позволяет создавать, помимо классических "звёзд", ещё и mesh сети.

  • OpenVPN позволяет более тонко управлять клиентами и их подключениями. Например, можно индивидуально раздавать маршруты и DNS-серверы для клиентов. WireGuard так не умеет.

  • Отдельно для mikrotik есть недостаток в том, что для каждой подсети нужно настраивать маршруты. Для win-клиентов они определяются и задаются исходя из AllowedAddress.

В целом я для себя сделал вывод, что для внешних пользователей удобнее и, возможно, безопаснее использовать OpenVPN. А для железных(ака аппаратных) или программных роутеров и их связи между собой удобнее WireGuard. По принципу - настроил и забыл.

Подготовка к настройке

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

Проверить, это можно просто взглянув на пункты меню (актуально для версии 7.5):

Обновить можно попробовать так:

стандартный способ обновления
стандартный способ обновления

Если так не получилось, то смотрите свою версию в заголовке winbox устройства

в данном случае это mipsbe
в данном случае это mipsbe

и идите на официальный сайт mikrotik для скачивания последней версии ОС.

Коротко, как обновить через загрузку файла на Mikrotik:

Если у Вас много точек и так же для удобства настройки и дальнейшего обслуживания я рекомендую создать Вам подобную таблицу:

Name

Address

Endpoint

EndpointIp

AllowedIPs

ListenPort

PrivateKey

PublicKey

PointA

10.10.10.1

www.pointA.com

222.222.222.222

10.10.11.1/32,192.168.200.0/24

13231

ucwL8IWLNYrPHOu9qk70ZOagPgjJXhzvvkg7ZLooaj4=

PointB

10.10.11.1

www.pointB.com

111.111.111.111

10.10.10.1/32,192.168.100.0/24

13231

FxNwKIFINspWh5pkoFpS5LzNKMDjkqcAV/Ypo2Ed8ys=

Вам так будет проще ориентироваться в дальнейшем

Настройка WireGuard на Mikrotik

Итак, у Вас есть WireGuard на Mikrotik, и теперь мы можем начать настройку.

Прежде всего нам нужно создать интерфейс, чтобы получить публичный ключ или Public Key. Я ранее про него не писал умышленно, чтобы было проще понять принцип работы WireGuard.

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

Создаем интерфейсы и копируем публичные ключи
Создаем интерфейсы и копируем публичные ключи

Создаем интерфейсы и копируем себе публичные ключи.

Скрипт для быстрой настройки

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

# EXAMPLE start
# Peer A params
# Name peerAname "PointA"
# Interaface Address peerAifAddress "10.10.10.1/24"
# AllowedIPs peerAallowed 10.10.11.1/32,192.168.200.0/24
# EndPoint peerAendAddress "111.111.111.111"
# EndPort peerAendPort 13231
# PublicKey peerAkey "ucwL8IWLNYrPHOu9qk70ZOagPgjJXhzvvkg7ZLooaj4="
# Peer B params
# Name peerBname "PointB"
# Interaface peerBif "PointB"
# AllowedIPs peerBallowed 10.10.10.1/32,192.168.100.0/24
# EndPoint peerBendAddress "222.222.222.222"
# EndPort 13231
# PublicKey "FxNwKIFINspWh5pkoFpS5LzNKMDjkqcAV/Ypo2Ed8ys="
# EXAMPLE end

{
# Peer A params
# SET PARAMS HERE
:local peerAname "PointA"
:local peerAifAddress "10.10.10.1/24"
:local peerAallowed 10.10.11.1/32,192.168.200.0/24
:local peerAendAddress "111.111.111.111"
:local peerAendPort 13231
:local peerAkey "ucwL8IWLNYrPHOu9qk70ZOagPgjJXhzvvkg7ZLooaj4="
# Peer B params
:local peerBname "PointB"
:local peerBifAddress "10.10.11.1/24"
:local peerBallowed 10.10.10.1/32,192.168.100.0/24
:local peerBendAddress "222.222.222.222"
:local peerBendPort 13231
:local peerBkey "FxNwKIFINspWh5pkoFpS5LzNKMDjkqcAV/Ypo2Ed8ys="
# start select
:local input do={:put $input;:return}
:local selectedPeer [$input "Enter current Peer A or B"]
:put "You select is $selectedPeer. Finished!"
# end select
{
# start for A
:if ($selectedPeer = "A") do={
# add address
/ip address
add address=$peerAifAddress interface=$peerAname comment=$peerAname
# add firewall rule
/ip firewall filter
add action=accept chain=input dst-port=$peerAendPort in-interface-list=WAN protocol=udp comment="WireGuard $peerAname"
# add peer
/interface/wireguard/peers
add allowed-address=$peerBallowed endpoint-address=$peerBendAddress endpoint-port=$peerBendPort interface=$peerAname public-key=$peerBkey persistent-keepalive=10 comment=$peerBname
# add route
/ip/route
:foreach peer in=$peerBallowed do={
add dst-address=$peer gateway=$peerAname comment=$peerBname
}
}
# end for A
# start for B
:if ($selectedPeer = "B") do={
# add address
/ip address
add address=$peerBifAddress interface=$peerBname comment=$peerBname
# add firewall rule
/ip firewall filter
add action=accept chain=input dst-port=$peerBendPort in-interface-list=WAN protocol=udp comment="WireGuard $peerBname"
# add peer
/interface/wireguard/peers
add allowed-address=$peerAallowed endpoint-address=$peerAendAddress endpoint-port=$peerAendPort interface=$peerBname public-key=$peerAkey persistent-keepalive=10 comment=$peerAname
# add route
/ip/route
:foreach peer in=$peerAallowed do={
add dst-address=$peer gateway=$peerBname comment=$peerAname
}
}
# end for B
}
}

Его можно запускать прямо из терминала, либо из winbox открыв терминал. Так же вы можете добавить его в System -> Scripts и запустить из терминала, но так как это разовая процедура, не вижу в этом особого смысла.

Для начала внесите все необходимые параметры в строки переменных :local, затем скопируйте и вставьте скрипт в терминал. Вам нужно будет только выбрать точку в которой вы находитесь А или B. Введите её и нажмите Enter.

Так нужно будет повторить в каждой точке!

Скрипт создаёт address, правило firewall для доступа из вне по списку interface list WAN. Список интерфейсов WAN создаётся по умолчанию. Если его нет, то добавьте.

Далее, скрипт создаёт настройки точки Peers для подключения и добавляет все необходимые маршруты Routes, которые берёт из Allowed Address

Ну или вы можете прописать всё руками по следующим скриншотам:

Создаём адрес и подсеть для нашего интерфейса
Создаём адрес и подсеть для нашего интерфейса
Создаём правило Firewall
Создаём правило Firewall
Прописываем маршруты
Прописываем маршруты
Добавляем точку к которой хотим подключится
Добавляем точку к которой хотим подключится

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

И в конце добавлю общую схему со всеми параметрами:

Общая схема работы и настройки WireGuard
Общая схема работы и настройки WireGuard

Теги:
Хабы:
+21
Комментарии26

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн