Además de enviar datos ssh, el protocolo ssh puede canalizar otro tráfico entre dos hosts. Los túneles ssh más comunes son remotos y locales.
La tunelización SSH o el reenvío de puertos SSH es un método para crear una conexión SSH cifrada entre un cliente y una máquina servidor a través de la cual se pueden retransmitir los puertos de servicios.
Túnel SSH local con reenvío de puertos
Puede usar un túnel ssh local cuando desee acceder a un recurso al que no puede acceder directamente, pero un servidor ssh al que tiene acceso sí puede. Estos son algunos escenarios.
Proxy a Servidor Remoto
En la imagen de arriba, el host azul no puede llegar a http://192.168.0.3
pero puede ssh a 192.168.0.2. El siguiente comando ssh se ejecutó en el host azul permitirá que el anfitrión azul alcance al anfitrión rojo.
ssh -L 8080:192.168.0.3:80 [email protected]
Ahora el host azul puede abrir un navegador, vaya a http://localhost:8080
, y se le presentará la página web alojada en 192.168.0.3.
Reenvío de puerto local
En la imagen de arriba, el host azul quiere conectarse al host rojo en el puerto 80, pero hay un firewall en el medio que lo niega. Debido a que el host azul puede ssh al host rojo, podemos crear un túnel ssh de reenvío de puerto local para acceder a ese puerto.
El comando en el host azul será:
ssh -L 8080:192.168.0.2:80 [email protected]
Ahora, cuando el host azul abre un navegador y va a http://localhost:8080
podrán ver lo que sea que tenga el servidor rojo en el puerto 80.
Sintaxis de reenvío de puerto local
Esta sintaxis para crear un túnel de reenvío de puerto ssh local es esta:
ssh -L <LPORT>:<RHOST>:<RPORT> <GATEWAY>
Túnel SSH remoto con reenvío de puertos
En este escenario, estamos creando un túnel ssh inverso. Aquí podemos iniciar un túnel ssh en una dirección, luego usar ese túnel para crear un túnel ssh en el otro sentido. Esto puede ser útil cuando coloca una computadora de dron dentro de una red y desea que "llame a casa". Luego, cuando llama a casa, puede conectarse a través del túnel ssh establecido.
Estamos en el host verde y queremos hacer ssh al host azul. Sin embargo, el firewall bloquea esta conexión directamente. Debido a que el host azul puede ssh al host verde, podemos conectarnos usando eso, y cuando el host verde quiera volver al host azul, puede viajar a lo largo de este túnel previamente establecido.
El host azul inicia un túnel ssh como este:
ssh -R 2222:localhost:22 [email protected]
Esto abre el puerto 2222 en el host verde, que luego lo reenvía al puerto 22 en el host azul. Entonces, si el host verde se conectara a sí mismo en el puerto 2222, llegaría al host azul.
El host verde ahora puede enviar ssh al host azul de esta manera:
ssh -p 2222 [email protected]
Uso de la opción -N
Al usar ssh, puede especificar -N
indicador que le dice a ssh que no necesita enviar ningún comando a través de la conexión ssh cuando se establece. Esta opción se usa a menudo cuando se crean túneles, ya que a menudo no necesitamos recibir un aviso.
Autossh
El autossh
El comando se usa para agregar persistencia a sus túneles. El trabajo que tiene es verificar que su conexión ssh esté activa y, si no lo está, crearla.
Aquí hay un comando autossh que puede reconocer.
autossh -N -i /home/blueuser/.ssh/id_rsa -R 2222:localhost:22 [email protected]
El -i /home/blueuser/.ssh/id_rsa
opción dice usar un certificado para autenticar esta conexión ssh.
Ahora, cuando su túnel se caiga, automáticamente intentará volver a conectarse y seguirá intentándolo hasta que tenga éxito. Para que sea persistente durante un reinicio, agregue el comando ssh como un trabajo cron.