No sé si te ha pasado, a veces te llaman y te piden que revises un equipo linux, pero este está en una red interna, quizá dentro de otra red que está dentro de otra red, que está dentro de otra red.. en fin, un chorro de NAT que te impide simplemente hacer: ssh IP y ya.
Caramba, pues hoy me pasó, a un cliente le han colocado sus dos servidores, con 128GB de RAM, 20TB de disco y 80 procesadores dentro de una red privada, y esos servidores pueden iniciar conexiones hacia internet, pero desde internet no se puede acceder a ellos.
El cliente ofrece una alternativa acongojante: teamviewer. Imagínate, en vez de usar el simple y eficiente SSH, tengo que abrir un teamviewer y luego desde un windows que está con ese teamviewer, poder acceder entonces por putty (ssh) a ambos mega servidores (porque si te diste cuenta, no son pelo de cochino).
Y lo malo es que lo que yo escribo a veces el teamviewer no lo entiende, doy un click para coger foco y lo interpreta como que he arrastrado la barra de tareas, o escribo yum -y update y el teamviewer piensa que puse: y -y um update (te juro que me pasó)…. es agotador, copiar y pegar ya no es con un click ni nada por el estilo.. no señor, toca control C y control V.. (en linux se copia marcando con el mouse y se pega apretando el botón del medio o la ruedita del medio).
Bueno, ya paremos las quejas.
Entré al servidor de mi cliente por teamviewer, porque no me queda más remedio, y me conecté así a un server nuestro que sí tiene una ip pública:
ssh -R 22222:localhost:22 IPdelservernuestro
qué hace -R? Alabado sea el señor.. pues hace una VPN, se conocen como VPN del pobre, entre el puerto 22222 de nuestro servidor y el puerto 22 del server de mi cliente (localhost:22).
Ahi dejé el teamviewer (le cerré, total la sesión de ssh quedó abierta porque el putty quedó abierto), y entonces desde mi servidor (IPdelservernuestro) puse:
ssh localhost -p22222
-p22222 es que se conecte por ssh a esta IP (localhost) en el puerto 22222 que es el que abrí desde el cliente aquel.
Y listo, ya estoy dentro del cliente!
No importa dónde esté el cliente, si puede entrar por SSH a un server que controlemos, podemos hacer este ssh reverso.
Ahora, alguno dirá: “valiente cosa.. tuviste que entrar por teamviewer”. Bueno, eso es porque pude hacerlo.. pero recuerda que luego levanté el ssh, cerré la sesión de teamviewer dejando el putty ese abierto ahi.
Otro dirá: ah, pero y si cierran el putty? Bueno, o entro por teamviewer y le vuelvo a abrir, o le dejo corriendo dentro de una sesión de screen (ver más info de screen en www.ecualug.org)
Otro dirá: “sí , pero y si no hubiera habido teamviewer?” Bueno, en este caso le podría pedir al cliente (que seguramente sí está al lado del servidor): oye, escribe este comando. Y le crearía un usuario para que él pudiera entrar a mi servidor (porque no es necesario que entre como root, como usa un puerto alto, encima de 1024, no hay problema con eso).
Más quejas?