vincular máquinas que están detrás de NAT a través del túnel ssh

vincular máquinas que están detrás de NAT a través del túnel ssh

Tengo dos maquinas. ambos detrás de NAT. También tengo acceso al SERVIDOR desde cada máquina. ¿Hay alguna forma de hacer un túnel ssh desde la máquina1 a la máquina2 a través del SERVIDOR?

Las máquinas cliente son Linux Mint. El SERVIDOR es debian. Solo tengo derechos de acceso de usuario en todas las máquinas

Respuesta1

Puedo ver cómo se podría hacer..

Entonces tienes 3 computadoras. A B C

A, B están detrás de NAT. Digamos que B es el intermediario.

Método 1

2 túneles

Para que pueda realizar una conexión SSH de A a B (Túnel 1). Y de C a B (Túnel 2). Y adelante Túnel 1, hasta el túnel 2.

La computadora A se conecta con SSH -L

La computadora C se conecta con SSH -R

-L o -R determina qué lado del túnel escucha y qué lado del túnel avanza.

Entonces, a menos que me haya equivocado, podrías hacer algo como:

A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB

Pero no estoy seguro de poder hacer dos conexiones al mismo servidor SSH, así que intente esto... Hacer dos servidores sshd diferentes...

edite sshd_config en CompB y verá que dice Puerto 22. Agregue una línea debajo que diga Puerto 222. Luego CompB ejecutará un servidor ssh en dos puertos.

Luego podrías conectarte a los servidores ssh en dos puertos diferentes 22 y 222.

A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222

El puerto 1234 es el puerto en la computadora A donde conecta su programa cliente... es la entrada al túnel 1

El puerto 2345 es el puerto de la computadora B y la entrada al túnel 2

El puerto 3456 es el puerto donde ejecuta el programa del servidor en CompC.

De esta manera, CompA puede conectarse a un servidor en CompC, a través de CompB.

Método 2

un tunel

Una opción es usar solo un túnel, pero luego solo obtendrás cifrado en la mitad de la ruta. 5.6.7.8 es la IP de CompC y el puerto 3456 es el servidor en CompC y el puerto 1234 es el puerto de escucha del túnel.

A$ ssh -L 1234:5.6.7.8:3456 user@compB

Luego, en CompA, conecte el programa cliente al puerto 1234 en CompA y todo irá a CompC.

Respuesta2

basado en la respuesta debarlop

Tengo A y B detrás de NAT. Y C al que se accede desde A y B

En CI solo debe tener acceso ssh. No se requiere nada más.

en la máquina A agregar tarea a crontab

$crontab -e

TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

en la máquina B agregue tarea a crontab

$crontab -e

TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR  &&  echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log)  &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL  &&  echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log)  &>/dev/null

AVISO: Los puertos 1143 y 1144 se cambian en el host B en comparación con el host A

en el host Apara conectarse a Busted ejecutar ssh -p 1234 Buser@localhost
en el host Bpara conectarse a Austed ejecutar ssh -p 1234 Auser@localhost
en el host Cpara conectarse a Austed ejecutar ssh -p 1144 Auser@localhost
en el host Cpara conectarse a Busted ejecutarssh -p 1143 Buser@localhost

Puedes ver la información de reconexión ejecutándosecat ~/ssh-world.log

UPD

Detenga las desconexiones o cuelgues de la sesión agregando a ~/.ssh/config

Host *
    ServerAliveInterval 15

información relacionada