máquinas de link que estão ambas por trás do NAT via túnel ssh

0

Eu tenho duas máquinas. ambos por trás do NAT. Também tenho acesso SERVER de cada máquina. Existe uma maneira de fazer o túnel ssh de machine1 para machine2 via SERVER?

As máquinas clientes são o linux mint. O SERVER é debian. Eu tenho apenas direitos de acesso de usuário em todas as máquinas

    
por Eugen Konkov 05.05.2015 / 10:36

2 respostas

0

Eu posso ver como isso pode ser feito ..

Então você tem 3 computadores. A, B, C

A, B estão por trás do NAT. Digamos que B é o intermediário

Método 1

2 túneis

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

O computador A se conecta ao SSH -L

O computador C se conecta com o SSH -R

O -L ou -R determina qual lado do túnel ouve 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 eu não tenho certeza se você pode fazer duas conexões para o mesmo servidor SSH, então tente isso ... Criando dois servidores sshd diferentes ...

Edite o sshd_config no CompB e você verá que ele diz que a Port 22 adiciona uma linha abaixo dele que diz Port 222. Em seguida, a CompB executará um servidor ssh em duas portas.

Em seguida, você pode 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 no computador A, onde você conecta seu programa cliente. É a entrada para o túnel 1

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

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

Dessa maneira, a CompA pode se conectar a um servidor no CompC, por meio do CompB

Método 2

um túnel

Uma opção é usar apenas um túnel, mas você só obtém criptografia ao longo da 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, na CompA, conecte o programa cliente à porta 1234 na CompA e ele irá para o CompC.

    
por 05.05.2015 / 13:10
0

com base na resposta de barlop

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

Em C, devo ter apenas acesso ssh. Nada mais é necessário.

na máquina Uma tarefa add para 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 ao host A

no host A para se conectar a B você executa ssh -p 1234 Buser@localhost
no host B para se conectar a A você executa ssh -p 1234 Auser@localhost
no host C para se conectar a A você executa ssh -p 1144 Auser@localhost
no host C para se conectar a B você executa ssh -p 1143 Buser@localhost

Você pode ver informações de reconexão executando cat ~/ssh-world.log

UPD

Interrompe a desconexão da sessão / hungups adicionando ao ~ / .ssh / config

Host *
    ServerAliveInterval 15
    
por 05.05.2015 / 15:01

Tags