Как настроить маршрутизацию между различными локальными сетями через Wireguard на сервере и клиенте, чтобы устройства в этих сетях могли взаимодействовать друг с другом? В условиях есть сервер с Wireguard, выступающий сервером, а также несколько клиентов-шлюзов с физическими и виртуальными сетевыми адаптерами. Требуется настроить соединение между этими сетями через Wireguard, обеспечивающее корректное маршрутизацию трафика.
Для настройки соединения между несколькими локальными сетями с помощью 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.