Введение
Если вы хотите получить доступ к своей локальной сети находясь за ее пределами или объединить её с удаленной локальной сетью, то для этого вам понадобится настроить VPN. На Mikrotik проще всего это сделать с помощью Wireguard, настроить его можно двумя способами:
- Вручную - использую терминал или Winbox
- Автоматизированный - с помощью приложения от 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-калькулятором
В итоге у нам доступно 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 скопировать из созданного пира.
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 ручным и автоматизированным способом. Теперь мы можем получить доступ к своей локальной сети практически из любой точки мира.