Tenho três pares em uma rede WireGuard:
- O Peer J está atrás de um firewall corporativo padrão bloqueando todos os UDP de saída,
- O Peer S é um servidor com IP estático e
- Peer P é meu smartphone.
No UDP out;
+-----------+ (Static IP)
| Peer J ---|--- Peer S ------ Peer P
+-----------+ [Regular wg]
So, UDP over TCP
Quero conectar o peer P ao peer J (P ssh em J) via WireGuard, onde J e S são conectados por UDP sobre TCP (usando wangyu-/udp2raw ), enquanto S e P têm uma conexão WireGuard UDP padrão.
Aqui está minha tentativa até agora:
Par J
[Interface]
# PublicKey = E8K...
PrivateKey = ...
Address = 10.0.0.6/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 S
[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.0.0/32
PersistentKeepalive = 120
Endpoint = 127.0.0.1:50001
Pares
[Interface]
# PublicKey = Yf3...
PrivateKey = ...
Address = 10.0.0.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 J
[Peer]
PublicKey = E8K...
AllowedIPs = 10.0.0.6/32
PersistentKeepalive = 120
# Peer P
[Peer]
PublicKey = wlx...
AllowedIPs = 10.0.0.19/32
Par P
[Interface]
PublicKey = wlx...
Address = 10.0.0.19/32
MTU = 1342
# Peer S
[Peer]
PublicKey = Yf3...
AllowedIPs = 10.0.0.0/24
Endpoint = <S's internet IP>:80
Problema: O peer P não pode fazer ping no peer J. Mas o peer J pode fazer ping no peer S e vice-versa; e o peer S pode fazer ping no peer P e vice-versa. O traceroute de P para J é:
raceroute to 10.0.0.6 (10.0.0.6), 30 hops max, 60 byte packets
1 ip-10-0-0-0.region.compute.internal (10.0.0.0) 54.950 ms 54.063 ms 53.245 ms
2 * * *
3 * * *
Então há algo errado com o roteamento em S, mas não consigo descobrir qual é exatamente o problema.
O problema era que J tinha
AllowedIPs = 10.0.0.0/32
em sua[Peer]
seção para S, o que significa que apenas tráfegos destinados a10.0.0.0
seriam enviados para S.Para que o tráfego destinado a qualquer host dentro da sub-rede 10.0.0.0/24 ( como
10.0.0.19
) seja enviado para S para encaminhamento posterior,AllowedIPs = 10.0.0.0/24
deve ser usado.