Задать вопрос

Как связать несколько локальных сетей через WireGuard на ubuntu?

Как объединить несколько локальных сетей через wireguard, чтобы устройства видели друг друга из разных сетей, при помощи wireguard?

Имеется сервер с wireguard, который выступает в качестве wireguard сервера, имеющий внешний ip на сетевой карте enp3s0. ОС ubuntu server.
Так же имеется виртуальное сетевое устройство wg0, имеющее IP 10.8.0.1.
В данный момент, подключенные клиенты могут спокойно через этот сервер выходить наружу.

Клиент-сервер (Client 2)в роли шлюза в локальной сети, имеет 2 физических сетевых адаптера и 1 от Wireguard.
enp4s0 который смотрит в интернет и через который подключается wireguard к серверу.
wg0 имеющий IP 10.8.0.2
enp3s0 имеющий ip и подсеть 192.168.10.1/23, который раздает сеть в локалку, пуская клиенты наружу через wireguard, через отдельно созданную таблицу маршрутизации inet_wg и:
ip rule add from 10.8.0.2 table inet_wg
ip rule add fwmark 4 table inet_wg
iptables -t nat -A POSTROUTING -s 192.168.10.0/23 ! -d 192.168.10.0/23 -o wg+ -j SNAT --to-source 10.8.0.2 .
И отмаркированный трафик, который необходимо через wireguard гнать.
К этому шлюзу через коммутатор подключены сетевые устройства, которые без проблем выходят в сеть через Wireguard сервер.

Аналогичный client 2 Клиент-сервер (Client 3)в роли шлюза в локальной сети, имеет 2 физических сетевых адаптера и 1 от Wireguard.
enp4s0 который смотрит в интернет и через который подключается wireguard к серверу.
wg0 имеющий IP 10.8.0.3
enp3s0 имеющий ip и подсеть 192.168.88.1/24, который раздает сеть в локалку, пуская клиенты наружу через wireguard, через отдельно созданную таблицу маршрутизации inet_wg и:
ip rule add from 10.8.0.3 table inet_wg
ip rule add fwmark 4 table inet_wg
iptables -t nat -A POSTROUTING -s 192.168.88.0/24! -d 192.168.88.0/24-o wg+ -j SNAT --to-source 10.8.0.3 .
И отмаркированный трафик, который необходимо через wireguard гнать.
К этому шлюзу через коммутатор подключены сетевые устройства, которые без проблем выходят в сеть через Wireguard сервер.

На картинке в графическом виде представлено, как это устроено.
66a90e6b22540207312099.jpeg

Как сделать так, чтобы устройства одной сети видели устройства в другой сети?
Проблема, так понимаю, заключается только в прописи маршрута и, как я понимаю, только на wireguard сервере?

Если не прописывать маршрут и сделать трасировку с любого устройства из сети Client 3 в сеть client 2 traceroute 192.168.10.1, то:
Трассировка маршрута к 192.168.10.1 с максимальным числом прыжков 30
1 1 ms 1 ms 1 ms 192.168.88.1
2 35 ms 36 ms 34 ms 10.8.0.1
А дальше уже попытки поиска уже снаружи нужного адреса.

Аналогично с client 2 на client3.

Если добавить маршрут на wireguard сервере из одной сети в другую и обратно:
route add -net 192.168.10.0/23 gw 10.8.0.2
route add -net 192.168.88.0/24 gw 10.8.0.3
то, tracert 192.168.10.1
Трассировка маршрута к 192.168.10.1 с максимальным числом прыжков 30
1 2 ms 1 ms 1 ms 192.168.88.1
2 34 ms 34 ms 35 ms 10.8.0.1
3 10.8.0.1 сообщает: Заданный узел недоступен.

Трассировка завершена.

Так же и с wireguard сервера получаем такое:
root@gwwg:/home/vpn# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
From 10.8.0.1 icmp_seq=1 Destination Host Unreachable
ping: sendmsg: Required key not available
ping: sendmsg: Required key not available
From 10.8.0.1 icmp_seq=2 Destination Host Unreachable
^C
--- 192.168.10.1 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1012ms

root@gwwg:/home/vpn# ping 192.168.88.1
PING 192.168.88.1 (192.168.88.1) 56(84) bytes of data.
From 10.8.0.1 icmp_seq=1 Destination Host Unreachable
ping: sendmsg: Required key not available
From 10.8.0.1 icmp_seq=2 Destination Host Unreachable
ping: sendmsg: Required key not available
^C
--- 192.168.88.1 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1004ms

Так как же сделать маршрутизацию трафика из одной локальной сети в другую, при посредничестве wireguard сервера, рабочей?
  • Вопрос задан
  • 1454 просмотра
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@dronmaxman
VoIP Administrator
Пример конфигурации объединения двух сете (Lan2Lan) через WireGuard VPN сервер с публикацией порта веб сервера (192.168.10.10:80) на WireGuard сервере через VPN без NAT (без маскарада реального IP клиента) !!!

Схему сети смотрите в вопросе.

# Сервер

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = <VPN_SERVER_PRIVATE_KEY>
Address = 10.8.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <CLIENT2_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32, 192.168.10.0/24 ## маршруты сами прописываются в таблицу маршрутизации сервера

[Peer]
PublicKey = <CLIENT3_PUBLIC_KEY>
AllowedIPs = 10.8.0.3/32, 192.168.88.0/24 ## маршруты сами прописываются в таблицу маршрутизации сервера




## Forward
sudo sysctl -w net.ipv4.ip_forward=1


## Firewall 
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE 

## Публикуем порт и прокидываем его на сервер в локальной сети за Клиент 2 через VPN
iptables -t nat -A PREROUTING -i enp3s0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.10:80


# Клиент 2

[Interface]
Address = 10.8.0.2/32
PrivateKey = <CLIENT2_PRIVATE_KEY>
Table = 100
PostUp = ip rule add from 10.8.0.2 table 100; ip route add 192.168.88.0/24 dev wg0; ip route add 10.8.0.0/24 dev wg0; ip rule add fwmark 1/3 table 100
PostDown = ip rule del from 10.8.0.2 table 100; ip route del 192.168.88.0/24 dev wg0; ip route del 10.8.0.0/24 dev wg0; ip rule del fwmark 1/3 table 100

[Peer]
AllowedIPs = 0.0.0.0/0
PublicKey = <VPN_SERVER_PUBLIC_KEY>
Endpoint = <VPN_SERVER_IP>:51820




## Forward
sudo sysctl -w net.ipv4.ip_forward=1


## Firewall 
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE

## Вот эта строчка маркирует ответ от веб сервера, а потом на него 
## применяется правило (ip rule add fwmark 1/3 table 100) и  пакет попадает в таблицу 100 и 
## при такой конфигурации будет виден реальный IP клиента. 
## При этом сервер 192.168.10.10 в интернет будет выходить через gw (Клиент 2), 
## а ответы  отправлять в VPN.

iptables -t mangle -A PREROUTING -i wg0 -m conntrack --ctstate NEW -j CONNMARK --set-xmark 0x1/0x3
iptables -t mangle -A PREROUTING -i enp3s0 -m connmark ! --mark 0x0/0x3 -j CONNMARK --restore-mark --nfmask 0x3 --ctmask 0x3


# Клиент 3

[Interface]
Address = 10.8.0.3/32
PrivateKey = <CLIENT3_PRIVATE_KEY>
Table = 100
PostUp = ip rule add from 10.8.0.3 table 100; ip route add 192.168.10.0/24 dev wg0; ip route add 10.8.0.0/24 dev wg0; ip rule add fwmark 1/3 table 100
PostDown = ip rule del from 10.8.0.3 table 100; ip route del 192.168.10.0/24 dev wg0; ip route del 10.8.0.0/24 dev wg0; ip rule del fwmark 1/3 table 100

[Peer]
AllowedIPs = 0.0.0.0/0
PublicKey = <VPN_SERVER_PUBLIC_KEY>
Endpoint = <VPN_SERVER_IP>:51820



## Forward
sudo sysctl -w net.ipv4.ip_forward=1


## Firewall 
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
Ответ написан
ValdikSS
@ValdikSS
Многопользовательские L3-туннели (в т.ч. OpenVPN TUN, WireGuard) не позволяют указывать IP-адрес, через который происходит маршрутизация (ip route … via 10.8.0.4) — эта опция требует L2-связности.
Используйте директиву AllowedIPs в WireGuard, она настроит и внутреннюю машрутизацию, и маршрутизацию ОС, и внутренний фильтр source IP.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы