ssh através de um roteador sem encaminhamento de porta

9

Eu tenho um servidor linux e quero colocá-lo em uma rede doméstica atrás de um roteador. Preciso ssh para este servidor em algum momento de fora, mas não quero configurar o encaminhamento de porta porque não tenho acesso ao roteador e também não conheço o ip do roteador.

O que posso fazer é colocar algum programa no servidor linux; assim, quando estiver conectado à Internet, ele enviará dados constantemente para o meu outro servidor online, para que eu saiba o endereço IP dele. Mas existe uma maneira de ssh para o servidor atrás do roteador de fora? algo como NAT ou soquete que mantém a conexão de rede?

Muito obrigado

Jiechao Li
fonte

Respostas:

21

O que você gostaria de fazer é ssh do seu "servidor linux" para algo externo, como "my_other_server" ou qualquer outra coisa que os dois servidores possam acessar.

Você usaria o encaminhamento de porta remota ssh.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
Explicação: Conecte-se ao my_other_server e abra a porta 8022, que será encaminhada de volta para mim na porta 22.

Em my_other_server.com, você poderá enviar ssh para o host local na porta 8022 e encaminhar seu tráfego para linux_server pegando carona no túnel [user@linux_server]$ ssh -p8022 localhost
linux_server -> my_other_server Explicação: Conecte-se a mim na porta 8022 que é encaminhada para linux_server

Se você tiver problemas com o encerramento inicial do linux_server -> my_other_server, você pode criar um script para mantê-lo aberto, ajustar as configurações de keepalive ou usar o autossh.

MattPark
fonte
Obrigado, isso funciona muito bem! Eu quero usar o script para mantê-lo aberto. A outra pergunta é: se eu tiver 1000 desses 'servidores linux' e apenas um 'meu_outro_servidor', posso enviar ssh para algum deles dessa maneira? Suponho que todos precisam de porta diferente e existe uma maneira melhor de fazer isso?
Jiechao Li
Bem, isso depende. Agora que você está no linux_server, você poderia apenas enviar ssh para linux_server2 e linux_server3 a partir daí? Isso seria o mais fácil. Então, sim, você poderia fazer isso várias vezes; em vez de usar 8022, usaria 8023, 8024. Se você seguir esse caminho, crie um arquivo ~ / .ssh / config em "my_other_server" que contenha todos os números de porta, portanto você apenas ssh [alias] em vez de ssh [port] localhost. Isso se tornará complicado.
MattPark
É possível configurar isso com apenas duas máquinas? Conecte B a A, o A de volta a B por si próprio?
adamyonk
1
Eu acabei de fazer isso. Pode confirmar que funciona. \ o /
adamyonk 29/09/16
Sim cara --- obviamente você descobriu. Você pode usar algo como autosshpara mantê-lo aberto.
precisa saber é o seguinte
3

Você pode usar uma espécie de VPN para fazer isso funcionar, mas seria necessário um servidor que o servidor inacessível possa acessar. Em seguida, você pode configurar o OpenVPN no servidor, no seu PC e no servidor firewall, ativar client-to-cliente pronto. http://openvpn.net/howto.html

Nathan C
fonte
Obrigado. Estou investigando isso, mas parece um pouco complicado. Se entendi corretamente, preciso instalar o OpenVPN nos dois servidores para que eles possam se comunicar sem configurar o roteador, certo?
Jiechao Li
Exatamente. Você configura um servidor como o "servidor" e, em seguida, os dois clientes que deseja conectar como "clientes" na configuração. O SSH reverso observado acima parece ser mais fácil para você.
C # de Nathan C
2

Esta resposta é baseada na aceita, mas adicionando os detalhes que me permitiram fazê-lo. Peço desculpas pela explicação dos pedestres, pois essa não é minha especialidade.

Suponha que você tenha dois computadores Ae B. Você deseja sshde Apara Be não pode encaminhar nenhuma porta nos roteadores conectados a eles.

Como afirma a resposta aceita, você precisa de um servidor Spara fazer isso: no computador B, você permitirá sshconexões provenientes S; e do computador A, você acessará esse túnel em Spara alcançar B.

Mas como você obtém esse servidor S? Encontrei serveo(link: https://serveo.net/ ). É de uso muito simples. Você não precisa instalar nada ou se registrar e é gratuito. De acordo com o site, as etapas a seguir são:

  1. Pense em um apelido para o computador B. Por exemplo computer_B_alias,.

  2. No computador B, execute ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. Agora, você pode acessar o computador a Bpartir do computador Aexecutando o seguinte em computer A:, ssh -J serveo.net user@computer_B_aliasonde você deve substituir userpelo nome do usuário no computador B.

PS: Obviamente, você faz do ponto 2 uma tarefa automática ao iniciar o computador B.

PSS: Antes de tentar isso, verifique se sshestá instalado nos dois computadores. Para o Ubuntu, sudo apt-get install sshfaria o trabalho.

Godoy
fonte
0

Esperar muito tempo para responder. Esperá-lo pode ajudar alguém que está procurando o mesmo agora.

Se você deseja acessar um servidor atrás do NAT e não deseja escrever código, provavelmente pode procurar uma ferramenta abaixo e usar o que se adequar às suas necessidades.

Ambas as ferramentas acima assumem que você tem acesso à máquina Linux para instalar o cliente. Alguns dos benefícios são:

  • Ambos dão acesso ao terminal usando a interface da web
  • Você não precisa de um host ssh reverso intermediário próprio.
  • Muito fácil de instalar
  • Ambos são de código aberto

Pessoalmente, prefiro o tmate mais, pois você pode hospedar o servidor tmate em seu próprio servidor intermediário (para ssh reverso), enquanto o teleconsole pode se conectar apenas aos seus próprios servidores para ssh reverso.

Ankit Kulkarni
fonte