WireGuard: три узла, соединенные линейно, UDP поверх TCP только для одного соединения

Вопрос или проблема

WireGuard: три узла, соединенные линейно, UDP поверх TCP только для одного соединения

У меня есть три пира в сети WireGuard:

  • Пир J находится за стандартным корпоративным файрволом, блокирующим все исходящие UDP,
  • Пир S – это сервер со статическим IP, и
  • Пир P – это мой смартфон.
   Нет UDP на выход;
  +-----------+  (Статический IP)
  | Peer J ---|--- Peer S ------ Peer P
  +-----------+         [Обычный wg]
Итак, UDP через TCP

Я хочу подключить пир P к пир J (P ssh на J) через WireGuard, где J и S соединены по UDP через TCP (используя wangyu-/udp2raw), в то время как S и P имеют нормальное UDP-соединение.

Я справился с соединениями между J и S, а также между P и S. Но я не могу заставить P подключиться к J. У меня нет опыта в компьютерных сетях, поэтому идеальное решение для меня было бы в рамках WireGuard или, надеюсь, только с простыми правилами iptables.

Вот моя попытка на данный момент:

Peer J

[Interface]
# PublicKey = E8K...
PrivateKey = ...
Address = 10.0.6.3/24
MTU = 1342
PreUp = /usr/bin/udp2raw -c -l 127.0.0.1:50001 -r <IP интернета S>:443 -k "secret" -a >/var/log/udp2raw.log 2>&1 &
PostDown = killall udp2raw || true

# Peer S
[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.6.0/32
PersistentKeepalive = 120
Endpoint = 127.0.0.1:50001

Peer S

[Interface]
# PublicKey = Yf3...
PrivateKey = ...
Address = 10.0.0.0/24, 10.0.6.0/24
MTU = 1342
ListenPort = 80
PreUp = /usr/bin/udp2raw -s -r 127.0.0.1:80 -l <LAN IP S>:443 -k "secret" -a >/var/log/udp2raw.log 2>&1 &
PreDown = killall udp2raw || true

# Peer J
[Peer]
PublicKey = E8K...
AllowedIPs = 10.0.0.3/32, 10.0.6.3/32
PersistentKeepalive = 120

# Peer P
[Peer]
PublicKey = wlx...
AllowedIPs = 10.0.0.1/32, 10.0.6.1/32

Peer P

[Interface]
PublicKey = wlx...
Address = 10.0.0.1/32, 10.0.6.1/32
MTU = 1342

# Peer S
[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.0.0/24, 10.0.6.0/24
Endpoint = <IP интернета S>:80

Проблема: На пире P пинг к 10.0.6.3 не удался (но пинг к 10.0.6.0 работает). Пиры S и J могут нормально пинговать друг друга через 10.0.6.0/10.0.6.3.

Ответ или решение

Для решения вашей проблемы с подключением Peer P к Peer J через Peer S с использованием WireGuard и UDP через TCP, необходимо внести некоторые изменения в конфигурацию и проверить настройки маршрутизации и файрволов. Давайте рассмотрим конфигурации каждого из пиров.

1. Peer J

Конфигурация Peer J должна быть корректной, но убедитесь, что у вас правильно настроены разрешённые IP-адреса:

[Interface]
PrivateKey = ...
Address = 10.0.6.3/24
MTU = 1342
PreUp = /usr/bin/udp2raw -c -l 127.0.0.1:50001 -r <S's internet IP>:443 -k "secret" -a >/var/log/udp2raw.log 2>&1 &
PostDown = killall udp2raw || true

[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.6.0/32
PersistentKeepalive = 120
Endpoint = 127.0.0.1:50001

2. Peer S

Убедитесь, что Peer S правильно настроен для обработки трафика между Peer J и Peer P. Здесь также важна корректность AllowedIPs:

[Interface]
PrivateKey = ...
Address = 10.0.0.0/24, 10.0.6.0/24
MTU = 1342
ListenPort = 80
PreUp = /usr/bin/udp2raw -s -r 127.0.0.1:80 -l <S's LAN IP>:443 -k "secret" -a >/var/log/udp2raw.log 2>&1 &
PreDown = killall udp2raw || true

[Peer]
PublicKey = E8K...
AllowedIPs = 10.0.0.3/32, 10.0.6.3/32
PersistentKeepalive = 120

[Peer]
PublicKey = wlx...
AllowedIPs = 10.0.0.0/24, 10.0.6.0/24

3. Peer P

Конфигурация Peer P также должна включать разрешённые IP для доступа к Peer J через Peer S:

[Interface]
PrivateKey = ...
Address = 10.0.0.1/32, 10.0.6.1/32
MTU = 1342

[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.0.0/24, 10.0.6.0/24
Endpoint = <S's internet IP>:80

Проверка маршрутизации и файрволов

  1. Маршрутизация: Убедитесь, что маршрутизация работает корректно на всех пирах. Выполните ip route или route -n на каждом пиру и проверьте, чтобы трафик шёл через соответствующие интерфейсы.

  2. Файрвол: Убедитесь, что файрвол (например, iptables) на всех участниках сети не блокирует соединения. Добавьте следующие правила на Peer S, чтобы разрешить Forward:
iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
  1. Ping с Peer P на Peer J: После выполнения всех вышеуказанных настроек выполните команду ping 10.0.6.3 с Peer P. Если всё настроено правильно, пинг должен пройти.

Заключение

Если после выполнения всех вышеупомянутых шагов проблема остаётся, необходимо проверить журналы на каждом из пиров, чтобы выявить возможные ошибки в подключении или маршрутизации. С помощью wg show можно получить информацию о состоянии соединений WireGuard. Вы также можете проверить логи udp2raw, если они содержат ошибки при обработке трафика.

Убедитесь, что все публичные ключи правильно соответствуют друг другу и что в конфигурациях указаны правильные IP-адреса и ключи.

Оцените материал
Добавить комментарий

Капча загружается...