Этот документ — руководство по настройке Wireguard VPN на MikroTik для клиентов-«роуд воинов», таких как устройства на iOS. Требуется RouterOS версии 7.x. Wireguard представляет собой набор туннелей точка-точка, но при этом один и тот же IP может использоваться на стороне самой системы Wireguard.* В этом примере мы выделили отдельную подсеть Wireguard 192.168.66.0/24, которая отделена от нашей основной внутренней сети MikroTik. IP сервера Wireguard — 192.168.66.1/24, а клиенты — 192.168.66.2, 192.168.66.3 и так далее. В итоге получается такая схема точка-точка:
192.168.66.1 (сам роутер-сервер Wireguard) <-----------> клиент Wireguard с IP 192.168.66.2
192.168.66.1 (сам роутер-сервер Wireguard) <-----------> клиент Wireguard с IP 192.168.66.3 и так далее.
IP клиентов Wireguard назначаются статически и обычно это приватные IP, которые никак не связаны с их публичными IP, из которых они реально выходят в сеть. Сейчас нет динамического способа (например, DHCP) раздачи IP для клиентов Wireguard, поэтому такая схема может не подойти для очень крупных сетей RoadWarrior — каждый пользователь настраивается вручную.
* Примечание: Технически роутеру Wireguard не обязательно иметь IP в этой подсети, но если его нет, нужно вручную настраивать статические маршруты, чтобы клиенты были доступны. Если сервер Wireguard имеет IP в этой подсети, MikroTik автоматически создаёт «динамический подключённый» маршрут, и это будет гораздо удобнее для большинства пользователей.
Конфигурация сервера MikroTik Wireguard:
# При добавлении интерфейса wireguard автоматически сгенерируются приватный и публичный ключи
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard1
/interface wireguard peers
# первый клиент, добавленный здесь, только IPv4
add allowed-address=192.168.66.2/32 interface=wireguard1 public-key="replace-with-public-key-of-first-client"
# второй клиент — двойной стек, используется публичный IPv6 — замените 2001:db8:cafe:beef: на один из ваших префиксов /64
add allowed-address=192.168.66.3/32,2001:db8:cafe:beef::3/128 interface=wireguard1 public-key="replace-with-public-key-of-second-client-dual-stack"
/ip address
add address=192.168.66.1/24 interface=wireguard1 network=192.168.66.0
/ipv6 address
add address=2001:db8:cafe:beef::1/64 interface=wireguard1
Пример конфигурации клиента Wireguard на iOS (выступает как «второй клиент» из примера выше):
Интерфейс: любое имя на ваш выбор
Публичный ключ: клиент сгенерирует автоматически — этот ключ нужно добавить на сервер вместо "replace-with-public-key-of-second-client-dual-stack"
Адреса: 192.168.66.3/24, 2001:db8:cafe:beef::3/64 (обратите внимание, маски подсетей отличаются от настроек на сервере)
DNS серверы: любые по желанию — если хотите использовать сервер Wireguard как DNS, укажите 192.168.66.1
Peer:
Публичный ключ — возьмите из интерфейса wireguard на Mikrotik и вставьте сюда
Endpoint — mydyndns.whatever:13231
Allowed IPs: 0.0.0.0/0, ::/0
Такая конфигурация отправит весь трафик клиента через Wireguard сервер на MikroTik. Если не хотите проксировать весь трафик (например, для разделённого туннеля), ограничьте Allowed IPs в настройках Peer только нужными подсетями, к которым должен идти доступ через туннель, вместо 0.0.0.0/0 и ::/0.
Также нужно добавить правила в фаервол input для разрешения UDP трафика на порт 13231, чтобы туннель Wireguard вообще смог установиться:
/ip firewall filter add action=accept chain=input comment="Allow Wireguard" dst-port=13231 protocol=udp
Трафик, который вы отправляете при подключении к Wireguard, будет иметь IP клиента Wireguard, в примере это 192.168.66.2 или 192.168.66.3. Значит, нужно убедиться, что фаервол MikroTik пропускает такой трафик и его NAT производится, если нужно. Если ваша конфигурация строится на дефолтных настройках MikroTik, можно просто добавить интерфейс Wireguard в список интерфейсов LAN — это решит и пропуск, и NAT в одном флаконе.
192.168.66.1 (сам роутер-сервер Wireguard) <-----------> клиент Wireguard с IP 192.168.66.2
192.168.66.1 (сам роутер-сервер Wireguard) <-----------> клиент Wireguard с IP 192.168.66.3 и так далее.
IP клиентов Wireguard назначаются статически и обычно это приватные IP, которые никак не связаны с их публичными IP, из которых они реально выходят в сеть. Сейчас нет динамического способа (например, DHCP) раздачи IP для клиентов Wireguard, поэтому такая схема может не подойти для очень крупных сетей RoadWarrior — каждый пользователь настраивается вручную.
* Примечание: Технически роутеру Wireguard не обязательно иметь IP в этой подсети, но если его нет, нужно вручную настраивать статические маршруты, чтобы клиенты были доступны. Если сервер Wireguard имеет IP в этой подсети, MikroTik автоматически создаёт «динамический подключённый» маршрут, и это будет гораздо удобнее для большинства пользователей.
Конфигурация сервера MikroTik Wireguard:
# При добавлении интерфейса wireguard автоматически сгенерируются приватный и публичный ключи
/interface wireguard
add listen-port=13231 mtu=1420 name=wireguard1
/interface wireguard peers
# первый клиент, добавленный здесь, только IPv4
add allowed-address=192.168.66.2/32 interface=wireguard1 public-key="replace-with-public-key-of-first-client"
# второй клиент — двойной стек, используется публичный IPv6 — замените 2001:db8:cafe:beef: на один из ваших префиксов /64
add allowed-address=192.168.66.3/32,2001:db8:cafe:beef::3/128 interface=wireguard1 public-key="replace-with-public-key-of-second-client-dual-stack"
/ip address
add address=192.168.66.1/24 interface=wireguard1 network=192.168.66.0
/ipv6 address
add address=2001:db8:cafe:beef::1/64 interface=wireguard1
Пример конфигурации клиента Wireguard на iOS (выступает как «второй клиент» из примера выше):
Интерфейс: любое имя на ваш выбор
Публичный ключ: клиент сгенерирует автоматически — этот ключ нужно добавить на сервер вместо "replace-with-public-key-of-second-client-dual-stack"
Адреса: 192.168.66.3/24, 2001:db8:cafe:beef::3/64 (обратите внимание, маски подсетей отличаются от настроек на сервере)
DNS серверы: любые по желанию — если хотите использовать сервер Wireguard как DNS, укажите 192.168.66.1
Peer:
Публичный ключ — возьмите из интерфейса wireguard на Mikrotik и вставьте сюда
Endpoint — mydyndns.whatever:13231
Allowed IPs: 0.0.0.0/0, ::/0
Такая конфигурация отправит весь трафик клиента через Wireguard сервер на MikroTik. Если не хотите проксировать весь трафик (например, для разделённого туннеля), ограничьте Allowed IPs в настройках Peer только нужными подсетями, к которым должен идти доступ через туннель, вместо 0.0.0.0/0 и ::/0.
Также нужно добавить правила в фаервол input для разрешения UDP трафика на порт 13231, чтобы туннель Wireguard вообще смог установиться:
/ip firewall filter add action=accept chain=input comment="Allow Wireguard" dst-port=13231 protocol=udp
Трафик, который вы отправляете при подключении к Wireguard, будет иметь IP клиента Wireguard, в примере это 192.168.66.2 или 192.168.66.3. Значит, нужно убедиться, что фаервол MikroTik пропускает такой трафик и его NAT производится, если нужно. Если ваша конфигурация строится на дефолтных настройках MikroTik, можно просто добавить интерфейс Wireguard в список интерфейсов LAN — это решит и пропуск, и NAT в одном флаконе.

