Вопрос или проблема
У меня есть сервер WireGuard с локальной подсетью 192.168.9.0/24 за ним. И клиент с локальной подсетью 192.168.4.0/24 за ним. Оба работают на Ubuntu 22.04.
Конфигурация сервера:
[Interface]
Address = 192.168.1.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = YYY
[Peer]
PublicKey = XXX
AllowedIPs = 192.168.1.2/32
Конфигурация клиента:
[Interface]
PrivateKey = WWW
Address = 192.168.1.2
[Peer]
PublicKey = QQQQ
AllowedIPs = 192.168.1.0/24, 192.168.9.0/24
Endpoint = PUBLIC_IP:51820
PersistentKeepalive = 25
Мой клиент может получить доступ к подсети 192.168.9.0/24, которая находится за моим сервером, но мой сервер не может получить доступ к подсети 192.168.4.0/24 за моим клиентом.
Как я могу сделать так, чтобы мой сервер имел доступ к подсети 192.168.4.0/24 за моим клиентом?
Могут ли эти изменения произойти только тогда, когда клиент подключается к серверу, а не когда WireGuard запускается на сервере?
Обновление 1:
Учитывайте, что сервер и клиент являются основными шлюзами в своих соответствующих подсетях.
Также учтите, что трафик, покидающий сервер и клиент, преобразуется в местные IP-адреса сервера и клиента при выходе как на VPN-интерфейсе, так и на локальных подсетях.
Прежде всего, сервер и клиент WireGuard имеют точно такую же функциональность после установления соединения.
Обычно вы ожидаете, что сторона сервера всегда работает и имеет публичный IP, но это только удобство, так как, безусловно, много настроек, которые не следуют этому правилу.
Чтобы маршрутизировать локальные сети через соединение WireGuard, вам необходимо установить, какие подсети доступны за его пиром с каждой стороны (сервера и клиента), т.е. какие подсети доступны за другой стороной соединения WireGuard.
Для следующей сети:
Место 1 | | Место 2
192.168.47.0/24 --- A | - - - - | B --- 192.168.93.0/24
где A и B — это экземпляры WireGuard, ответственные за межсоединение обоих местоположений.
В секции [Peer] конфигурационного файла на A для подключения 1 к 2 вы должны включить:
[Peer]
AllowedIPs = 192.168.93.0/24
и в секции [Peer] конфигурационного файла на B для подключения 2 к 1 вы должны включить:
[Peer]
AllowedIPs = 192.168.47.0/24
Это часть, необходимая для маршрутизации локальных сетей. Остальное вы должны настроить, чтобы гарантировать, что A и B смогут установить соединение WireGuard между собой.
Вам нужно будет установить, что по крайней мере один из них (A или B) доступен через публичный IP, чтобы другая сторона могла начать соединение. Но, опять же, после установления соединения нет никакой разницы в поведении обеих сторон.
NAT не является необходимым для части маршрутизации локальной сети. Он может быть необходим для установления соединения между A и B.
Ответ или решение
Как обеспечить доступ сервера к локальной сети клиента через WireGuard
Чтобы организовать маршрутизацию локальных сетей за клиентом с использованием WireGuard, необходимо учесть несколько ключевых аспектов конфигурации на стороне сервера и клиента.
1. Обзор текущей конфигурации
У вас есть сервер WireGuard с локальной подсетью 192.168.9.0/24 и клиент, находящийся в подсети 192.168.4.0/24. Конфигурация уже настроена таким образом, что клиент может получить доступ к подсети сервера, но не наоборот.
Конфигурация сервера:
[Interface]
Address = 192.168.1.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = YYY
[Peer]
PublicKey = XXX
AllowedIPs = 192.168.1.2/32
Конфигурация клиента:
[Interface]
PrivateKey = WWW
Address = 192.168.1.2
[Peer]
PublicKey = QQQQ
AllowedIPs = 192.168.1.0/24, 192.168.9.0/24
Endpoint = PUBLIC_IP:51820
PersistentKeepalive = 25
2. Настройка маршрутизации
Чтобы сервер мог взаимодействовать с подсетью клиента 192.168.4.0/24, вам необходимо внести изменения в конфигурацию обоих устройств:
- На стороне сервера:
В секцию[Peer]
добавьте подсеть клиента:
[Peer]
PublicKey = XXX
AllowedIPs = 192.168.1.2/32, 192.168.4.0/24
- На стороне клиента:
В секцию[Peer]
добавьте подсеть сервера:
[Peer]
PublicKey = QQQQ
AllowedIPs = 192.168.1.0/24, 192.168.9.0/24, 192.168.4.0/24
Эти изменения позволят вашему серверу отправлять пакеты на подсеть клиента и получать ответ.
3. Настройки маршрутизации и NAT
Поскольку вы указали, что сервера и клиенты являются шлюзами по умолчанию для своих подсетей и ведут NAT для исходящего трафика, необходимо убедиться, что NAT не мешает маршрутизации. Настройте правила iptables на сервере и клиенте, чтобы разрешить проход данных.
- На сервере:
Убедитесь, что iptables настроен следующим образом:
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
- На клиенте:
Здесь можно использовать аналогичные правила, чтобы обеспечить маршрутизацию:
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
4. Подключение и тестирование
Сначала подключите клиента к серверу и проверьте, что маршруты установлены:
- На клиенте выполните команду
ip route
. - Убедитесь, что маршруты к подсетям сервера и клиента присутствуют.
Чтобы обеспечить правильную работу при каждом подключении клиента, редактируйте конфигурации до подключения клиента, а не после. Запуск WireGuard на сервере не требует ручной настройки маршрутов.
Заключение
Следуя описанным шагам, вы сможете настроить маршрутизацию локальной сети за клиентом через WireGuard, что обеспечит возможность серверу взаимодействовать с подсетью клиента. Эти изменения в конфигурации позволят вашему серверу и клиенту свободно обмениваться данными, делая сеть более гибкой и функциональной.