Me gustaría acceder al puerto ssh del host de Linux de mi oficina desde casa. Lamentablemente, el host se encuentra detrás de un enrutador NAT. Por lo tanto, la dirección IP no está disponible públicamente. Sin embargo, hay acceso a otro host de Internet (Servidor) que desafortunadamente es solo acceso no root. Después de un tiempo de búsqueda, no encuentro una solución adecuada.
Siguiente configuración:
- PC de Office (Linux, acceso raíz) detrás de NAT (IP no pública) pero acceso completo a Internet.
- Servidor PC (Linux, sin acceso de root) IP estática y pública y acceso completo a Internet.
- PC doméstica (Linux, acceso raíz) detrás de NAT (IP no pública) pero acceso completo a Internet.
Conexiones posibles: PC de oficina -> Servidor <- PC de casa
No es posible: Office PC <-X- Server -X-> Home PC
Ni la PC doméstica ni el servidor pueden iniciar el acceso a la PC de Office. Pero tanto la PC de Office como la PC doméstica pueden iniciar conexiones al Servidor.
El túnel SSH inverso no es posible: probé un método llamado túnel ssh inverso. Desafortunadamente, esto requiere que GatewayPorts en el servidor esté configurado en "yes" en / etc / ssh / sshd_config, donde no tengo acceso de root.
En principio debería ser posible:
0) En el servidor, inicio un programa de espacio de usuario que escucha en 2 puertos (1 entrante, 1 saliente)
1) En la PC de mi oficina ejecuto otro programa que mantiene una conexión TCP abierta al puerto de salida del servidor.
2) Desde casa me conecto al puerto de entrada del servidor.
Debería haber una solución estándar para esto.
¿Cuál es la solución más rápida y limpia para resolver esto?
Franco
Respuestas:
Más tarde:
Lo que podría hacer es esto: en el paso 1, reenvíe un puerto remoto desde la PC de la oficina al servidor (
12345
se usa como ejemplo, cualquier puerto> 1024 debería hacerlo). Ahora, conectarse a 12345 en el servidor debería conectarlo al puerto 22 en officepc.En el paso 2, reenvíe el puerto 23456 desde su máquina doméstica a 12345 en el servidor (desde donde se reenvía a officepc: 22, como se configuró en el paso 1)
En el paso 3, se conecta al puerto local 23456 con el inicio de sesión de la PC de su oficina . Esto se reenvía en el paso 2 al puerto 12345 en su servidor y en el paso 1 a la PC de su oficina.
Tenga en cuenta que estoy usando autossh para los reenvíos, ya que es un contenedor ssh que vuelve a conectar automáticamente el túnel si se desconecta; sin embargo, ssh normal también funcionaría, siempre que la conexión no se caiga.
Existe una posible vulnerabilidad: cualquiera que pueda conectarse a localhost: 12345 en serverpc ahora puede conectarse a officepc: 22 e intentar hackearlo. (Tenga en cuenta que si está ejecutando un servidor SSH, de todos modos debe asegurarlo por encima de las protecciones básicas que están activadas de manera predeterminada; recomiendo al menos deshabilitar el inicio de sesión de root y deshabilitar la autenticación de contraseña; consulte, por ejemplo, esto )
Editar : He verificado esto con la misma configuración, y funciona.
GatewayPorts no
solo afecta a los puertos abiertos al mundo en general, no a los túneles locales. Esto es lo que son los puertos reenviados:Entonces, en lo que respecta a la pila de red, es todo el tráfico local en las respectivas interfaces de bucle invertido (más conexiones ssh a serverpc); por lo tanto,
GatewayPorts
no está marcado en absoluto.Sin embargo, existe la directiva
AllowTcpForwarding
: si es asíno
, esta configuración fallará ya que no se permite ningún reenvío, ni siquiera a través de la interfaz de bucle invertido.Advertencias :
si usa autossh y ssh reciente, es posible que desee usar ssh
ServerAliveInterval
yServerAliveCountMax
para mantener el túnel en funcionamiento. Autossh tiene un control incorporado, pero aparentemente tiene algunos problemas en Fedora.-M0
deshabilita eso y-oServerAliveInterval=20 -oServerAliveCountMax=3
comprueba si la conexión está activa : prueba cada 20 segundos, si falla 3 veces seguidas, detiene ssh (y autossh crea una nueva):puede ser útil reiniciar el túnel ssh si falla el reenvío, utilizando
-oExitOnForwardFailure=yes
: si el puerto ya está vinculado, puede obtener una conexión SSH que funcione, pero no un túnel reenviado.~/.ssh/config
es aconsejable usar para las opciones (y puertos), de lo contrario las líneas de comando se vuelven demasiado detalladas. Por ejemplo:Entonces puede usar solo el alias del servidor:
fuente
GatewayPorts no
restringe los puertos abiertos para que solo sean accesibles en la interfaz de bucle invertido; tenga en cuenta que en el paso 2 está reenviando en la interfaz de bucle invertido (de hecho, ambos reenvíos son "solo localhost"), por lo que esto podría funcionar (AllowTcpForwarding no
en la configuración sshd se rompería esto).GatewayPorts no
; editó la respuesta. Tenga en cuenta que hay otras directivas (comoPermitOpen
yAllowTcpForwarding
) que pueden romper esta configuración: manpagez.com/man/5/sshd_configSi puede enviar ssh al servidor interno desde su casa y desde el servidor interno a la máquina Linux de su oficina, entonces desde su casa puede usar la ssh
ProxyCommand
para rebotar silenciosamente a través del servidor a la máquina interna a través denc
(netcat)Luego, usted
ssh user@internalpc
y usted se reenvían silenciosamente a través de la máquina del servidor, no se requiere la apertura de puertos o túneles en ninguno de los extremos.fuente
Instale Robo-TiTO en la computadora a la que desea acceder SSH de forma remota.
Las siguientes instrucciones de instalación son obsoletas, ya que el sitio se ha movido. La nueva URL es https://github.com/formigarafa/robotito
fuente
CLIENT_PASSPHRASE = "logmein"
, en texto sin formato . Eso es literalmente cero seguridad: estás haciendo un agujero del tamaño de un camión para que cualquiera pueda entrar. Contraste con la autenticación de clave pública SSH: me autentico a través de un canal seguro , utilizando credenciales que nunca cruzan el cable. ¿Quién está manteniendo su computadora segura ahora?La solución de Piskvor funciona y es agradable. Sin embargo, mantiene abiertos los terminales con colgantes de inicio de sesión. No muy bien
Siempre he usado este pequeño script que escribí para conectarme a un servidor y mantenerlo conectado ejecutándolo en cron:
Apuesto a que podríamos solucionar la solución de Piskvor usando el autossh más elegante junto con una pantalla separada o usar los argumentos ssh -NT para mantener la conexión en segundo plano.
fuente
homepc
computadora).Para mí, parece que, en lugar de un túnel SSH, deberías probar una VPN: del tipo que funciona usando un servidor en el exterior para proxy, como Hamachi . Hay otros softwares gratuitos como este, pero Hamachi es mi favorito.
fuente
5.0.0.0/8
red tiene direcciones IPv4 públicas asignadas, Hamachi está en problemas (si Hamachi se está ejecutando, no puede acceder a una parte de Internet algo aleatoria). Además, Hamachi ya no es de uso gratuito.