Как настроить соединение между несколькими локальными сетями с помощью WireGuard на операционной системе Ubuntu?

Как настроить маршрутизацию между различными локальными сетями через Wireguard на сервере и клиенте, чтобы устройства в этих сетях могли взаимодействовать друг с другом? В условиях есть сервер с Wireguard, выступающий сервером, а также несколько клиентов-шлюзов с физическими и виртуальными сетевыми адаптерами. Требуется настроить соединение между этими сетями через Wireguard, обеспечивающее корректное маршрутизацию трафика.
  • 30 июля 2024 г. 16:13
Ответы на вопрос 3
Для настройки соединения между несколькими локальными сетями с помощью WireGuard на операционной системе Ubuntu необходимо выполнить следующие шаги:

1. Установить WireGuard на сервере и клиентах. Для этого выполните следующие команды:

```
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
```

2. Создать конфигурационные файлы для сервера и клиентов. На сервере создайте файл /etc/wireguard/wg0.conf со следующим содержимым:

```
[Interface]
PrivateKey = сервер-приватный-ключ
Address = сеть-сервера
ListenPort = порт-прослушивания

[Peer]
PublicKey = клиент-публичный-ключ
AllowedIPs = сеть-клиента
```

На клиенте создайте файл /etc/wireguard/wg0.conf со следующим содержимым:

```
[Interface]
PrivateKey = клиент-приватный-ключ
Address = адрес-клиента

[Peer]
PublicKey = сервер-публичный-ключ
AllowedIPs = сеть-сервера
Endpoint = pубличный-ip-сервера:порт-прослушивания
```

3. Сгенерировать ключи для сервера и клиентов с помощью команды:

```
wg genkey | tee privatekey | wg pubkey > publickey
```

4. Скопировать публичный ключ клиента на сервер и публичный ключ сервера на клиент.

5. Запустить WireGuard на сервере и клиентах:

```
sudo wg-quick up wg0
```

После выполнения этих шагов соединение между локальными сетями через WireGuard должно быть настроено. Для проверки соединения и маршрутизации можно использовать утилиту ping для проверки связи между устройствами в разных сетях.
Сервер 

/etc/wireguard/wg0.conf

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

[Peer]
PublicKey = <CLIENT1_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32, 192.168.10.0/24

[Peer]
PublicKey = <CLIENT2_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

[Interface]
PrivateKey = <CLIENT2_PRIVATE_KEY>
Address = 10.8.0.2/24

[Peer]
PublicKey = <VPN_SERVER_PUBLIC_KEY>
Endpoint = <VPN_SERVER_IP>:51820
AllowedIPs = 10.8.0.0/24, 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 enp4s0 -j MASQUERADE


Клиент 3

[Interface]
PrivateKey = <CLIENT3_PRIVATE_KEY>
Address = 10.8.0.3/24

[Peer]
PublicKey = <VPN_SERVER_PUBLIC_KEY>
Endpoint = <VPN_SERVER_IP>:51820
AllowedIPs = 10.8.0.0/24, 192.168.10.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 enp4s0 -j MASQUERADE
Многопользовательские L3-туннели (в т.ч. OpenVPN TUN, WireGuard) не позволяют указывать IP-адрес, через который происходит маршрутизация (ip route … via 10.8.0.4) — эта опция требует L2-связности. 
Используйте директиву AllowedIPs в WireGuard, она настроит и внутреннюю машрутизацию, и маршрутизацию ОС, и внутренний фильтр source IP.
Похожие вопросы