Como eu uso um túnel SSH como alternativa ao encaminhamento de porta?

1

Eu quero usar o SSH como uma alternativa ao encaminhamento de porta para usar meu servidor RDP do lado de fora, pois o roteador do meu provedor não permite o encaminhamento de porta. Aqui está o que tenho em mente:

A - client connecting to the RDP server
B - server
C - device running the RDP server

A quer se conectar a C. A conexão direta com C é impossível, então todo o tráfego tem que fluir através de B.

Exemplo:
A envia um pacote contendo "Hello world!". C deve responder com "Teste OK!". O IP de A é 255.255.255.255 O IP de B é 1.2.3.4. O IP de C é 4.5.6.7.
Então, 255.255.255.255 abre um socket para 1.2.3.4. A envia "Hello world!". B encaminha o pacote para C. C responde com "Test OK!" e envia de volta para B. B envia de volta para A.
Eu gostaria de fazer algo assim com um servidor RDP.

B executa o Debian 8 e C executa o Windows 7.

    
por Anonymous 05.02.2016 / 14:34

2 respostas

1

Você não indica qual sistema operacional seu cliente, A, executa em seu exemplo. Eu suponho que haja algum tipo de cliente de linha de comando ssh disponível. Então, você pode usar

 you@A $ ssh -L54321:serverC:3389 serverB -p 12322 -l yourloginnameonB

para criar o túnel.

Esta linha de comando precisa de alguma explicação. Vamos fazer essa parte por parte.

  • A opção -L faz com que o SSH crie um encapsulamento entre a porta 54321 em sua máquina cliente, A (observe o prompt) e a porta 3389 no servidor C (onde suponho que o servidor RDP esteja em execução).
  • serverB é o nome da máquina que você "direciona" com este comando ssh. Já que você estará se conectando através de B, coloque seu hostname completo aqui.
  • Se o seu servidor SSH, B, usar uma porta não padrão para ssh (como é frequentemente recomendado para máquinas com acesso à Internet), coloque esse número aqui como o parâmetro -p. No meu exemplo, B usa a porta 12322 para o SSH.
  • Finalmente, o parâmetro -l permite especificar o nome de login (por exemplo, sua conta) a ser usado ao efetuar login no servidorB.

Se este comando for bem-sucedido, você poderá direcionar o cliente RDP de A para o localhost: 54321 e parecerá que você está se conectando diretamente ao C: 3389.

    
por 05.02.2016 / 15:06
1

Presumindo que sua máquina local ("A") é uma máquina POSIX com e. g. OpenSSH, você pode fazer isso de duas maneiras:

Você pode fazer isso ad-hoc toda vez que se conectar com argumentos ao cliente SSH:

ssh -L13389:serverC:3389 username@serverB
rdesktop localhost:13389 # Or point any RDP client to localhost:3389

Ou, para uma configuração mais permanente, você pode adicionar o seguinte ao seu ~/.ssh/config :

host serverB
    LocalForward localhost:13389 serverB:3389

Então, a qualquer momento você ssh para serverB, o túnel estará aberto. Um efeito colateral disso, no entanto, é que se você abrir várias conexões simultâneas para serverB, você receberá avisos de que o túnel já está no local.

    
por 05.02.2016 / 18:54