У меня есть несколько хостов за NAT-маршрутизатором, к которым я хочу получить доступ через wireguard VPN. Я мог бы успешно настроить частную сеть, но кое-что меня все еще сбивает с толку.
Я хочу, чтобы каждый пир:
- доступ друг к другу (
172.9.9.*
) через VPN (через WG0
)
- получить доступ ко всем остальным хостам за пределами VPN (через
eth0
).
Вот схема сети и текущая конфигурация:
- ...
â S âââââ⤠Интернет âââââ⤠A â
âââ â â â â ¬ â â ...
✓
✓
-
â NAT DHCP â
✓ Маршрутизатор
-
â
-
âX â âB â
✓ ✓
С
является VPN-сервером и доступен в Интернете через статический IP-адрес;
Икс
является «вычислительным сервером», он может выходить в Интернет, но находится за NAT, а его IP-адрес динамический и заранее неизвестен;
А
это "удаленный клиент", который хочет подключиться к Икс
;
Б
является «локальным клиентом», который хочет подключиться к Икс
и это в той же локальной сети.
Я хочу чтобы А
и Б
может подключиться к Икс
через С
, но все эти хосты должны использовать VPN только при контакте друг с другом, а не при доступе в Интернет.
Так, например, А
может пинговать google.com напрямую, но будет пинговать Икс
с помощью С
.
После поиска и чтения документации мне все еще неясно, можно ли это сделать без использования iptables
и возможно ли это сделать, используя только конфигурацию wireguard.
Текущая конфигурация следующая:
## S WG0.conf
[Интерфейс]
PrivateKey = S-закрытый ключ
Адрес = 172.9.9.1/24
PostUp = iptables -A FORWARD -i wg0 -j ПРИНЯТЬ; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ПРИНЯТЬ; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Порт прослушивания = 51820
[Вглядеться]
# А
PublicKey = A-открытый ключ
Разрешенные IP-адреса = 172.9.9.100/32
[Вглядеться]
# Б
PublicKey = B-открытый ключ
Разрешенные IP-адреса = 172.9.9.101/32
[Вглядеться]
# ИКС
PublicKey = X-открытый ключ
Разрешенные IP-адреса = 172.9.9.10/32
# WG0.conf
[Интерфейс]
Адрес = 172.9.9.100/24
PrivateKey = A-закрытый ключ
DNS = 1.1.1.1
[Вглядеться]
PublicKey = S-открытый ключ
Конечная точка = S-ip-адрес: 51820
Разрешенные IP-адреса = 0.0.0.0/0, ::/0
Б
конфигурация аналогична А
, но с ИП 172.9.9.101
и другой закрытый ключ.
# Xwg0.conf
[Интерфейс]
Адрес = 172.9.9.10/24
PrivateKey = X-закрытый ключ
DNS = 1.1.1.1
[Вглядеться]
PublicKey = S-открытый ключ
Конечная точка = S-ip-адрес: 51820
Разрешенные IP-адреса = 0.0.0.0/0, ::/0
PersistentKeepalive = 25 # Чтобы сервер оставался доступным
Эта конфигурация работает, и все хосты могут получить доступ друг к другу через VPN, но я хочу, чтобы ТОЛЬКО трафик направлялся на хосты. 172.9.9.*
проходит через этот VPN. Остальной трафик должен направляться шлюзом по умолчанию.
Что меня озадачивает, так это то, что если я изменю конфигурацию А
так что
Разрешенные IP-адреса = 172.9.9.0/24
затем, для А
, пакеты маршрутизируются, как предполагалось (например, я могу скручивание ifconfig.me
и получить А
публичный IP), но если я сделаю то же самое на Икс
, это не будет работать и пакеты не будут 172.9.9.0/24
доставить не получится.
РЕДАКТИРОВАТЬ №1
Забыл упомянуть, что мне бы также хотелось, чтобы при подключении к Икс
, местные клиенты, такие как Б
не будет отправлять пакеты за пределы локальной сети, поэтому Б -> Маршрутизатор -> Х
и нет B -> Маршрутизатор -> S -> Маршрутизатор -> X
.