iptables dirigiendo el tráfico a través de vpn

iptables dirigiendo el tráfico a través de vpn

Novato en redes. Tengo dos interfaces en el host: eth0y tun0desde mi cliente OpenVPN. Las direcciones IP son:

eth0    192.168.1.22
tun0    10.1.0.8

Pregunta 1

Paraextrovertidotráfico cambiando la dirección de destino a la de tun0¿lo obligará a usar la VPN?

No, pero usar la dirección de puerta de enlace para tun0 sí lo hace. Probado con lo siguiente:

    iptables -t nat -N VPN
    iptables -t nat -I OUTPUT -j VPN
    iptables -t nat -A VPN -p tcp -j DNAT --to-destination 10.1.0.170

¿Dónde 10.1.0.170estaba la dirección de puerta de enlace para VPN (encontrada usando ip route)?

  1. El ejemplo anterior crea una -Ncadena NUEVA ( ) para la tabla nat ( -t).
  2. El salto a la cadena VPN es desde OUT(justo después de la aplicación local). Usar insert ( -I) para reemplazar otras reglas en OUT.
  3. Está implícito que para el tráfico que se origina desde cualquier fuente, cambie el destino a la puerta de enlace del tun0dispositivo.

Pregunta 2a)

Para el tráfico saliente, ¿la dirección de destino es la dirección IP de la interfaz eth0o es la dirección de la puerta de enlace? Suponiendo que eth0sea la interfaz/puerta de enlace predeterminada.

Pregunta 2 b)

Para el tráfico generado desde la aplicación local, ¿cuál es la dirección de origen?

Pregunta 3

¿Se puede resolver esto únicamente con iptables o necesito modificar la tabla de enrutamiento? Como ambas interfaces están en el mismo host (es decir, en el mismo cuadro Debian).

Información adicional

Estoy tratando de comprender los principios para poder aplicarlos a mi caso. Hay tres subredes de dirección I en total, la tercera está en el rango 172.17.42.1/16 asociada a otra interfaz virtual docker0.

Básicamente quiero dirigir el tráfico desdejusto172.17.42.8 a través de la VPN.

Respuesta1

En primer lugar, la excelente figura vinculada desde la página iptables de la wiki de ArchLinux es útil para identificar el flujo de paquetes a través de las distintas iptablescadenas (en la parte inferior de la respuesta).

Respaldo

iptables-save > back.up.file

Verifique su versión de distribución de Linux, necesitaba agregarla sudoporque no era root.

Pregunta 2(a), 2(b)

Para determinar las direcciones de origen y destino, encontré las funciones LOGy TRACEmuy útiles:

iptables -t filter -I OUTPUT -m limit --limit 5/m --limit-burst 10 -j LOG  --log-prefix "ABC-LOG-PREFIX "

La tabla predeterminada es, filterpero la he indicado explícitamente para que pueda ver la sintaxis, especialmente si desea explorar otras tablas mangle, natetc. Inserté la regla -Iporque quería que los paquetes se registraran antes de que se aplicaran otras reglas. Se agregó un límite de velocidad para que el archivo de registro no se sature -m limit --limit 5/m --limit-burst 10. Finalmente se agregó un prefijo para que el archivo de registro se pueda buscar fácilmente --log-prefix. Por ejemplo, en Linux Mint:

cat /var/log/kern.log | grep "ABC-LOG-PREFIX"

En segundo lugar, para la depuración, el TRACEcomando rastreará un paquete durante todo el proceso:

IPTABLES -t raw -A PREROUTING -p tcp -j TRACE

Advertencia, esto rastrearátodopaquetes tcp, para más información consulteAdministrador Berlín

Pregunta 3

Como ambas interfaces ( eth0y tun0) estaban en el mismo host, en el siguiente diagrama de filtro de paquetes puede ver que el tráfico saliente comienza en el mismo punto. La ruta que toma un paquete está determinada por la puerta de enlace predeterminada y su interfaz asociada, que se puede determinar iproute2ejecutando:

ip route

Esto mostrará la puerta de enlace predeterminada, qué interfaces se utilizan para qué rangos de direcciones.

Diagrama de flujo de paquetes

diagrama de flujo de paquetes de iptables

Respuesta2

Por lo que puedo decir, estás hablando de túneles divididos (o más bien, de intentar desactivarlo).

Eche un vistazo a la directiva de puerta de enlace de redirección en OpenVPN:https://openvpn.net/index.php/open-source/documentation/howto.html#redirect

Respuesta3

En los siguientes ejemplos, el nombre del dispositivo VPN es tun0 (OpenVPN) y la puerta de enlace VPN es 172.21.23.172.

#1 - Instale VPN en su enrutador Linux (estoy usando ipvanish w. openvpn)

#2 - Enrutar el tráfico usando iptables

sudo iptables -t nat -A POSTROUTING -o [VPN dev] -j MASQUERADE

ejemplo:

sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

#3 - Configurar tablas de enrutamiento (para garantizar que todo el tráfico se enrute a través de la VPN)

sudo ip route add default via [VPN ipv4 address] dev [VPN dev]

ejemplo:

sudo ip route add default via 172.21.23.172 dev tun0

#4 - Verifique que los dispositivos en la red estén realmente enrutados a través de la VPN ejecutando estos comandos:

Windows: tracert 1.1.1.1Linux:traceroute 1.1.1.1

¡Ya terminaste!

información relacionada