¿Cómo enrutar direcciones específicas a través de un túnel?

¿Cómo enrutar direcciones específicas a través de un túnel?

Hay ciertos sitios web/servicios a los que sólo puedo acceder desde la subred en la que se encuentra mi servidor (piense en el escenario típico de una intranet). ¿Existe alguna manera de enrutar de forma transparente el tráfico que va a estas direcciones a través de un túnel SSH?

Considere la siguiente configuración:

Mi computadora portátil está conectada a la red doméstica. No puede acceder a los servicios en ips X e Y directamente. Tengo un túnel SSH hacia un servidor que está en una subred que realmente puede acceder a estos servicios.

¿Puedo de alguna manera encapsular automáticamente todo el tráfico a las subredes de X e Y para pasar por este túnel, sin tener que ejecutar toda la solución VPN que enviaría todo mi tráfico a través del servidor? En otras palabras: todo el tráfico que vaya a cualquier otra subred debería ir directamente desde la computadora portátil, sin pasar por el servidor (usando el túnel).

Respuesta1

Puede especificar la interfaz a través de la cual enrutar el tráfico en la tabla de enrutamiento:

sudo route add <host.com> -interface <ppp0>

Donde host.com es el nombre de host o IP al que desea acceder a través de la interfaz y ppp0 es el identificador de enlace para su VPN que se muestra con el ifconfigcomando.

Respuesta2

Las versiones recientes de OpenSSH admiten dispositivos de red tun/tap para una verdadera compatibilidad con VPN. Verhttps://help.ubuntu.com/community/SSH_VPNpara obtener documentación básica (obviamente destinada a Ubuntu, pero el principio básico se aplica en otros lugares).

Respuesta3

Descargo de responsabilidad: en realidad no he probado lo que voy a describir y, de hecho, puede estar completamente equivocado, pero su pregunta es tan intrigante que no puedo resistir la tentación de redactar una respuesta. :-) Además, la configuración aquí depende de algunas iptablesfunciones que podrían existir sólo en Linux.

Suponiendo que desea conectarse desde su computadora portátil a un puerto específico P1 en el servidor X1, al puerto P2 en el servidor X2, etc., voy a describir cómo enrutar el tráfico TCP a estos pares de servidor+puerto específicos a través de un túnel SSH. Nota:las direcciones IP X1, X2, etc. son las direcciones IP del servidor vistas desde el host de la puerta de enlace (en el que ingresa mediante SSH).

  1. Seleccione algunos puertos locales no utilizados L1 (por ejemplo, 10000), L2 (por ejemplo, 10001), etc. Los puertos L1, L2, ..., deben ser todos distintos y su número debe ser igual al número de servidores distintos (Xn,Pn)+ pares de puertos.

  2. Úselo iptablespara redirigir paquetes dirigidos a Xn:Pn a localhost:Ln

    iptables -t nat -A SALIDA -p tcp -d X1 --dport P1 -j DNAT --localhost de destino:L1 iptables -t nat -A SALIDA -p tcp -d X2 --dport P2 -j DNAT -- localhost al destino: L2

  3. Ahora SSH a la puerta de enlace, usando la -Lopción para canalizar el tráfico desde localhost:Ln a (Xn, Pn):

    ssh gateway.server -L localhost:L1:X1:P1 -L localhost:L2:X2:P2 ...

Ejemplo:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Advertencias:

  • sólo funciona para TCP, si es que funciona...

  • Si desea acceder a más de un servidor, probablemente sea menos complicado configurar una VPN.

  • Aún podría ser más fácil usar -Dla opción SSH para simular un proxy SOCKS y canalizar todo el tráfico a través de él.

Respuesta4

¿Puedo de alguna manera encapsular automáticamente todo el tráfico a las subredes de X e Y para pasar por este túnel, sin tener que ejecutar toda la solución VPN que enviaría todo mi tráfico a través del servidor?

Esto es un poco extraño a primera vista porque eso es lo que una VPN hará por ti. SSH tiende a ser un asunto punto a punto, la idea es que conectes un puerto en tu máquina local al puerto de una máquina remota en otro lugar; Realmente no fue diseñado para el tipo de tráfico que imaginas.

En otras palabras: todo el tráfico que vaya a cualquier otra subred debería ir directamente desde la computadora portátil, sin pasar por el servidor (usando el túnel).

Una vez más, una VPN se encargaría de eso.

Si le preocupa una solución "pesada" para obtener tráfico VPN seguro (es decir, no quiere jugar con ella porque sería demasiado complicado), realmente debería considerarOpenVPN, que hará exactamente lo que estás describiendo. No sólo encapsularía todo el tráfico, sino que se puede hacer de manera que sólo el tráfico destinado a esas subredes realice el viaje a través de la tubería VPN. Le advertiré que aún necesitará editar un archivo de texto en las máquinas locales y remotas, pero es bastante fácil de ejecutar.

Para sus propósitos, como no desea que la parte intermedia (un servidor) vea su tráfico, configuraría la VPN para conectarse directamente desde su máquina a la máquina remota. Cualquier paquete enrutado se cifrará antes de salir de su computadora portátil, por lo que tendrá una cobertura del 100% de un extremo a otro.

información relacionada