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 en 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 va a cualquier otra subred debe ir directamente desde la computadora portátil, sin pasar por el servidor (usando el túnel).
fuente
-interface
no es una opción, porroute
lo que la sugerencia anterior da un error de uso. Además, ¿cómo resultará esto en el enrutamiento a través del túnel ssh como pregunta el OP?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).
fuente
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
iptables
funcionalidades 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 pares específicos de servidor + puerto 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 se encuentra SSH).
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.
Se usa
iptables
para redirigir paquetes dirigidos a Xn: Pn a localhost: Lniptables -t nat -A OUTPUT -p tcp -d X1 --dport P1 -j DNAT --a destino localhost: L1 iptables -t nat -A OUTPUT -p tcp -d X2 --dport P2 -j DNAT - localhost de destino: L2
Ahora SSH a la puerta de enlace, utilizando la
-L
opción para hacer un túnel del tráfico desde localhost: Ln a (Xn, Pn):ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...
Ejemplo:
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 la
-D
opción SSH para simular un proxy SOCKS y hacer un túnel de todo su tráfico a través de eso.fuente
Lo que quieres es la definición de una VPN.
Una VPN no debería
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.
fuente
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.
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 desea simularlo porque sería demasiado complicado), debería considerar OpenVPN , que hará exactamente lo que está 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.
fuente
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):
luego conectarse a
localhost:2222
, será como conectarse alocalhost:2222
desdejump_box
. Puede usar múltiples opciones -L a la vez, y puede conectarse a servicios en otros hosts si ssd_config on lojump_box
permite.Puede usar
autossh
consystemd
o similares para mantener los túneles en funcionamiento.fuente