Novato en redes. Tengo dos interfaces en el host: eth0
y tun0
desde 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.170
estaba la dirección de puerta de enlace para VPN (encontrada usando ip route
)?
- El ejemplo anterior crea una
-N
cadena NUEVA ( ) para la tabla nat (-t
). - 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. - Está implícito que para el tráfico que se origina desde cualquier fuente, cambie el destino a la puerta de enlace del
tun0
dispositivo.
Pregunta 2a)
Para el tráfico saliente, ¿la dirección de destino es la dirección IP de la interfaz eth0
o es la dirección de la puerta de enlace? Suponiendo que eth0
sea 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 iptables
cadenas (en la parte inferior de la respuesta).
Respaldo
iptables-save > back.up.file
Verifique su versión de distribución de Linux, necesitaba agregarla sudo
porque no era root.
Pregunta 2(a), 2(b)
Para determinar las direcciones de origen y destino, encontré las funciones LOG
y TRACE
muy ú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, filter
pero la he indicado explícitamente para que pueda ver la sintaxis, especialmente si desea explorar otras tablas mangle
, nat
etc. Inserté la regla -I
porque 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 TRACE
comando 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 ( eth0
y 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 iproute2
ejecutando:
ip route
Esto mostrará la puerta de enlace predeterminada, qué interfaces se utilizan para qué rangos de direcciones.
Diagrama de flujo de paquetes
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.1
Linux:traceroute 1.1.1.1
¡Ya terminaste!