Вопрос или проблема
Моя цель – настроить соединение WireGuard от моего домашнего роутера к VPS и подключаться снаружи через это соединение к моим различным домашним сетям (здесь изображена только одна сеть).
Я использую роутер MikroTik. Он подключается к VPS через следующие правила/конфигурацию:
/interface/wireguard/export
/interface wireguard
add listen-port=36857 mtu=1420 name=wg-xxx-it
add disabled=yes listen-port=13231 mtu=1420 name=wireguard
/interface wireguard peers
add allowed-address=0.0.0.0/0 client-address=192.168.7.1/24 endpoint-address=wg.xxx-it.de endpoint-port=51820 interface=wg-xxx-it name=peer-wg-xxx-it persistent-keepalive=30m preshared-key="xxxx" public-key=\
"xxxx"
/ip address
add address=192.168.0.1/24 comment="xxx-net" interface="bridge" network=192.168.0.0
add address=192.168.7.1/24 comment=VPN interface=wg-xxx-it network=192.168.7.0
Соответствующая конфигурация для (мобильного) клиента выглядит следующим образом:
[Interface]
PrivateKey = xxx
Address = 192.168.7.10/24
DNS = 192.168.7.1
[Peer]
PublicKey = xxx
PresharedKey = xxx
AllowedIPs = 192.168.7.0/24, 192.168.0.0/24
PersistentKeepalive = 0
Endpoint = wg.xxx-it.de:51820
Когда роутер и мой клиент подключаются к VPS через WireGuard, они могут видеть друг друга (ping, traceroute). Это здорово. Роутер получает IP 192.168.7.1/24
, клиент 192.168.7.10/24
, как я и хотел.
Однако сейчас я сталкиваюсь с трудностями при подключении с клиента к другим частям домашней сети. Что касается сервера WireGuard, я использую wg-easy с следующими переменными окружения в конфигурации docker-compose:
environment:
- WG_ALLOWED_IPS=192.168.7.0/24, 192.168.0.0/24
- WG_DEFAULT_ADDRESS=192.168.7.x
- WG_DEFAULT_DNS=192.168.7.1
- WG_POST_UP=ip route add 192.168.0.0/24 via 192.168.7.1
- WG_POST_DOWN=ip route rm 192.168.0.0/24 via 192.168.7.1
Когда я выполняю traceroute с клиента на какое-либо устройство в домашней сети, я оказываюсь в бесконечных переходах (недоступно).
Мне кажется, что маршрут на VPS не работает правильно, однако маршрут существует:
xxx:/app# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default docker-xx-xxxxx 0.0.0.0 UG 0 0 0 eth0
10.8.0.0 * 255.255.255.0 U 0 0 0 wg0
172.28.0.0 * 255.255.0.0 U 0 0 0 eth0
192.168.0.0 192.168.7.1 255.255.255.0 UG 0 0 0 wg0
192.168.7.1 * 255.255.255.255 UH 0 0 0 wg0
192.168.7.10 * 255.255.255.255 UH 0 0 0 wg0
Не хватает какой-либо конфигурации на роутере или на VPS?
Вы уже проверили настройки вашего брандмауэра?
Добавьте правило вроде этого и попробуйте достучаться до других устройств в вашей сети.
Где угодно на eth0 РАЗРЕШИТЬ FWD ваш_wireguard_VLan на wg0
Ответ или решение
Для решения проблемы с недоступной подсетью на вашем MikroTik маршрутизаторе через WireGuard на VPS, нужно учесть несколько ключевых аспектов настройки и конфигурации как на стороне маршрутизатора, так и на стороне VPS. Рассмотрим ваш случай детально, опираясь на предоставленную информацию.
1. Модель и архитектура вашей сети
Вы настроили WireGuard на MikroTik и используете VPS с Docker-контейнером (wg-easy) в качестве WireGuard-сервера. У вас настроены следующие IP-адреса:
- MikroTik:
192.168.0.1/24
для локальной сети (xxx-net). - WireGuard:
192.168.7.1/24
для VPN. - Клиент:
192.168.7.10/24
.
2. Верный маршрут и спецификация IP
Судя по вашему описанию, маршруты на VPS настроены корректно:
- Подсеть
192.168.0.0/24
доступна через192.168.7.1
, что указывает на то, что VPS «знает» о маршруте к внутренней сети вашего MikroTik.
Тем не менее, проблема может заключаться в правилах маршрутизации, возникших в результате конфигурации брандмауэра. Необходимо убедиться, что ваши правила NAT и маршрутизации позволяют трафику проходить между VPN и локальной сетью.
3. Проверка брандмауэра
Проверка настроек брандмауэра на MikroTik и VPS является критически важной. Вам необходимо добавить конкретные правила для разрешения трафика:
На MikroTik:
/ip firewall filter add chain=forward protocol=ip src-address=192.168.7.0/24 dst-address=192.168.0.0/24 action=accept comment="Разрешить трафик с WireGuard к локальной сети"
На VPS, в зависимости от используемой операционной системы, можно использовать следующие команды для iptables:
# Разрешить пересылку пакетов
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
4. Настройка маршрутов и правил NAT на VPS
Если вы используете Docker, вам может потребоваться настроить NAT между интерфейсами. Убедитесь, что пакеты пересылаются из WireGuard-интерфейса в вашу локальную сеть через NAT.
Дополните вашу Docker-композицию следующими переменными окружения:
- WG_POST_UP="iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"
- WG_POST_DOWN="iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE"
5. Перезапуск сервисов и очередная проверка соединения
После выполнения всех вышеперечисленных шагов необходимо перезапустить WireGuard на обеих сторонах (MikroTik и VPS) и убедиться, что все маршруты и разрешения активны. Используйте команды ping и traceroute для проверки доступности устройств как внутри локальной сети, так и между клиентом и MikroTik.
Заключение
Следуя этим рекомендациям, вы должны устранить проблему с недоступной подсетью. Помните, что важную роль играет строгая настройка брандмауэра. Если проблема сохраняется, имеет смысл обратить внимание на журналы доступа и ошибки в MikroTik и VPS для более глубокого анализа. Удачи в настройке вашей сети!