ITCooky Recetas

Vamos a cocinar it cositas

¡Como acceder al servidor doméstico detras del NAT, externamente por ssh, a través de un servidor en Internet!

дата febrero 29, 2020

Por ejemplo, hay un servidor en casa y quiero conectarme a él a través de ssh (tal vez incluso a través de scp), bueno, solo para checkear como esta. Solía hacerlo a través de una VPN asi ¡Acceso remoto a mi servidor doméstico FreeBSD a través de OpenVPN! e incluso funcionó, el enrutador del proveedor de cable normalmente hace port forwanding, solo tenía que conocer la IP externa. Pero ahora traté hacer port forwanding en el enrutador de un proveedor de Internet móvil, y nada, parece que hat que pagar por eso a parte y solo funciona si compra una IP estática…

… pero, de hecho, no necesita administrar enrutador, existe una cosa llamada túnel ssh. ¡El servidor doméstico se conecta a un servidor en Internet que está configurado para reenviar todas las conexiones (designadas) a otro lugar! Para este método, necesita su propio servidor VDS / VPS … ¡pero quien no lo tenga ahora, todos! Sí, ¡incluso unos Amazon Clouds valdria!

Releyé muchas articulos, pero tal vez solo este artículo me ayudó mucho evgslb.blogspot.com gracias. Pero por cierto, lo leí durante medio día, ¡no podía entender cómo debería funcionar!

Como funciona eso
Necesitamos un servidor Linux disponible en Internet con IP estática directa. No lo pude entender por mucho tiempo, pero no necesito hacer configuraciones especiales , ¡solo necesito tener un usuario que pueda conectarse a este servidor a través de ssh! Además, en las tres máquinas enbolucradas, debe estar instalado ssh – en Linux, ya esta instalado, existe la opinión de que es posible hacerlo en Windows, a través de Putty. En la maquina a que vas a conectar, en él debe ejecutar el túnel ssh para recibir, y en el que conectará el túnel ssh a la salida.Un comando inicia estos túneles para conectarse a un servidor en Internet.

Configurar un servidor para conectar túneles de clientes
Tengo un viejo servidor Centos 6.8, ¡todas las rares quizas se deben a eso!

Me conecto al servedor tras ssh

Creo un usuario user1tunnel
/usr/sbin/adduser user1tunnel
crear una contraseña para él
user1tunnel passwd

Luego estaba un poco preocupado por lo que pasa si alguien entra en esta cuenta y comienza a hacer algo en el servidor. Para hacer esto, hice el shell lshell para usuarios en el que todo está recortado aquí ¡Configure, mueva, pruebe el nuevo VPS en CentOS 6! do tambien!

Agrego este shell al nuevo usuario
chsh -s /usr/bin/lshell user1tunnel
Al mismo tiempo, el centos jura que este shell no está en ningún archivo, simplemente lo agregó a ese archivo y repitió

Ahora se necesita verificar la configuración de ssh aquí
/etc/ssh/shhd_config
debe ser incluido

AllowTcpForwarding yes
GatewayPorts yes

ese tambien (en futuro seguro sera necesario)

PubkeyAuthentication yes
AuthorizedKeysFile      /home/%u/.ssh/authorized_keys

y el usuario debe estar escrito en

AllowUsers uservasya usersasha userarsen user1tunnel

Reiniciamos ssh, mi conexión ssh no se rompe
/sbin/service sshd restart

También es importante establecer aquí esos parámetros, deberían ayudar a romper las sesiones bloqueadas, que no se completaron correctamente

ClientAliveInterval 15
ClientAliveCountMax 3

Esto solo funciona en SSH 2, si no sucede nada, el servidor le pregunta al cliente «Estás vivo» 3 veces cada 15 segundos, ¡y cuelga la llamada si no hay respuestas! Debería ayudar con un puerto ocupado, eso pasa cuando estas connectado mucho tiempo, luego se cuelga, se cae, se reinicia pero el servidor dice

Warning: remote port forwarding failed for listen port 12345

Configuracion del aquel quien necesita conectarse a través de ssh
¡Tengo Ubuntu 18.04 Desktop en la computadora de mi casa y quiero conectarme a él! Además, con este método, con ssh-tunnel no se necesita saber cuál es mi IP, ¡porque se cambia constantemente!

En la consola, ejecute
ssh -f -N user1tunnel@123.45.67.89 -R 12345:localhost:22
por ahora asi, debe ingresar la contraseña con las manos
f – significa ejecutar en segundo plano
123.45.67.89 – ip del servedor con ssh y el usario que habiamos hecho antes
R – eso significa el túnel de entrada
12345 – qualquiert port libre

Después de ejecutar ese comando, ya puede acceder del servidor a esta computadora a través de ssh asi
ssh -p 12345 juancho@localhost
donde juancho es el nombre del usario en la computadora a que nos conectamos

Comprobamos si el puerto está escuchando … y los comandos network no funcionan, pero está claro que el comando se ejecuta así
ps -aux | grep ssh
habra que pensar en eso mas tarde…

Configuro aquel computador desde el que necesitas conectarte a través de ssh
Y ese computadora también sera Linux

Primero necesitas hacer un túnel
ssh -f -N user1tunnel@123.45.67.89 -L 12345:localhost:12345
lo mismo pero con L

Y conectate desde la consola
ssh -p 12345 juancho@localhost

Aquí todo se observa de maravilla perfectamente, a diferencia del aquel a quién hay que conectarse
netstat -ntlp | grep 12345
vemos eso

tcp        0      0 127.0.0.1:12345         0.0.0.0:*               LISTEN      8166/ssh            
tcp6       0      0 ::1:12345               :::*                    LISTEN      8166/ssh            

Cómo hacer que el túnel ssh no se rompa y se vuelva a conectarse
Lo estoy haciendo tal y como lo ponen aquí, es sorprendente que haya tal contenido en YouTube

Instalo
sudo apt-get install autossh

Vamos a la carpeta home .ssh y generamos las claves allí, estamos bajo el usuario juancho

cd /home/juancho/.ssh/
ssh-keygen -t rsa

doy el nombre juancho sin contraseña

Una vez, las claves funcionaron solo cuando las generé por segunda vez … si no está claro por qué no funciona, ¡genere las claves nuevamente!

juancho.pub eso hay que poner al servedor
sudo scp ./juancho.pub user1tunnel@123.45.67.89:/home/user1tunnel/

En el servidor remoto ejecutamos
mkdir /home/user1tunnel/.ssh
cat ./juancho.pub >> ~user1tunnel/.ssh/authorized_keys
chown -R user1tunnel:user1tunnel /home/user1tunnel

Ahora en la computadora local podemos ingresar sin una contraseña aaasi
ssh user1tunnel@123.45.67.89

Ahora ejecutaremos autossh, es importante que se ejecute en segundo plano, y en segundo plano no se puede ingresar la contraseña, por lo que tuvimos que hacer todo eso con archivos
autossh -M 0 -f -N user1tunnel@123.45.67.89 -R 12345:localhost:22
Funciona, inmediatamente se pone en segundo plano con la tecla -f , para el diagnóstico se puede usarlo sin ese flag

Ahora agregue al cron esa linea para que comience en el arranque
crontab -e
Aquí también es necesario registrar dónde obtener el archivo clave, de lo contrario no comenzará

@reboot autossh -M 0 -f -N user1tunnel@123.45.67.89 -R 12345:localhost:22 -i /home/juancho/.ssh/juancho

Cómo conectarse no desde Linux
La gente usa Putty, en una ventana abren un túnel, en la segunda se conectan al port local para la redirección, ¡no funcionó para mí!

La forma más confiable es iniciar sesión en el servidor usando Putty y allí hacer
ssh -p 12345 juancho@localhost
específicamente para esto en lshell esta permitido usar comando ssh

También en Windows 10 + Windows Subsystem para Linux (incluido en los componentes de Windows) + Ubuntu 18.04 LTS (que se instala desde la tienda de Windows), puede hacer todo como en Linux para elevar el túnel y conectarse a través de ssh
ssh -f -N user1tunnel@123.45.67.89 -L 12345:localhost:12345
ssh -p 12345 juancho@localhost


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *