Conecte-se ao SSH de um dispositivo em uma rede sem tráfego de entrada ativado e sem endereço IP estático

3

O que estou tentando fazer é ativar um Raspberry , fisicamente colocado no site de um cliente, que tenha acesso à Internet por meio de IP dinâmico , para receber comandos SSH do estado selvagem sem ter que manipular o roteador e o firewall do cliente . Nenhuma conexão de entrada permitida nessa rede, além disso, o endereço de Internet do site do cliente é dinâmico.

Editar : para conhecer a solução para este problema, consulte as respostas de Kevin_Kinsey e Florin Godard , ou vá até o final da minha pergunta para saber como eu consegui fazê-lo funcionar na porta 22 padrão do SSH.

Eu já tentei estudar e entender o que é proposto em ssh para private-ip no Unix Stack Exchange , mas eu realmente não entendi o ponto.

Eu quero conectar-me do meu laptop ao servidor VPS do Cliente e fazer com que o servidor VPS se conecte ao Raspberry SSH. Então:

           ( firewall access allow in+out )
      | =>           VPS Server              \    ( firewall access allow out only )
      |                                      | =>    Raspberry
MY PC /

Aqui está um cenário de caso com configurações de endereços IP, portas e nomes IP:

MY PC 
    name: [email protected]

Client VPS Server
    name: remote.null.tld
    IP Address: 98.76.54.32
    SSH Port: 9876

Raspberry
    model: Zero W
    name: [email protected]
    IP Address: dynamic IP ( based on Internet Provider )
    SSH Port: 6789
    Raspberry's iptables: empty
    Router's Firewall Restrictions: allow only out
    Internet stability: very low

O IP externo do Raspberry é aquele atribuído pelo provedor de Internet e pode variar dependendo das reinicializações do roteador. Não pode determinar absolutamente.

O acesso à Internet na rede do cliente é muito instável . Link de rádio ou algo parecido. De qualquer forma, a conexão com a Internet sofre de muita largura de banda de dança.

Além disso, o roteador do cliente não pode ser manipulado não por preguiça, mas por causa das restrições impostas pela depuração de TI do cliente.

Eu tenho acesso SSH ao VPS do cliente e consigo instalar qualquer software nele.

Editar: solução para o problema

Na minha configuração, as portas não eram padrão. Então, a solução foi esta:

Na framboesa:

# login to [email protected] is done via private/public key with no passwords
ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected]

No crontab da framboesa:

# A re-connect is performed at every 10th minute of every hour to prevent accidental tunnel breakdowns.
10 * * * * ps -ef | grep 'ssh -p 9876 -f -N -T -R' | grep -v grep | awk '{print $2}' | xargs -r kill -9 && sleep 30s && ssh -p 9876 -f -N -T -R 55555:localhost:6789 [email protected] >/dev/null 2>&1

Na ponte VPS remote.null.tld

ssh -p 55555 raspberry_username@localhost

Ou, uma solução mais elegante através da modificação da configuração ssh do VPS:

Host tunnelToRemoteRaspberry
    Hostname localhost
    User raspberry_username
    Port 55555
    
por Maurizio 19.11.2018 / 11:50

6 respostas

4

Isso é possível. Use "encaminhamento de porta reversa". Você provavelmente precisará de um cronjob configurado para verificar se está conectado. Se não, corra algo assim:

ssh -f -N -T -R 2210: localhost: 22 [email protected]

"Example.com" é algum servidor fora do FW ao qual você tem acesso. Você está encaminhando a porta 22 no RPi para a porta 2210 em example.com. Você pode então usar o SSH no example.com e fazer:

ssh RaspberryUser @ localhost -p 2210

E você estará conectado à caixa RPi.

    
por 19.11.2018 / 18:46
5

Estou assumindo que os nomes de usuário remote no VPS e pi no framboesa.

  1. Você escolhe uma porta livre no VPS. Um valor aleatório de cinco dígitos abaixo de 65000 deve funcionar.
  2. No framboesa, você corre

    ssh -R PORT:localhost:22 remote@vps
    
  3. No VPS, você se conecta ao Raspberry com

    ssh -p PORT pi@localhost
    

Substitua a PORTA pela porta que você escolheu na primeira etapa.

No passo 2, você cria um túnel reverso a partir da porta no VPS para a porta 22 no Raspberry, que é onde o servidor SSH do Raspberry escuta. Na etapa 3, você se conecta à PORTA no VPS e é transferido para a porta 22 no Raspberry.

Você pode então configurar uma conexão dentro do VPS '~ / .ssh / config como:

Host raspberryTunnel
  Hostname localhost
  User pi
  Port PORT

Se isso funcionar de forma confiável, você poderá substituir a única conexão SSH no Raspberry pelo autossh, que recriará automaticamente a conexão quando ela for desativada.

autossh -R PORT:localhost:22 remote@vps
    
por 19.11.2018 / 14:48
4

O que você está tentando fazer exatamente como você pergunta é impossível:

No Inbound connections allowed on that network

No entanto, você pode facilmente:

  • faça o Pi fazer uma conexão de saída para o seu laptop usando SSH reverso que você cronograma
  • ssh do seu laptop para o servidor VPS e do servidor VPS ssh novamente para o Pi
por 19.11.2018 / 12:19
3

Essencialmente, você pode alcançar sua meta apenas com conexões de manutenção do dispositivo para um servidor mantido por você.

O que exatamente essas conexões consistem pode ser diferente:

  • conecte-se, busque tarefas para executar e continue com elas.
  • conecte-se a uma VPN e faça parte disso, permitindo estar conectado a
  • conecte via SSH e estabeleça uma conexão de túnel

Protocolos utilizáveis

  • VPN (usa várias portas)
  • SSH
  • HTTPS
  • mesmo UUCP, embora um pouco desatualizado

Dependendo do que o cliente permite dentro de sua rede, você pode até mesmo implementar vários desses métodos para escolher.

Cada método tem seus prós e contras.

  • SSH:

    • +: apenas uma porta é necessária
    • -: talvez nem todas as redes permitam conexões SSH de saída
  • VPN:

    • +: integração mais fácil na rede do servidor
    • -: várias portas necessárias
    • -: talvez nem todas as redes permitam conexões SSH de saída
  • HTTPS:

    • +: provavelmente suportado
    • -: nenhuma linha de comando real, apenas "pacotes de trabalho" podem ser enviados
    • -: grande esforço necessário para configurar
  • UUCP:

    • +: permite que lotes sejam enviados
    • -: protocolo desatualizado
por 19.11.2018 / 14:17
1

Se o firewall Pi não permitir conexões de entrada, não será possível estabelecer uma conexão. Sua única maneira é abrir um buraco através de um firewall usando conexões estabelecidas.

    
por 19.11.2018 / 12:27
0

Eu gostaria de verificar ZeroTier : ele permite que você configure uma rede virtual com as regras desejadas, por exemplo, que qualquer nó possa acessar diretamente conectar-se a qualquer outro nó. Eles lidam com todos os tipos de problemas de conectividade, incluindo a retransmissão de tráfego através de seus servidores, se necessário.

    
por 19.11.2018 / 19:26