Localizando uma maneira de encaminhar um aplicativo de ligação de portas via SOCKS

1

Estou executando um programa que liga uma porta específica em um computador host (executando o Windows 10) por trás de um firewall e não tenho permissão para redirecionar diretamente pela rede. Em vez disso, estou tentando encaminhar essa conexão através de um servidor externo (executando o Debian) através de um túnel SOCKS para torná-lo publicamente acessível.

O problema que estou correndo é que o comando SSH que estou usando liga a porta localmente, tornando o programa incapaz de vincular a porta propriamente e iniciar corretamente. (Mudar o programa não é uma opção; tem que ligar).

Estou usando o seguinte comando via SSH para configurar um túnel SOCKS:

ssh -vg -D 8123 meself@[external IP]

Eu confirmei que esse túnel funciona usando o seguinte curl, que despeja a página de índice do Google:

curl --socks5 127.0.0.1:8123 http://www.google.com/

Além disso, o netstat também mostra que a conexão é ao vivo:

netstat -t | grep "[external IP]"

TCP    [internal IP]   [external IP]:ssh    ESTABLISHED     InHost

Eu tentei usar o FreeCap para capturar o tráfego do programa no host e forçá-lo a redirecionar através do SOCKS, mas isso não parece estar funcionando. O FreeCap indica que o proxy está funcionando, mas o programa ainda tenta vincular localmente a porta 8123.

Também é importante notar que o programa está escrito em Java. O comando que estou usando para executar o programa no host é:

java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8123 -jar [program .jar]

Nas condições acima, isso gera um erro que a porta 8123 já está vinculada.

Meu objetivo final é fazer parecer que o programa em execução no computador host está diretamente acessível pelo servidor externo, de modo que, quando os clientes se conectam ao servidor, eles acreditam que estão conectados diretamente ao programa no host. computador, e o programa no computador host acredita que está conectado diretamente aos clientes.

Para onde eu vou daqui? Isso pode ser feito sem introduzir uma VPN?

(Nota: Eu tenho permissão para contornar o firewall dessa maneira.) (Observe também: eu escolhi 8123 como uma porta de exemplo apenas).

    
por Zyerah 02.11.2016 / 04:20

1 resposta

0

Se eu entendi o problema certo, você quer rodar um programa (servidor) na máquina 1. Este programa escuta na porta x que não pode ser acessada de modo remoto por causa de algumas regras de firewall. Agora você deseja ignorar o firewall por um túnel ssh para a máquina 2 de forma que os clientes remotos possam se conectar a uma porta y na máquina 2 que é encaminhada para a porta x na máquina 1.

Para arquivar isso, você precisa de um soquete de escuta na máquina 2 na porta y que encaminha todas as conexões para a máquina 1 e a porta x.

Para fazer isso com o ssh e seu recurso de tunelamento / proxy SOCKS, você pode iniciar uma conexão ssh com a opção -L da máquina 2 para a máquina 1:

machine2# ssh -L portY:localhost:portyX user@machine1

ou o inverso com a opção -R da máquina 1 para a máquina 2 (certifique-se de que o GatewayPorts esteja ativado na máquina2):

machine1# ssh -R machine2:portY:localhost:portyX user@machine2

É claro que a porta x e a porta y também podem ser iguais. Eu apenas os diferenciei para deixar isso mais claro.

Veja a página de manual do ssh para detalhes: link

    
por 02.11.2016 / 10:37