it-swarm-es.tech

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

Hay ciertos sitios web/servicios a los que solo puedo acceder desde la subred en la que se encuentra mi servidor (piense en el escenario típico de la intranet). ¿Hay 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 a un servidor que está en una subred que realmente puede acceder a estos servicios.

¿Puedo encapsular automáticamente todo el tráfico a las subredes de X e Y para atravesar 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 va a cualquier otra subred debe ir directamente desde la computadora portátil, sin pasar por el servidor (usando el túnel).

14
Ruben Vermeersch

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 comando ifconfig.

6
Sam Coles

Las versiones recientes de OpenSSH admiten dispositivos de red tun/tap para un verdadero soporte de VPN. Consulte https://help.ubuntu.com/community/SSH_VPN para obtener documentación básica (obviamente destinada a Ubuntu, pero el principio básico se aplica en otros lugares).

3
durin42

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 funciones iptables que pueden existir solo 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 específicos servidor + puerto se empareja a través de un túnel SSH. Nota: las direcciones IP X1, X2, etc. son las direcciones IP del servidor tal como se ven desde el host de la puerta de enlace (en el que ingresa 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. Use iptables para redirigir los paquetes dirigidos a Xn: Pn a localhost: Ln

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

  3. Ahora SSH a la puerta de enlace, usando el -L opción para tunelizar 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:

  • solo funciona para TCP, si es que funciona ...

  • si desea acceder a más de un servidor, probablemente sea menos trabajo configurar una VPN

  • aún podría ser más fácil usar SSH -D opción para simular un proxy SOCKS y hacer un túnel de todo su tráfico a través de eso.

1
Riccardo Murri

subredes de X e Y para atravesar este túnel, sin tener que ejecutar toda la solución VPN que enviaría todo mi tráfico a través del servidor?

Lo que quieres es la definición de una VPN.

Una VPN no debería

enviar todo [su] tráfico a través del servidor?

Si es así, no está configurado correctamente.

Se supone que cualquier máquina a la que intente acceder a través de un túnel o VPN, por definición, no es accesible a través de Internet. Por lo tanto, solo la dirección necesaria, no enrutable de Internet debe ser enrutada por la VPN.

Si tiene una situación más complicada, como solo la máquina X e Y y nada más. Su personal de TI puede ponerlos en una subred por usted. Luego, en su computadora cliente, solo dirija esa subred por la VPN.

1
Stephen Jazdzewski

¿De alguna manera puedo 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 de punto a punto, la idea es que conecte un puerto en su 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 imagina.

En otras palabras: todo el tráfico que va a cualquier otra subred debe 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 un tráfico VPN seguro (es decir, no quiere usarlo porque sería demasiado complicado), debería mirar OpenVPN , lo que servirá exactamente lo que estás describiendo. No solo encapsularía todo el tráfico, sino que se puede hacer de manera que solo el tráfico destinado a esas subredes haga el viaje a través de la tubería VPN. Te advertiré que aún necesitarás editar un archivo de texto en las máquinas locales y remotas, pero es bastante fácil de ejecutar.

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

0
Avery Payne

Como han dicho otros, si debe "encapsular todo el tráfico a las subredes", entonces probablemente quiera usar VPN.

Sin embargo, para acceder a unos pocos servicios, es posible que desee utilizar la función de reenvío de puerto local de SSH, que es realmente simple. Por ejemplo, si ingresa (desde su computadora portátil):

ssh -N -L 3333:localhost:2222 jump_box

luego conectando a localhost:2222, será como conectarse a localhost:2222 de jump_box. Puede usar múltiples opciones -L a la vez, y puede conectarse a servicios en otros hosts si ssd_config en jump_box lo permite.

Puede usar autossh con systemd o similar para mantener los túneles en funcionamiento.

0
Jeff