Задача была следующей: соединить между собой две сети, не имеющие «белого» IP-адреса. Одна сеть выходит в интернет через роутер Mikrotik, вторая сеть выходит через Zyxel Speedster. В качестве связующего звена было решено использовать VPS с установленным Wireguard VPN.
Получилась такая схема:
LAN0 (192.168.0.0/24) -> Mikrotik -> Internet -> VPS <- Internet <- Zyxel <- LAN1 (192.168.2.0/24)
1. Настраиваем Wireguard на VPS
Подробно останавливаться на установке Wireguard, наверное, большого смысла нет, инструкций по установке более чем достаточно. Покажу лишь конфиг:
root@vpn-vps:~# cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.36.36.1/24,fd42:24:24::1/64
ListenPort = 54073
PrivateKey = (hidden)
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
### Client router-mikrotik
[Peer]
PublicKey = <...skipped...>
PresharedKey = <...skipped...>
AllowedIPs = 10.36.36.2,192.168.0.0/24,fd42:24:24::2/128
### Client router-zyxel
[Peer]
PublicKey = <...skipped...>
PresharedKey = <...skipped...>
AllowedIPs = 10.36.36.3,192.168.2.0/24,fd42:24:24::3/128
И интерфейс:
root@vpn-vps:~# wg show wg0
interface: wg0
public key: <...skipped...>
private key: (hidden)
listening port: 54073
peer: <...skipped...>
preshared key: (hidden)
endpoint: xx.xx.xx.xx:21371
allowed ips: 10.36.36.2/32, 192.168.0.0/24, fd42:24:24::2/128
latest handshake: 1 minute, 6 seconds ago
transfer: 231.14 MiB received, 11.05 GiB sent
peer: <...skipped...>
preshared key: (hidden)
endpoint: yy.yy.yy.yy:56043
allowed ips: 10.36.36.3/32, 192.168.2.0/24, fd42:24:24::3/128
latest handshake: 1 minute, 5 seconds ago
transfer: 11.02 GiB received, 230.29 MiB sent
На что здесь нужно обратить внимание? На разрешённые подсети в параметрах allowed-ips.
Также не лишним будет проверить, что в /etc/sysctl.conf раскомментирован форвардинг пакетов:
net.ipv4.ip_forward=1
2. Настраиваем Mikrotik
В Mikrotik RouterOS Wireguard поддерживается «из коробки». Для настройки нужно зайти в раздел Wireguard, добавить новое соединение:

Далее добавляем peer:

И правило в маршруты для доступа в подсеть LAN1:

После этого роутер Microtik будет соединяться с VPN сервером, если мы захотим из сети 192.168.0.0/24 пойти на адреса сети 192.168.2.0/24
3. Настраиваем Zyxel Speedster
Добавим соединение с Wireguard

и настроим peer. В отличие от Mikrotik’а в Zyxel это делается в одном месте:

После этого настраиваем маршрутизацию:

И в настройках файрвола разрешаем доступ из сети LAN0 и VPN:

На этом настройка закончена.
Теперь из сети 192.168.0.0/24 можно заходить на устройства в сети 192.168.2.0/24, также как и наоборот. При этом в интернет из этих сетей клиенты идут через основной выход, а не через VPN.
Итого — мы имеем доступ из двух этих сетей друг к другу. С момента настройки и до написания записи прошло около месяца, надеюсь, я ничего не забыл по пути. Но, как обычно, если есть вопрос, можно его написать в комментариях. Всем спасибо. 🙂