vincular máquinas que estão atrás de NAT via túnel ssh

vincular máquinas que estão atrás de NAT via túnel ssh

Eu tenho duas máquinas. ambos atrás do NAT. Também tenho acesso ao SERVER de cada máquina. Existe uma maneira de fazer o túnel ssh da máquina1 para a máquina2 via SERVER?

As máquinas clientes são Linux Mint. SERVIDOR é debian. Tenho apenas direitos de acesso de usuário em todas as máquinas

Responder1

Eu posso ver como isso poderia ser feito ..

Então você tem 3 computadores. ABC

A, B estão atrás do NAT. Digamos que B seja o intermediário

Método 1

2 túneis

Assim você pode fazer uma conexão SSH de A para B (Túnel 1). E de C para B (Túnel 2). E encaminhe o túnel 1 para o túnel 2.

O computador A se conecta com SSH -L

O computador C se conecta com SSH -R

O -L ou -R determina qual lado do túnel escuta e qual lado do túnel encaminha.

Então, a menos que eu tenha errado, você poderia fazer algo como-

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

Mas não tenho certeza se você pode fazer duas conexões com o mesmo servidor SSH, então tente isso.. Fazendo dois servidores sshd diferentes..

edite sshd_config no CompB e você verá que diz Porta 22, adicione uma linha abaixo que diz Porta 222. Então CompB executará um servidor ssh em duas portas.

Então você poderia se conectar aos servidores ssh em duas portas diferentes 22 e 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

A porta 1234 é a porta do computador A onde você conecta seu programa cliente. É a entrada para o túnel 1

A porta 2345 é a porta no computador B e entrada para o túnel 2

A porta 3456 é a porta onde você executa o programa do servidor no CompC

Assim, desta forma, CompA pode se conectar a um servidor no CompC, através do CompB

Método 2

um túnel

Uma opção é usar apenas um túnel, mas você só obtém criptografia na metade do caminho. 5.6.7.8 é o IP do CompC e a porta 3456 é o servidor no CompC e a porta 1234 é a porta de escuta do túnel.

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

Em seguida, no CompA, conecte o programa cliente à porta 1234 no CompA e tudo irá para o CompC.

Responder2

com base na resposta debarlope

Eu tenho A e B atrás do NAT. E C que é acessado de A e B

No CI deve ter apenas acesso ssh. Nada mais é necessário.

na máquina A adicionar tarefa ao 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

na máquina B adicione tarefa ao 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: as portas 1143 e 1144 são alteradas no host B em comparação com o host A

no host Apara se conectar a Bvocê, execute ssh -p 1234 Buser@localhost
no host Bpara se conectar a Avocê, execute ssh -p 1234 Auser@localhost
no host Cpara se conectar a Avocê, execute ssh -p 1144 Auser@localhost
no host Cpara se conectar a Bvocê, executessh -p 1143 Buser@localhost

Você pode ver as informações de reconexão em execuçãocat ~/ssh-world.log

Atualização

Interrompa desconexões/desligamentos de sessão adicionando ~/.ssh/config

Host *
    ServerAliveInterval 15

informação relacionada