Como fazer o encaminhamento de porta entre localhost e localhost em duas máquinas?

0

Eu tenho uma máquina local A e quero acessar a máquina C que está atrás de um firewall. Eu tenho acesso à máquina B, que está na mesma rede de C, e eu quero usar a máquina B como um servidor ssh para estabelecer um túnel entre A e C.

Suponha que queremos criar dois links entre A e C. Isso pode ser feito pelo encaminhamento de porta como

ssh -L IP_of_A:5000:IP_of_C:5000 -R IP_of_C:5001:IP_of_A:5001 IP_of_B

No entanto, eu prefiro usar 127.0.0.1 em vez do endereço IP real no comando acima, porque de alguma forma meu programa quebra ao usar o endereço IP real no comando acima. Então eu gostaria que fosse como

ssh -L IP_of_A:5000:127.0.0.1:5000 -R IP_of_C:5001:127.0.0.1:5001 IP_of_B

Mas parece que usando isso, a porta que foi encapsulada é entre a máquina A e a máquina B, em vez da máquina A e da máquina C.

Então, como podemos configurar o túnel para estar entre A e C, e ainda usando o 127.0.0.1 no endereço ssh?

Sou rapidamente novato no ssh, por isso, se a pergunta não estiver clara, sinta-se à vontade para indicá-lo e farei o possível para deixar claro.

    
por xslittlegrass 29.08.2015 / 08:08

2 respostas

3

O endereço especificado em -L é usado pelo host remoto (B). Portanto, não é de admirar que você realmente tenha um túnel entre A e B por -L 5000:127.0.0.1:5000 . Quando você está se conectando à porta TCP 5000 em A, a conexão é encaminhada para 127.0.0.1:5000 em B.

Por outro lado -R 5001:127.0.0.1:5001 seria bom porque o endereço é resolvido pelo host local (A) e seu destino é A. Quando você está se conectando à porta TCP 5001 em B, a conexão é encaminhada para 127.0.0.1:5001 em A.

Observe que as duas portas de escuta -L / -R estão vinculadas a localhost por padrão, portanto, elas estão disponíveis somente em A e B, respectivamente. Se você quiser permitir que outros hosts se conectem, adicione a parte bind_address em -L / -R . Apenas adicionar um : à esquerda seria suficiente:

ssh -L :5000:IP_of_C:5000 -R :5001:127.0.0.1:5001 IP_of_B

com essa configuração A conecta-se a 127.0.0.1:5000 e C conecta IP_of_B:5001 .

Se você preferir usar 127.0.0.1 em A e C, será necessário estabelecer uma conexão SSH (praticamente) direta entre A e C, o que é possível com o SSH sobre o tunelamento SSH por ProxyCommand . Coloque o seguinte em ~/.ssh/config :

Host C
ProxyCommand ssh -q -W IP_of_C:22 IP_of_B

Em seguida, conecte-se a C de A com 1-hop ssh :

ssh -L 5000:127.0.0.1:5000 -R 5001:127.0.0.1:5001 C

Desta vez, você não precisa adicionar bind_address part porque 127.0.0.1 é usado para a conexão de túnel em ambas as extremidades.

    
por 29.08.2015 / 08:38
0

Pelo que entendi, acho que o que você está procurando foi respondido no site ServerFault do StackExchange: aqui .

Como isso lida mais com redes e ferramentas de administração de rede / servidor que podem ser um site melhor para fazer esse tipo de pergunta no futuro.

Lá eles estão falando especificamente sobre a configuração de um túnel para o SSHing no host C do host A, mas você pode fazer isso para qualquer conexão TCP.

No exemplo $PROXYHOST é o host B, $REMOTEHOST é o host C e $SSHPORT é qualquer porta para a qual você deseja enviar conexões no host C.

    
por 29.08.2015 / 08:38

Tags