Настройка WireGuard между Mikrotik и Windows
Уже много информации в Интернете написано про WireGuard, но большинство инструкций для его настройки перегружены лишней информацией. Поэтому решил написать несколько статей в стиле «1, 2, 3».
В этой статье настроим WireGuard соединение между компьютером с Windows и роутером Mikrotik.
Внимание! Данная информация представлена исключительно в целях обеспечения защищённого удалённого доступа.
На микротике требуется версия ROS 7.x. Для Windows скачиваем клиент WireGuard с официального сайта.
WireGuard не имеет в своей терминологии выделенного сервера. Вместо этого есть пиры — это каждый участник сети. Хотя бы один пир должен иметь белый IP-адрес. При этом все пиры равноправны и настраиваются совершенно одинаково.
Предположим, что микротик имеет белый IP-адрес 203.0.113.10
и соединён с локальной сетью 192.168.1.0/24
. Задача организовать доступ к микротику (и локальной сети) с удалённого компьютера.
Создаём WG-интерфейс на микротике. Для этого выбираем одноимённый пункт меню и нажимаем на плюсик. В появившемся окне вводим номер порта (по-умолчанию 13231) и сразу нажимаем кнопку «Apply«. Автоматически будут сгенерированы приватный и публичный ключи:
Публичный ключ запишем, он нам понадобится. После этого нажимаем OK.
Теперь назначим IP-адрес интерфейсу. Можно выбрать любой из диапазона для локальных сетей. Например, 10.100.100.1/24
. Делается это как обычно в IP — Addresses:
Теперь аналогичную операцию делаем в клиенте под Windows. Нажимаем кнопку «Добавить тоннель» — «Добавить пустой тоннель«. Появится окно с текстовым файлом конфигурации. Здесь вводим название тоннеля. И тоже копируем публичный ключ:
Добавляем сюда IP-адрес из выбранной подсети:
Address = 10.100.100.2/24
Теперь необходимо, чтобы наши пиры узнали друг о друге. Для этого на микротике в окне WireGuard переключаемся на вкладку Peers и добавляем новый пир:
Здесь нас интересуют следующие поля:
Public Key
— сюда вставляем ранее скопированный открытый ключ с компьютера.Endpoint
иEndpoint Port
— IP-адрес и порт подключения к пиру. Если пир не имеет белого IP, то просто не заполняем.Allowed Address
— дословно «разрешённые адреса», но я не согласен с таким названием. Правильнее было бы назвать «маршрутизируемые адреса». Здесь необходимо указать IP или их список, который нужно завернуть в тоннель. В самом минимальном случае здесь указывается IP адрес пира (туннельный) или его подсеть. Со стороны микротика нам не нужно заворачивать никакой трафик в туннель, поэтому так и поступим.
В результате у нас должно получиться примерно так:
Переходим к настройке в Windows. Там нам нужно добавить в текстовую конфигурацию ещё один раздел — [Peer]
и дописать необходимые параметры:
PublicKey
— соответственно открытый ключ из микротика.Endpoint
— точка подключения к пиру-микротику. Так как он у нас имеет белый IP-адрес, то указываем его и порт.AllowedIPs
— здесь возможны несколько вариантов:10.100.100.1
— так мы разрешим удалённый доступ только к самому микротику.10.100.100.0/24
— доступ ко всем пирам в сети WireGuard (если их у нас больше двух).10.100.100.0/24
,192.168.1.0/24
— доступ к микротику, а также к устройствам в локальной сети (наш вариант).0.0.0.0/0
— а так мы завернём в WG-туннель весь трафик с компьютера.
PersistentKeepalive
— данный параметр позволяет поддерживать соединение открытым путём периодической отправки пустого пакета. Указывается время в секундах.
В итоге файл конфигурации будет выглядеть примерно следующим образом:
[Interface]
PrivateKey = qIFxFE916Bl7g3wQf3qvcd+jfoGd3V528ybq/1vqk0s=
Address = 10.100.100.2/24
[Peer]
PublicKey = fYzxjqDWyZOHkZnjQy+fP7fK0YoDxSDkbGOqIGl8aUU=
AllowedIPs = 10.100.100.0/24, 192.168.1.0/24
Endpoint = 203.0.113.10:13231
PersistentKeepalive = 25
Сохраняем изменения. Окно клиента теперь содержит информацию об интерфейсе и о пире:
Пробуем подключиться. Не радуйтесь, если увидите статус «Подключен». Это ещё ничего не значит. Пробуем пропинговать удалённый пир (конечно не забываем, что в фаерволе должно быть разрешение ICMP пинга). Если всё нормально, то пакеты должны успешно вернуться. При этом в окне клиента можно наблюдать передачу/получение трафика:
Ну и для того, чтобы можно было получать доступ к локальной сети — необходимо добавить SRC-NAT правило. Например, такое:
Всё, мы получили безопасный и удобный удалённый доступ к своей локальной сети из любой точки мира.
Обратите внимание, что необходим обмен только публичными ключами. При этом утечка этих ключей не страшна. Главное хранить в секрете только приватные ключи. В этом плане технология очень похожа на PGP.
Время на прочтение5 мин
Количество просмотров211K
Что такое 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 и OpenVPN
Я не являются специалистом по сетевым протоколов и криптографических систем, поэтому не могу дать детальное сравнение этих решений. Но могу выделить несколько основных отличий для меня, как пользователя и администратора:
-
В WireGuard не нужно создавать сертификаты, в отличии от OpenVpn, и следить за ними. Это и плюс и минус в зависимости от цели использования.
-
В WireGuard создаются одноранговые соединения, где каждая точка может быть как сервером так и клиентом. Это позволяет создавать, помимо классических «звёзд», ещё и mesh сети.
-
OpenVPN позволяет более тонко управлять клиентами и их подключениями. Например, можно индивидуально раздавать маршруты и DNS-серверы для клиентов. WireGuard так не умеет.
-
Отдельно для mikrotik есть недостаток в том, что для каждой подсети нужно настраивать маршруты. Для win-клиентов они определяются и задаются исходя из
AllowedAddress
.
В целом я для себя сделал вывод, что для внешних пользователей удобнее и, возможно, безопаснее использовать OpenVPN. А для железных(ака аппаратных) или программных роутеров и их связи между собой удобнее WireGuard. По принципу — настроил и забыл.
Подготовка к настройке
Для начала нужно убедится в том, что наш роутер Mikrotik умеет работать с WireGuard. Далее я буду показывать на примере интерфейса winbox. Если Вы пользуете командную строку, то Вы, скорее всего, сами сможете определить наличие WireGuard.
Проверить, это можно просто взглянув на пункты меню (актуально для версии 7.5):
Обновить можно попробовать так:
Если так не получилось, то смотрите свою версию в заголовке winbox устройства
и идите на официальный сайт 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
Ну или вы можете прописать всё руками по следующим скриншотам:
Надеюсь эта статья помогла кому-то быстро всё понять и настроить. Так как я на понимание, тесты и настройку потратил минимум один день, а то и больше.
И в конце добавлю общую схему со всеми параметрами:
WireGuard — это коммуникационный протокол и бесплатное программное обеспечение с открытым исходным кодом, которое реализует зашифрованные виртуальные частные сети.
Для настройки Wireguard имеем настроенный Mikrotik на RouterOS.
Настройка интерфейса Wireguard
1. Добавление интерфейса WireGuard.
Переходим на вкладку WireGuard → “+” → Name (вписываем понятное для нас имя) → Apply.
Рисунок 1 — Добавление интерфейса WireGuard
2. Назначение IP адреса на интерфейс WireGuard который мы создали – IP → Addresses → “+” → назначаем IP адрес и выбираем наш созданный интерфейс WireGuard.
Рисунок 2 — Назначение IP адреса
3. Разрешить в Firewall входящее соединение на указанный порт:
IP → Firewall → Filter Rules → “+” Chain – input, Protocol – udp, Dst. Port – 34567, In. Interface – ether1 → Apply.
Правило надо перенести выше чем запрещающие правила принимать входящие соединения на внешний интерфейс.
Рисунок 3 — Добавление правила в Firewall
3. Настройка Peer.
Переходим на вкладку WireGuard → Peers → to-windows (наш созданный пир):
- На каком интерфейсе будет ожидаться соединение;
- Публичный ключ противоположной стороны
- Endpoint – внешний IP-адрес противоположной стороны
- Endpoint Port – порт противоположной стороны
- Allowed Address –сети которые будут работать в туннели
Рисунок 4 — Настройка Peer
Настройка клиента WireGuard на Windows
1. В приложение WireGuard на Windows сочетанием клавиш Ctrl + N добавляем пустой туннель.
Рисунок 5 — Добавление пустого туннеля
2. Добавляем в пустой туннель строчки:
[Interface] PrivateKey = UIfsPWz7rxXUsE/7Z7JmHceWOBYY4ATr2P9JlYWXLGg= Address = 10.0.0.2/24 DNS = 8.8.8.8 [Peer] PublicKey = jxE7UkQQwffGEWgLj3GgIYUSjPKpW/zriT3PtE85r08= AllowedIPs = 0.0.0.0/0 Endpoint = 46.188.57.135:13231
Обмен публичными ключами
На Mikrotik берем публичный ключ в WireGuard и открываем наш интерфейс, копируем и вставляем в туннель на Windows.
На Windows берем публичный ключ в нашем созданном туннели и копируем его peer на Mikrotik.
Рисунок 6 — Обмен публичными ключами
Проверка Работоспособности
На Windows нажимаем Подключить и после удачного подключения можно выполнить ping до сети Mikrotik.
Рисунок 7 — Проверка работоспособности
Post Notes: as of RouterOS 7.18 – ip – added support for /31 address
Contents:
Mikrotik WireGuard Interface Setup
Windows Client Setup
Firewall Config
In this guide, I’ll show you how to easily set up a VPN tunnel using WireGuard between a Windows PC and a MikroTik router. Whether you need to manage your router remotely or access hosts on your network from anywhere, this tutorial will covers each aspect and aims to simplify the steps to make it easy for anyone at any skill level.
Mikrotik WireGuard Interface Setup:
On your Mikrotik router navigate to the WireGuard menu, and click on “New” to create a new Wiregurad interface.
Name: The name of the WireGuard interface. Usually you can leave this default, unless you have multiple WireGuard interfaces, and need to organise better.
Listen Port: Most of the time leaving this on the default port which is 13231 is fine.
Everything can be left default, but feel free to customise to this to your needs. Once done, press “OK”.
Once the WireGuard interface is setup, we need to assign an IP subnet to it, which will be used for the VPN tunnel. I’m only planning to add 1 device, so I will use a /30 ptp subnet. However, if your plan is to have multiple devices connected to the VPN at once, using a larger subnet would be required, as each connecting device (peer) needs a unique IP address. You can also add a single ptp subnet for each connecting peer.
To add an IP subnet to the WireGuard interface, Navigate to IP > Addresses, then click on “New”.
Address: This defines the IP address assigned to the WireGuard interface. I’m going to assign 172.16.0.1/30 to the interface, which means 172.16.0.2/30 can be used for my connecting device (peer).
Network: If you leave this blank, RouterOS will fill in the network address automatically, otherwise specific it manually. in pre v7.18 releases, this would have been the other endpoint in a /31 subnet.
Interface: Select the WireGuard interface that we created earlier from the drop down menu.
After assigning an IP address and subnet to the WireGuard interface, we can move on and create the peers. A peer is any device connecting to the Mikrotik’s WireGuard interface. We have to define these explicitly so that our client devices (e.g. Windows computer) are allowed to connect.
Navigate to WireGuard > Peers > and click on “New” to add a new peer. One of the required fields here are the peers private key, which we get from the WireGuard Windows client, so before we can start filling out the fields, we have to install WireGuard on our Windows computer and generate a public key for this peer.
On your Windows system, download and install WireGuard. The downlink can be found 👉 here.
Once done, open the WireGuard application, and click on the downward facing arrow next to “Add Tunnel” and select “Add empty tunnel…”
A new window will pop up called “Create a new tunnel”. In this window you’ll see your newly generated public key near the top of the window. This is your peers public key, and is what we must copy and paste into the Public Key field on the Mikrotik peer setup.
The rest of the peer settings on the Mikrotik are as follows:
Interface: Select the WireGuard interface we created earlier.
Private Key: Leave blank.
Endpoint: This is the IP address of the peer. If you define this, it will only allow the peer to connect if its src address is whatever is defined. I suggest leaving this blank so that the router allows the peer to connect from any IP address.
Endpoint Port: This is the src port of the connecting peer. Leave this blank to allow any port, or define if you want to lock it down further. Note that if you define the port here, you have to also define the same port on the Windows client explicitly.
Private Key: Leave this blank.
Allowed Address: This is the address that your peer is going to be connecting to the tunnel with, and also the address that return traffic to the peer is sent over. Remember, I set 172.16.0.1/30 to the WireGuard interface, and therefore my peer will be using 172.16.0.2, which is what I will be putting in here. I didn’t define a cidr notation here, but since I left it blank the RouterOS will add it as a /32.
Preshared Key: Can be used to setup additional security for decryption. In simple terms, its a password of sorts that gets added onto the encryption keys that would be required to decrypt the data if the keys were ever cracked. Leave this blank to not require one.
Persistent Keep Alive: Defines an amount of seconds, between 1 and 65535 of how often to send an authenticated empty packet to the peer in order to keep a stateful firewall or NAT mapping valid persistently. For our use case this can be left blank. Once this has been setup, we can press “OK” and move on to the WireGuard windows client setup.
WireGuard Windows Client Setup:
As a base template, you can copy paste the below code snippet into your WireGuard tunnel. Just change the values according to your requirements. The Public Key under the “Peer” settings on your windows client must be the Mikrotiks WireGuard interface public key, e.g., the inverse of what we configured on the peers page on the Mikrotik The rest of the lines are quite self explanatory, but take special note of the “AllowedIPs” section:
Adding entries to the “AllowedIPs” field in the configuration file will do two things:
- Adds a route: It will add routes to the specified subnets (e.g., 172.16.0.0/30) on the Windows computer. This means that any traffic destined for these subnets will be routed through the WireGuard tunnel.
- Allows return traffic: It will allow traffic from these subnets to be received back through the WireGuard tunnel. Essentially, “AllowedIPs” defines which IP addresses are allowed to be routed through the tunnel and also specifies which incoming traffic is accepted.
By specifying AllowedIPs = 172.16.0.0/30, x.x.x.x/x, you are configuring the client to route traffic to these subnets through the WireGuard interface and to accept return traffic from these subnets.
If you want to send all traffic to the Mikrotik, and use it as your Windows computers default route, you can add in the address “0.0.0.0/0” to your tunnel, which will force all traffic out the VPN tunnel. Just make sure that you are natting the tunnel subnet, otherwise your Windows computer will not have internet breakout.
[Interface]
PrivateKey = your private key
Address = 172.16.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = your routers wireguard interface public key
PresharedKey = if any else remove from line
AllowedIPs = 172.16.0.0/30, 0.0.0.0/0, x.x.x.x.x/x (remove what you don't need. "0.0.0.0/" if you want to use as default route)
Endpoint = 192.168.88.219:13231 (can also use IP cloud address if public)
Once done, click on “Save” and then “Activate” to bring the WireGuard tunnel up. You once up, the two ends of the tunnel will shake hands, and data can begin to flow over it. You should be able to reach the opposite end point IP, and other subnets specified in your “allowed address” field.
*Important: We’ve not yet discussed firewall requirements. If your tunnel is setup correctly, but you cannot establish a handshake to your router, its likely a firewall issue, which is discussed under this section.
Firewall Config:
There are a number of ways to configure the firewall to allow WireGuard to work correctly, and the exact route you take will depend on your setup. Just keep in mind that at the very least, for the tunnel to establish you have to allow the listen port on the Mikrotiks WireGuard interface in via the WAN interface, using UDP.
To start, navigate to IP > Firewall.
In the firewall filters menu, click on “New” and add a new firewall filter. This is the filter to allow the WireGuard tunnel to form:
Chain: input
Protocol: UDP
Dst.Port: 13231 (or whatever port you set)
Navigate to the Action tab, and set it to “Accept”, then click on “OK” to add this filter in. Make sure to drag this filter into the correct place in your firewall to prevent filters above it overriding it.
Next, lets assume we want to be able to login to the Mikrotik from our Windows computer to manage it. We have to allow that in too. The previous rule we added only allows the tunnel to form. Assuming there are standard catch all rules we have to allow input from the WireGuard interface too so that we can reach the router via the tunnel.
To do this, add another filter:
Chain: input
In.Interface: wireguard1 (your WireGuard interface)
Like before, navigate to the Action tab and set it to “Accept”, then press the “OK” button. Make sure to drag this rule into the right place, like with the rule above it.
This next filter may or may not be required, but it depends on what rules you have for the forward chain. If you have locked your forward chain down, and you have to explicitly define the rules for it, then you’ll need to allow forwards from the WireGuard interface in order to reach other hosts and networks from your Windows computer.
To do this, create a new filter:
Chain: Forward
In.Interface: wireguard1 (your WireGuard interface)
Navigate to the Action tab and set it to “Accept”, then press the “OK” button. Make sure to drag this rule into the right place, like with the rule above it.
With all of this now in place, on my Windows PC, I can once again activate the WireGuard tunnel and now have full routing and access to the Mikrotik router. Any other networks behind the Mikrotik can also be accessed by simply adding the subnet to the WireGuard peers allowed addresses on the Mikrotik.
Рассматривая настройку WireGuard в наших предыдущих материалах, мы намеренно не касались Mikrotik, запланировав для этого отдельную статью. И для этого есть свои причины. RouterOS, под управлением которой работают данные устройства, имеет свои особенности и подходы к настройке, малоинтересные другим читателям. А для пользователей Mikrotik будет лучше, если все нужное будет в одной статье. При этом мы подразумеваем, что администратор, работающий с ROS, имеет более высокий уровень подготовки и владеет основами сетей, поэтому не будем пояснять простые настройки, а сосредоточимся именно на WireGuard.
Онлайн-курс по MikroTik
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Если вас интересует тема WireGuard в более широком ключе, безотносительно оборудования Mikrotik, то рекомендуем прочесть наши материалы:
• Организация каналов между офисами через WireGuard VPN на платформе Linux
• Настройка WireGuard VPN для доступа в интернет
Следующий очень важный момент: Wireguard доступен только в версии RouterOS 7, которая не смотря на статус stable все еще имеет достаточно «детских болезней» и прочих проблем, поэтому не стоит переходить на новую версию без вдумчивого анализа всех плюсов и минусов, а также предварительного тестирования.
В нашем случае будет использоваться CHR с RouterOS 7.2.1 запущенная в виртуальной машине нашей тестовой лаборатории.
Как мы уже говорили, WireGuard — это простой туннель без сохранения состояния, к нему не применимы понятия клиент и сервер, каждый узел WireGuard способен подключаться к другим узлам и сам принимать соединения. Более правильно называть узлы сети — пиры (peer) — инициатором и респондером. Первый инициирует соединение, второй его принимает. Хотя даже в среде профессионалов к узлам WireGuard продолжают применяться термины клиент и сервер, первый подключается, второй принимает подключения. Большой беды в этом нет, но вы должны понимать, что любой узел WireGuard способен выполнять обе роли одновременно.
Mikrotik как респондер (сервер)
В RouterOS 7 появился новый пункт меню — WireGuard, переходим в него на одноименную закладку и создаем новый интерфейс. Заполняем поля Name и Listen Port, их назначения понятны, советуем использовать осмысленные названия интерфейсов, чтобы вы могли понимать, для чего тот или иной предназначен. Ключи будут созданы автоматически.
Если вы предпочитаете работать в терминале, то выполните команду:
/interface wireguard
add listen-port=34567 mtu=1420 name=wireguard-sts
Затем присвоим созданному интерфейсу IP-адрес, для чего перейдем в IP — Addresses и просто добавим нужный адрес.
Или:
/ip address
add address=10.10.0.1/24 interface=wireguard-sts network=10.10.0.0
Также не забудьте разрешить входящие соединения на указанный при создании интерфейса порт, в нашем случае 34567. Это можно сделать в IP — Firewall — Filter Rules добавив правило: Chain — input, Protocol — udp, Dst. Port — 34567, In. Interface — ether1 — в его качестве следует указать внешний интерфейс роутера. Действие можно не выбирать, так как по умолчанию — accept.
Это же можно сделать командой:
/ip firewall filter
add action=accept chain=input dst-port=34567 in-interface=ether1 protocol=udp
Данное правило следует расположить перед запрещающим принимать входящие подключения на внешний интерфейс.
Чтобы к нашему роутеру могла подключаться другие узлы нужно создать для каждого из них пир, для этого возвращаемся в WireGuard — Peers и создаем новую запись. Здесь нам потребуется открытый ключ пира, который следует внести в поле Public Key и указать разрешенные сети в Allowed Address. В нашем случае мы реализуем сценарий удаленного доступа или объединения сетей, поэтому укажем там внутренний адрес в WireGuard сети, который мы выделили пиру и сеть за ним.
В терминале:
/interface wireguard peers
add allowed-address=10.10.0.2/32,192.168.233.0/24 interface=wireguard-sts public-key="9pVP67ehKtQEr6BV46X9SuQrdvys+1QeVT0oeUg71wo="
Еще раз напомним, что вся адресация внутри WireGuard сети назначается администратором вручную и явно прописывается для каждого пира с обоих сторон. Это один из недостатков WireGuard, который следует из его простоты.
С другой стороны, у нас, допустим, будет Windows. Быстро настраиваем там новый туннель, в разделе Interface добавляем выделенный узлу адрес, а в разделе Peer указываем публичный ключ Mikrotik, его адрес и порт, а в разделе разрешенных адресов добавим адрес WireGuard интерфейса и сети за роутером.
Если вы нигде не ошиблись, то подключение будет установлено, и вы сможете получить доступ к сети за роутером. В случае нахождения пира за NAT не забывайте добавить опцию PersistentKeepalive.
Как видим, ничего сложного нет, но при большом количестве пиров прибавляется ручной работы: вы должны сами распределить адреса и прописать настройки с обоих сторон. Никаких средств автоматизации для этого не предусмотрено.
Mikrotik как инициатор (клиент)
В данном разделе мы рассмотрим иной сценарий — использование WireGuard для доступа в интернет, но принципиальной разницы нет, если вы соединяете сети, то можно точно также настроить роутер и все будет работать. Просто мы дополнительно рассмотрим некоторые вопросы касающиеся маршрутизации.
Снова переходим в раздел WireGuard и создаем новый интерфейс. В данном случае достаточно только указать имя, порт нас не интересует, так как мы не собираемся принимать соединения, но его все-таки требуется указать, выбираем любой.
Или вводим команду:
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard-inet
Затем назначаем интерфейсу адрес, если все узлы ваши — то назначаете сами, если подключаетесь к чужому респондеру, то вводите адрес, выданный его администратором. Это действие производится в IP — Addresses.
Это же действие в терминале:
/ip address
add address=10.20.0.105/24 interface=wireguard-inet network=10.20.0.0
Чтобы наш роутер смог куда-то подключиться мы снова должны создать пир. В WireGuard пир — это просто вторая сторона туннеля и не важно мы подключаемся к ней, или она к нам. В любом случае у нас должен быть интерфейс — наша сторона, и пир — противоположная сторона.
Переходим в WireGuard — Peers и создаем новый пир, настроек тут будет побольше, указываем: Interface — созданный нами интерфейс, Public Key — публичный ключ респондера, получаем с той стороны, Endpoint и Endpoint Port — адрес респондера и его порт, Allowed Address — 0.0.0.0/0 — т.е. разрешаем любой трафик в туннеле. Если вы находитесь за NAT, то обязательно добавьте опцию Persistent Keepalive, рекомендуемое значение — 25 секунд.
В терминале тоже достаточно длинная команда:
/interface wireguard peers
add allowed-address=0.0.0.0/0 endpoint-address=x.x.x.x endpoint-port=34567 interface=wireguard-inet persistent-keepalive=25s public-key="kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA="
Также не забудьте включить маскарадинг для созданного интерфейса, переходим в IP — Firewall — NAT и создаем новое правило, на закладке General: Chain — srcnat, Src. Address диапазон локальной сети, например, 192.168.72.0/24, Out. Interface — интерфейс WireGuard, в нашем случае wireguard-inet, на закладке Action выбираем действие masquerade.
Либо в терминале:
/ip firewall nat
add action=masquerade chain=srcnat out-interface=wireguard-inet src-address=192.168.72.0/24
Затем, с другой стороны, также потребуется создать пир для нашего роутера, вам понадобится публичный ключ и назначенный адрес.
Перезапускаем службу и соединение будет установлено. Но трафик как шел через основного провайдера — так и идет. Почему так? Заглянем в таблицу маршрутизации, которая находится в IP — Routes, как видим нулевой маршрут как был через основного провайдера — так и остался. В отличие от официальных пакетов WireGuard, которые управляют маршрутами на хосте, в Mikrotik все отдано в руки администратора.
А дальше все зависит от того, что именно мы хотим получить. Если нам нужен доступ через туннель к отдельным узлам, то просто достаточно создать для них отдельные маршруты. Создаем новое правило, в котором указываем нужный адрес и шлюз, в качестве которого будет выступать противоположный конец WireGuard туннеля.
Теперь снова проверяем (мы добавили маршрут к сервису проверки IP) — все хорошо, мы обращаемся к данному узлу через VPN-сервер.
Добавить маршрут из командной строки можно следующим образом:
/ip route
add disabled=yes distance=1 dst-address=172.67.74.128/32 gateway=10.20.0.1 pref-src=0.0.0.0 routing-table=main scope=30 suppress-hw-offload=no target-scope=10
Если же мы хотим направить весь интернет трафик в туннель, то нам нужно изменить нулевой маршрут, казалось бы, все просто, но не будем спешить. Обратим внимание на флаги текущего маршрута: DAd — динамический, активный, получен по DHCP, можно, конечно отключить получение маршрутов в DHCP-клиенте, но мы пойдем другим путем.
Вспомним, что если к одной цели ведут несколько маршрутов, то будет выбран тот, у которого самая узкая маска. Поэтому вместо одного нулевого маршрута добавим два, к сетям 0.0.0.0/1 и 128.0.0.0/1.
В терминале выполните две команды:
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/1 gateway=10.20.0.1 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
add disabled=no distance=1 dst-address=128.0.0.0/1 gateway=10.20.0.1 pref-src="" routing-table=main scope=30 suppress-hw-offload=no target-scope=10
Вроде бы все сделано правильно, но интернет вообще перестал работать. Что случилось? Мы только что завернули в туннель весь исходящий трафик, в том числе и к нашему VPN-серверу, естественно, что соединение будет невозможно.
Поэтому добавим еще один маршрут к респондеру через основного провайдера.
Или:
/ip route
add disabled=no dst-address=x.x.x.x/32 gateway=192.168.3.1 routing-table=main suppress-hw-offload=no
Где 192.168.3.1 — шлюз основного провайдера.
После чего все снова заработает. При этом уже только по одному внешнему виду сайтов несложно понять, что мы работаем через VPN с точкой выхода в Германии.
Более подробные настройки для того или иного конкретного сценария выходят за рамки данной статьи и, как таковые, уже не относятся к настройкам WireGuard. Сам же WireGuard в RouterOS 7 есть и работает, при этом достаточно несложен в настройке, в чем мы только что убедились.
Онлайн-курс по MikroTik
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.