Настройка WireGuard в MikroTik, VPN туннель между двумя роутерами

  Mikrotik

скопировано отсюда

Краткое описание: инструкция по настройке VPN туннеля типа WireGuard между двумя роутерами MikroTik. Описание параметров WireGuard.

WireGuard — это современный протокол для организации VPN, написанный с нуля, бесплатный и с открытыми исходниками. В отличие от OpenVPN или IPSec, он намного проще и легче. Это касается и скорости (пере)подключения, и производительности, и требований к ресурсам, и процесса настройки, и объёма кода. Недавно было объявлено, что WireGuard войдёт в состав будущих ядер Linux, а впоследствии попадёт и во все популярные дистрибутивы, что косвенно указывает на зрелость этого решения.

Что такое WireGuard

Для настройки Wireguard на роутере MikroTik потребуется RoutesOS v7 и выше.

Для WireGuard популярные две схемы настроек:

  • Соединение типа peer-to-peer. Когда инициатором(initial) может выступать любая из сторон участников WireGuard туннеля. Главное требование к такому типу подключения – наличие двух белых(статических) IP адресов со стороны роутеров MikroTik;
  • WireGuard-клиент подключается к WireGuard-серверу. Соответственно WireGuard-клиент считается инициатором подключения, WireGuard-сервер отвечающей(responder или passive) или слушающей стороной. Требование по наличию белого(статического) IP при этом снижается до WireGuard-сервера.

На момент написания инструкции используется RouterOS v 7.3.1

Настройка WireGuard MikroTik, серверная часть

В качестве WireGuard-клиента и WireGuard-сервер будет выступать роутеры MikroTik.

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

Настройка находится WireGuard→WireGuard

Создание интерфейса WireGuard сервера
Создание интерфейса WireGuard сервера, генерацию ключей
  • Listen Port – порт, на котором будет работать WireGuard;
  • Private key – ключ который не будет задействован в настройках;
  • Public key – данный ключ будет нужно указать в настройках WireGuard-клиента.

Значение Private key заполнять не нужно, оно будет создано автоматически при создании WireGuard интерфейса.

Назначить IP адрес для WireGuard сервера

IP адрес для WireGuard-сервера является технической настройкой и будет использоваться при настройке статической маршрутизации для обмена трафика между сетями WireGuard-сервера и WireGuard-клиента.

Настройка находится IP→Address

Назначить IP адрес для WireGuard сервера

Настройка параметров клиента в WireGuard сервере

WireGuard Peer содержит настройки для клиента VPN туннеля. Тут описываются ключи доступа, а также разрешающие правила доступов, для обмена трафика между подсетями.

Настройка находится WireGuard→Peers

Настройка параметров клиента в WireGuard сервере

где

  • Public Key – клиентский Public Key, который сгенерировался при создании интерфейса;
  • Allowed Address – список разрешенных IP адресов(внутренних). Тут указан IP адрес интерфейса WireGuard-клиента и подсеть за ним;
  • Persistent Keepalive – при падении VPN туннеля, это время будет отводиться на его восстановление и будет считаться, что статус VPN все ещё UP;
  • Endpont и Endpont Port нужно оставить пустыми, это позволит не обращать внимание на аналогичные параметры со стороны клиента. WireGuard-сервер данными параметрами переводится в статус отвечающий(responder или passive) или слушающий стороны.

Настройка маршрутизации для WireGuard сервера

Настройка находится IP→Routes

Настройка маршрутизации для WireGuard сервера
  • Dst. Address – IP адрес или целая подсеть, к которой необходимо получить доступ за WireGuard-клиентом;
  • Gateway – внутренний IP адрес WireGuard-клиента.
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard-MikroTik-Config.ukr-Server
/interface wireguard peers
add allowed-address=174.16.0.2/32,192.168.5.0/24 interface=\
wireguard-MikroTik-Config.ukr-Server persistent-keepalive=10s public-key=\
"SO4l7YTMMqssgHcWbcIjtuGHO+dz2wENnpoK6hXWEyE="
/ip address
add address=174.16.0.1/24 interface=wireguard-MikroTik-Config.ukr-Server \
network=174.16.0.0
/ip route
add disabled=no distance=1 dst-address=192.168.5.0/24 gateway=174.16.0.2 \
pref-src="" routing-table=main scope=30 suppress-hw-offload=no \
target-scope=10

Настройка WireGuard клиента на роутере MikroTik

В качестве клиента WireGuard выступает роутер MikroTik с динамическим(серым) IP адресом. Первым делом нужно создать WireGuard интерфейс со стороны клиента.

Создание интерфейса WireGuard клиента

Настройка находится WireGuard→WireGuard

Создание интерфейса WireGuard клиента
Создание интерфейса WireGuard клиента, генерация ключей
  • Public Key – этот ключ указывается в параметре Public Key для WireGuard Peer со стороны WireGuard-сервера(его просто нужно скопировать).

Назначить IP адрес для WireGuard клиента

По аналогии с WireGuard-сервером, нужно создать технический IP адрес для WireGuard-клиента.

Настройка находится IP→Address

Назначить IP адрес для WireGuard клиента

Настройка параметров сервера в WireGuard клиенте

Настройка находится WireGuard→Peers

Настройка параметров сервера в WireGuard клиенте

где

  • Public Key – серверный Public Key, который сгенерировался при создании WireGuard интерфейса;
  • Endpoint – адрес WireGuard сервера;
  • Endpoint Port – внешний порт WireGuard сервера(13231).

Настройка маршрутизации для WireGuard клиента

Настройка находится IP→Routes

Настройка маршрутизации для WireGuard клиента
  • Dst. Address – IP адрес или целая подсеть, к которой необходимо получить доступ за WireGuard-сервером;
  • Gateway – внутренний IP адрес WireGuard-сервера.
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard-MikroTik-Config.ukr-Client
/interface wireguard peers
add allowed-address=174.16.0.1/32,192.168.1.0/24 endpoint-address=\
11.11.11.10 endpoint-port=13231 interface=\
wireguard-MikroTik-Config.ukr-Client persistent-keepalive=10s public-key=\
"UOOBJ9j5BjUPmP6qccSFT8hLBl+tYL3FoDdPXPa5Imw="
/ip address
add address=174.16.0.2/24 interface=wireguard-MikroTik-Config.ukr-Client \
network=174.16.0.0
/ip route
add disabled=no distance=1 dst-address=192.168.1.0/24 gateway=174.16.0.1 \
pref-src="" routing-table=main scope=30 suppress-hw-offload=no \
target-scope=10

При успешном установлении связи между WireGuard-клиентом и WireGuard-сервером, параметры WireGuard Peer такие как: RxTx и Last Handshake начнут заполняться значениями.

Успешная настройка WireGuard VPN в MikroTik

Настройка Firewall для WireGuard

Если по какой-то причине со стороны WireGuard-сервера не устанавливается соединение, нужно обратить внимание на наличие разрешающего правила со стороны Firewall.

Настройка Firewall для WireGuard
/ip firewall filter
add action=accept chain=input dst-port=13231 in-interface-list=WAN protocol=\
udp

Настройка WireGuard клиента для Ubuntu или CentOS сервера

Многие хостинг провайдеры при аренде VPS сервера на ОС типа Linux (DebianUbuntuCentos) предлагают предустановку WireGuard-сервера. В одном из частных случаев было предоставлено сразу 5 готовых учётных записей для подключения WireGuard-клиентов. Конфигурация для WireGuard-клиента имеет вид:

[Interface]
Address = 10.180.5.5/32
PrivateKey = xNSEL2aoULaYctgSUGQArQYAUgaMXVYhI9IbMrst6Es=
DNS = 10.180.5.1

[Peer]
PublicKey = IhhMrJLeQOfnbaBFC34WEyP8qE1L2cbzjYgMFHuao3k=
AllowedIPs = 0.0.0.0/0
Endpoint = 5.61.49.243:51820

И для настройки WireGuard-клиента это нужно применить со стороны роутера MikroTik.

Если ваш хостинг провайдер VPS не предоставляет услугу предустановки WireGuard-сервера, можно воспользоваться проверенной инструкцией по его установке и настройке → 

Создание интерфейса WireGuard клиента

Настройка находится WireGuard→WireGuard

Настройка WireGuard интерфейса, для подключение к Ubuntu
  • Private Key – этот ключ нужно скопироваться с параметра PrivateKey, который указан со стороны хостинг провайдера WireGuard-сервера.

Настройка параметров peer в WireGuard клиенте

Настройка находится WireGuard→Peers

Настройка WireGuard peer, для подключение к Ubuntu
  • Public Key -этот ключ нужно скопироваться с параметра PublicKey, который указан со стороны хостинг провайдера WireGuard-сервера;
  • Endpont – внешний IP адресWireGuard-сервера, параметр Endpoint;
  • Endpont Port – порт для подключения, указан в параметре Endpoint после IP адреса(5.61.49.243:51820);
  • Allowed Address – тут следует указать 0.0.0.0/0, без дополнительных ограничений по видимости внутренних сетей для WireGuard-клиента;
  • Persistent Keepalive – при падении VPN туннеля, это время будет отводиться на его восстановление и будет считаться, что статус VPN все ещё UP.

Добавить WireGuard интерфейс в список WAN

Настройка находится Interfaces→Interface List

Добавить WireGuard интерфейс в список WAN

Настроить Masquerade для WireGuard

В данном варианте следуем просто проконтролировать, что присутствует правило для Out interface list ранее обновленного списка WAN типа Masquerade. Если его нет, то нужно создать новое и в качестве Out interface указать ранее созданный WireGuard интерфейс.

Настройка находится IP→Firewall→NAT

Настроить masquerade для WireGuard клиента

Создать таблицу маршрутизации для WireGuard

Настройка находится Routing→Tables

Создать таблицу маршрутизации для WireGuard

Промаркировать таблицу для выхода в интернет

С помощью маркировки(Mangle) можно промаркировать таблицу маршрутизации, в которую попадёт весь трафик, кроме трафика предназначенного локальной сети. По сути это и будет интернет трафик.

Настройка находится IP→Firewall→Mangle

Настройка Mangle для WireGuard
Настройка Mangle для WireGuard трафика

Добавить статический маршрут для интернета через WireGuard

Промаркированная ранее таблица маршрутизации будет направляться в WireGuard туннель, что позволит выходить в интернет через WireGuard-сервер, который установлен на VPS Ubuntu(Debian) или CentOS.

Настройка находится IP→Firewall→Routes

Направить интернет трафик через WireGuard туннель
/interface wireguard
add listen-port=51820 mtu=1420 name=Wireguard-Client

/interface wireguard peers
add allowed-address=0.0.0.0/0 endpoint-address=5.61.49.243 endpoint-port=\
51820 interface=Wireguard-Client persistent-keepalive=10s public-key=\
"IhhMrJLeQOfnbaBFC34WEyP8qE1L2cbzjYgMFHuao3k="

/interface list member
add comment=defconf interface=Wireguard-Client list=WAN

/routing table
add disabled=no fib name=To-WireGuard

/ip firewall mangle
add action=mark-routing chain=prerouting dst-address=!192.168.88.0/24 \
new-routing-mark=To-WireGuard src-address=192.168.88.0/24

/ip route
add disabled=no dst-address=0.0.0.0/0 gateway=Wireguard-Client routing-table=\
To-WireGuard suppress-hw-offload=no

Настройка WireGuard Windows клиента

Роутер MikroTik может выступать WireGuard-сервером для WindowsAndroid или IOS WireGuard-клиентов. Настройка будет содержать несколько ручных задач и в этом основной недостаток WireGuard в MikroTik – работает он быстро, но требует знаний.

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

Настройка находится WireGuard→WireGuard

Настройка WireGuard интерфейса, для Windows подключения

Назначить IP адрес для WireGuard интерфейса

Настройка находится IP→Addresses

Настройка IP адреса для WireGuard интерфейса

Скачать Windows WireGuard клиент

WireGuard-for-PC-Windows

На официальном сайте WireGuard нужно выбрать соответствующий инсталлятор VPN клиента и в режиме “Далее” запустить и установить его.

Создать новый WireGuard клиент

Добавить новый VPN WireGuard в Windows
Предварительная настройка WireGuard в Windows

При создании такие параметры как PublicKey(Публичный ключ) и PrivateKey будут сгенерированы автоматически, при этом:

  • PublicKey – нужно скопировать и указать в параметре Public Key для WireGuard Peer со стороны MikroTik;
  • PrivateKey – оставить без изменений, это ключ будет указан только со стороны WireGuard-клиента.

Создать WireGuard Peer

Настройка находится WireGuard→WireGuard→Peers

Настройка WireGuard Peer, для Windows подключения
  • Public Key – тут нужно вставить PublicKey(Публичный ключ), который был сгенерирован со стороны Windows клиента;
  • Allowed Address – тут следует указать 0.0.0.0/0, без ограничений для WireGuard-клиента, а также для выхода в интернет;
  • Persistent Keepalive – время обновление статуса VPN туннеля.
/interface wireguard
add listen-port=13231 mtu=1420 name=Wireguard-MikroTik-Config.ukr-Server

/interface wireguard peers
add allowed-address=0.0.0.0/0 interface=Wireguard-MikroTik-Config.ukr-Server \
persistent-keepalive=10s public-key=\
"yiUzZPlwnduiB4saKzy5aNDQr6/eACMK9fKblYyxmlM="

/ip address
add address=10.180.5.1/24 interface=Wireguard-MikroTik-Config.ukr-Server \
network=10.180.5.0

Обновить конфигурацию для WireGuard клиента

Ниже будет представлен фрагмент конфигурации, которую нужно “собрать” со стороны WireGuard клиента.

[Interface]
Address = 10.180.5.2/32
PrivateKey = OOVyS9ivVHy0fOtepXJeQBPdw6Glt1gYyR39Ll2sxFM=
DNS = 10.180.5.1

[Peer]
PublicKey = G0HVPyUjgMtg5HAQ2YZ5wBY04ZXnEqBUywsnisfcZgc=
AllowedIPs = 0.0.0.0/0
Endpoint = 46.XX.YY.MMM:13231
  • Address – IP адрес для WireGuard клиента. Значение нужно выбрать из сети 10.180.5.0/24;
  • PrivateKey – ключ, который был сгенерирован при создании WireGuard клиента;
  • DNS – IP адрес MikroTik WireGuard интерфейса, может использоваться как DNS сервер;
  • PublicKey – этот ключ нужно скопировать с Public Key MikroTik WireGuard интерфейса;
  • AllowedIPs – разрешение WireGuard клиенту выход в интернет через VPN;
  • Endpoint – IP адрес и порт WireGuard сервера.

Скопировать конфигурацию в WireGuard клиент

Скопировать настройки WireGuard в Windows клиент

Подключиться к WireGuard серверу

Подключить к WireGuard серверу в Windows

Проверить работу интернета через WireGuard

Проверка работы WireGuard сервера в Windows
Проверка работы интернета через WireGuard сервер в Windows