Tunnel toda a conexão no SSH reverso

2

Eu tenho um problema com a configuração de rede, e meu fraco conhecimento de rede ou minha comunidade linux local não pode me ajudar.

Eu tenho o servidor A (bem perto do meu PC), que está oculto atrás de um roteador NAT, e o servidor B, que é o VPS com IP estático.

Eu quero usar o meu servidor A como servidor de rede, acessível a partir de qualquer lugar na Internet (e, a partir daí, como pequeno site de hospedagem). Percebi como posso acessar o servidor A através do servidor B através do SSH da Internet - reverse SSH tunelling . Mas essa coisa tem dois defeitos:

  • passa apenas uma porta (eu quero que todos eles, por exemplo, mantenham simultaneamente servidores web, ssh e mais alguns)
  • Não consigo acessar o servidor A direto da Web - preciso conectar-me ao servidor B e, em seguida, fazer ssh -p 22222 username@localhost

Existe alguma solução para passar todas as portas para o túnel existente? Todas as coisas que eu encontrei na Internet são sobre OR fazendo túnel invertido OR passando as portas para o túnel direto, mas não sobre a passagem para o túnel reverso existente.

    
por J. Doe 14.12.2017 / 20:43

2 respostas

2

talvez você já conheça as 'duas notas adicionais sobre túneis ssh reversos', mas se você errou:

  1. O comando single de encapsulamento ssh reverso pode incluir muitos (não apenas um) port forward
  2. O
  3. reverse ssh tunnel também pode escutar IP local ou público (não apenas no host local de B)

Para obter (1) , basta adicionar vários parâmetros -R, para (2) , você deve colocar GatewayPorts clientspecified dentro de /etc/ssh/sshd_config do servidor B e reiniciar o serviço sshd. Normalmente, também queremos portas de escuta abaixo de 1024 do servidor B, que só tem permissão para raiz, então PermitRootLogin yes também deve estar dentro desse arquivo sshd_config.

O comando

full ssh em execução no servidor A pode ter esta aparência:

ssh -R serverBpublicIP:2222:serverAlocalIP:22 \
    -R   serverBpublicIP:80:serverAlocalIP:80 \
    -R serverBpublicIP:5901:serverAlocalIP:5901 \
    -R serverBpublicIP:8080:serverAlocalIP:8080 root@serverBpublicIP
#--------------------------|----------------------------------------
#     new listening B side | already listening local A side

e ele encaminhará 4 portas para o IP público do servidor B. Quando este comando estiver marcado e confirmado para funcionar bem, você pode adicionar o daemon -fNT params e autoinicializá-lo com o systemd.

se o encaminhamento falhar, verifique se as novas portas estão livres:

serverB$ netstat -anpt | grep '2222\|80\|5901\|8080'

então, se você precisar de um número finito de portas TCP (e não usar algum aplicativo sip-phone ou rtp específico com demandas de intervalo de porta udp), o tunelamento reverso deve ser suficiente para a maioria das situações.

    
por 15.12.2017 / 05:14
1

Verifique o projeto sshuttle .

De acordo com a documentação, ele resolve o seguinte caso comum:

  • Sua máquina cliente (ou roteador) é Linux, FreeBSD ou MacOS.
  • Você tem acesso a uma rede remota via ssh.
  • Você não tem necessariamente acesso de administrador na rede remota.
  • A rede remota não tem VPN, ou apenas protocolos de VPN estúpidos / complexos (IPsec, PPTP, etc). Ou talvez você seja o administrador e acabou frustrado com o péssimo estado das ferramentas de VPN.
  • Você não deseja criar uma porta ssh para cada host / porta na rede remota.
  • Você odeia o encaminhamento de porta do openssh porque é aleatoriamente lento e / ou estúpido.
  • Você não pode usar o recurso PermitTunnel do openssh porque ele está desabilitado por padrão em servidores openssh; Além disso, ele faz TCP-over-TCP, que tem um desempenho terrível (veja abaixo).
por 14.12.2017 / 22:37