metalnikovg.ru
MetalnikovG.ru

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

Banner.png
Опубликовано
//
6 мин. чтения

Введение

Если вы хотите получить доступ к своей локальной сети находясь за ее пределами или объединить её с удаленной локальной сетью, то для этого вам понадобится настроить VPN. На Mikrotik проще всего это сделать с помощью Wireguard, настроить его можно двумя способами:

  1. Вручную - использую терминал или Winbox
  2. Автоматизированный - с помощью приложения от Mikrotik Back To Home

NOTE

На Mikrotik WireGuard стал доступен начиная с версии RouterOS 7. Если у вас версия ниже, то для начала необходимо обновить RouterOS до актуальной версии.

Коротко о WireGuard

Информация которая понадобиться нам для настройки:

  • WireGuard работает с отдельной подсетью, которую нам нужно будет создать и опеределиться её размером, адресом и маской;
  • WireGuard не умеет раздавать IP адреса - нам необходимо самим определить статические IP адреса для сервера и клиента, которые входят в подсеть;
  • WireGuard устанавливает безопасное соединение, с использованием асимметричных ключей - их Mikrotik сгенерирует сам;
  • Для работы Wireguard нужно создать отдельный виртуальный интерфейс;
  • WireGuard использует Peer-To-Peer соединение - исходя из этого, нужно будет настроить два пира: один - на сервере, другой - на клиенте;
  • WireGuard работает по протоколу UDP - этот факт понадобиться для настройки фаервола.

Ручная настройка wireguard

Этот способ позволяет более точно произвести настройку Wireguard.

Планируем сеть

Для себя я выбрал 192.168.99.8/30.

192.168.x.x - диапазон, который используется для частных(внутренних) сетей. Существуют и другие диапазоны частных сетей.

x.x.99.x - я определил этот диапазон для использования в сети VPN. Можно выбрать любое другое число, в пределах разрешенных.

x.x.x.9/30 - это номер и размер конкретной подсети. 30 определяет размер сети. Считается следующим образом:

Для простоты расчета можно воспользоваться IP-калькулятором

wg-peers

В итоге у нам доступно 4 адреса 192.168.99.8 - 192.168.99.11 , первый и последний адрес мы использовать не можем, т.к. первый является адресом сети, а второй широковещательным адресом. Остаются 2 адреса 9 и 10 - один для клиента, второй для сервера. Такую сеть обычно называют point-to-point и используют для связи двух маршрутизаторов.

Если у вас будет больше клиентов, то и размер сети должен быть больше. Например, x.x.x.x/29 дает шесть доступных адресов:

Для сервера выбираем 192.168.99.9 (адрес сети 8 + 1), а для клиента - 192.168.99.10 (адрес сети 8 + 2).

NOTE

Можно выбрать и подсеть с большим количеством доступных адресов, например 192.168.99.0/24, но если понадобиться добавить еще VPN сети, то можно будет использовать тот же диапазон: 192.168.99.x. А в случае с 192.168.99.0/24, нужно будет использовать уже другой диапазон, например 192.168.98.0/24.

Настройка сервера WireGuard

Приступаем к настройки Wireguard на MikroTik, для этого можно использовать как терминал так и Winbox.

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

/interface wireguard
add listen-port=51821 mtu=1280 name=wg-home comment="wg-home"

Задаем адресацию для интерфейса

/ip address
add address=192.168.99.9/30 comment="wg-home" interface=wg-home network=192.168.99.8

Создаём пир (peer) для клиента

/interface wireguard peers
add allowed-address=::/0,0.0.0.0/0 client-address=192.168.99.10/30 client-dns=192.168.78.254 client-endpoint=<public IP address> client-keepalive=25s client-listen-port=51821 endpoint-address=<public IP address> endpoint-port=51821 interface=wg-home private-key="auto" comment="wg-home"

Параметры и значения:

  • allowed-address - параметр указывает какие адреса пойдут через WG. По умолчанию это 0.0.0.0/0 для IPv4 и ::/0 для IPv6, т.е. весь трафик пойдет через туннель.
  • client-address - адрес клиента который мы определили ранее;
  • client-dns - DNS сервер который будет использовать клиент, в моем случае это адрес самого роутера.
  • endpoint-address и client-endpoint - это статический IP адрес выданный вашим интернет-провайдером или DNS-имя если вы используете DDNS, к которому будет обращаться клиент
  • client-keepalive - это интервал посылки пакетов keepalive в отсутствие полезного трафика по туннелю для поддержания актуальности записей NAT на промежуточных узлах сети общего пользования (межсетевом экране, маршрутизаторе из сети поставщика услуг в общедоступный Интернет, и т.п.). Рекомендуемое значение — 25 сек.
  • endpoint-port и client-listen-port - это порт, который мы назначили сетевому интерфейсу;
  • interface - это имя, созданного сетевого интерфейса;
  • private-key - это приватный ключ клиента, при значении auto, автоматически генерируется приватный и бубличный ключ.

NOTE

Если у вас несколько клиентов, то для каждого надо создать свой пир (peer). Каждый пир будет отличаться публичным ключом клиента.

Задаем правило для фаервола

Разрешаем клиенту общаться с нашим сервером

/ip/firewall/filter/
add action=accept chain=input dst-port=51821 in-interface=ether1 protocol=udp place-before=1 comment="wg-home"

Параметры и значения:

  • action - мы принимаем - accept - сетевой траффик;
  • chain - мы принимаем входной -input - сетевой траффик;
  • dst-port - это порт, который мы назначили сетевому интерфейсу
  • in-interface - это сетевой интерфейс, через который у нас приходит внешний траффик. Обычно это ether1;
  • protocol - вспоминаем, что WireGuard работает по UDP протоколу;
  • place-before - правила фаервола упорядочены и проверяются начиная с первого. Как только встречается срабатывание, проверка останавливается. Поэтому нам важно поместить это разрешающее правило перед запрещающими.

TIP

Вместо in-interface можно указать in-interface-list=WAN.

Файла конфигурации для клиента

При желании можно создать его вручную, но гораздо проще через Winbox скопировать из созданного пира.

wg-peer

Interface - параметры и значения:

  • ListenPort - это порт, который мы назначили сетевому интерфейсу;
  • PrivateKey - сгенерированный приватный ключ;
  • Address - адрес клиента, который мы определили ранее;
  • DNS - в примере я указал адрес внутреннего DNS сервера. Вы можете указать адрес ISP DNS или любого публичного DNS сервера;
  • MTU - maximum transmission unit (англ. максимальная единица передачи) задается автоматически при создании интерфейса. По умолчанию в конфиге его нет, но можно задать вручную при необходимости.

Peer - параметры и значения:

  • PublicKey - сгенерированный публичный ключ при создании сетевого интерфейса;
  • AllowedIPs - параметр указывает какие адреса пойдут через WG. По умолчанию это 0.0.0.0/0 для IPv4 и ::/0 для IPv6, т.е. весь трафик пойдет через туннель.
  • Endpoint - берем endpoint-address и endpoint-port из конфигурации пира;
  • PersistentKeepalive - это интервал посылки пакетов keepalive в отсутствие полезного трафика по туннелю для поддержания актуальности записей NAT на промежуточных узлах сети общего пользования (межсетевом экране, маршрутизаторе из сети поставщика услуг в общедоступный Интернет, и т.п.). Рекомендуемое значение — 25 сек.

Настройка с помощью приложения Back to Home

Начиная с версии RouterOS 7.12 стала доступна удобная функция, которая настраивает ваше устройство для безопасного VPN-доступа из любой точки мира к вашему маршрутизатору и вашей сети, даже если ваш маршрутизатор не имеет публичного IP-адреса, находится за NAT или брандмауэром.

Эта функция является удобным вариантом для доступа к вашей домашней сети или просмотра контента, доступного в вашей стране, из мест, где некоторый контент недоступен. Она не предназначена для анонимности, она предназначена для простого доступа к вашей домашней сети одним щелчком.

Настройка выполняется с помощью приложения MikroTik Back to Home ( Android | iPhone ). Более подробно по настройке функции можно почитать в официальной документации.

Заключение

Мы настроили Wireguard сервер на MikroTik ручным и автоматизированным способом. Теперь мы можем получить доступ к своей локальной сети практически из любой точки мира.