
Me encontraba en el siguiente escenario. Necesitaba conectarme por SSH a un servidor por el puerto 8666, pero a través de otro servidor que tenía acceso a la red del servidor destino. En otras palabras, necesitaba redireccionar el puerto 22 del servidor intermedio al puerto 8666 del servidor destino. De este modo, cuando me conectara al servidor A por el puerto 22, en realidad estaría conectándome al servidor B por el puerto 8666. Parece un caso extraño, pero es más común de lo que parece.
En realidad estamos redireccionado puertos, y en linux disponemos de varias herramientas. Personalmente prefiero usar socat
.
Para resolver el problema, simplemente ejecutamos el siguiente comando en el servidor intermedio:
socat TCP-LISTEN:22,fork TCP:mi-servidor-destino.com:8666
TCP-LISTEN:22,fork
escucha en el puerto 22 y crea un proceso hijo para cada conexión.TCP:mi-servidor-destino.com:8666
redirige la conexión al servidor destino en el puerto 8666.
Para que el comando se inicie automáticamente al arrancar el servidor, podemos creamos un servicio systemd en /etc/systemd/system/socat-ssh-reverse-proxy.service
con el siguiente contenido:
[Unit]
Description=Socat SSH Reverse Proxy
After=network.target
[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:22,fork TCP:mi-servidor-destino.com:8666
Restart=always
User=nobody
Group=nogroup
[Install]
WantedBy=multi-user.target
A continuación, habilitamos el servicio y lo iniciamos:
systemctl daemon-reload
systemctl enable socat-ssh-reverse-proxy
systemctl start socat-ssh-reverse-proxy
Ahora cuando haga ssh yo@servidor-intermedio.com
en realidad estaré conectándome a ssh yo@mi-servidor-destino.com:8666
.
¡Fácil!
{{ comments.length }} comentarios