SNAT no funciona para mantener la IP real del cliente, MASQUERADE funciona

SNAT no funciona para mantener la IP real del cliente, MASQUERADE funciona

Tengo 3 hosts: AAA, BBB, CCC.

  1. Anfitriónaaaes unServicio OpenVPNr con IP172.17.10.1y máscara 255.255.255.0.
  2. AnfitriónBBBtiene 2 interfaces tun: • unaServidor OpenVPNcon IP172.16.10.1y máscara 255.255.255.0 • unCliente OpenVPNcon IP172.17.10.50(conectado al servidor OpenVPN AAA)
  3. AnfitriónCCCes un cliente OpenVPN con IP172.16.10.50(conectado al servidor OpenVPN BBB).Tiene enrutamiento a 172.17.10.0/24 vía 172.16.10.1.

ingrese la descripción de la imagen aquí

Mi objetivo es que el host CCC haga ping con éxito al host AAA y al host AAA para ver el tráfico desde la IP original del host CCC (172.16.10.50).

Lo configuré iptables -A FORWARD... -J ACCEPTen el host BBB.

En el host BBB he configuradoPOSTRRUTAMIENTOregla. Por ejemplo, con MASQUERADE el ping es exitoso, pero el problema es que de esta manera el host AAA ve la IP src 172.17.10.50 (la ip del host BBB): iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

Cambio MASQUERADE a SNAT, pero falla el ping: iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

El problema es que con tcpdump veo que el tráfico no sale del host BBB y no hay tráfico para el host AAA:

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

Intenté cambiar SNAT a la IP de origen 172.17.10.55(una dirección IP de la red 172.17.10.0/24), pero nuevamente el ping falla y nuevamente el tráfico no sale del host BBB:

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

¿Por qué no puedo usar SNAT con --to-source 172.16.10.50 o incluso con --to-source 172.17.10.55?(¿Qué dirección IP es de la misma red 172.17.10.0/24) para hacer ping a 172.17.10.1 desde el host CCC?

El tráfico parece permanecer en el host BBB y no sale de su tun17. Veo que el tráfico va de HOST CCC a HOST BBB, el tráfico se reenvía de tun16 a tun17, pero luego no se puede enviar al host AAA con SNAT.

El ping sólo funciona si la dirección IP de origen del paquete es 172.17.10.50. Si cambio la IP de origen a 172.17.10.55, por ejemplo, el ping falla.

Creo que el problema no es el firewall ni el enrutamiento. Sospecho que hay alguna restricción de OpenVPN, pero no estoy seguro. Los dos servidores OpenVPN están en --topology subnetmodo con máscaras de red /24.

Respuesta1

Tienes que agregarirouteen ccd para manipular la tabla de enrutamiento interna de openvpn.

De lo contrario, openvpn no sabe dónde enrutar los paquetes. En el registro de openvpn debe tener una línea como "MULTI: dirección de origen incorrecta del cliente [DIRECCIÓN IP], paquete descartado"

Leer más aquí:

https://community.openvpn.net/openvpn/wiki/RoutedLans

información relacionada