Questão Encaminhando portas ignorando a VPN


Eu tenho a seguinte configuração:

  1. Router com acesso à Internet
    • Endereço IP estático público
    • Baixo funcional
    • Tem um recurso "Encaminhamento de porta"
    • Endereço IP local: 192.168.1.1
  2. Servidor Linux (Ubuntu) conectado ao serviço VPN (não controlável por mim), como o gateway para o cliente (3)
    • Interface enp0s3: gw: 192.168.1.1; Endereço IP: 192.168.1.10
    • Interface tun0 - conexão VPN
  3. Cliente do Windows 7
    • Interface de rede: gw: 192.168.1.10; Endereço IP: 192.168.1.8

Regras do iptables no servidor (2):

*nat
:PREROUTING ACCEP T [443:55918]  
:INPUT ACCEPT [21:3328]
:OUTPUT ACCEPT [22:1600]
:POSTROUTING ACCEPT [73:4883]
-A POSTROUTING -s 192.168.1.8/32 -o tun0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [2135:1080592]
:FORWARD ACCEPT [846:190487]
:OUTPUT ACCEPT [1592:396526]
-A FORWARD -s 192.168.1.8/32 -i tun0 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.8/32 -i enp0s3 -o tun0 -j ACCEPT
COMMIT

Como faço para encaminhar a porta para uma conexão SSH ao cliente, através do endereço do roteador externo? (Eu não posso fazer isso através da VPN).


0


origem




Respostas:


Isso pode ser feito facilmente com uma conexão SSH reserva.

Preparação no servidor:

Eu estou supondo que você tem cron instalado e funcionando. Crie um novo arquivo em /etc/cron.hourly com o seguinte conteúdo: (não esqueça de chmod +x o arquivo!)

#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
    echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
    echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
    ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi

Isso irá verificar por hora se a conexão estiver ativa e tentará reconectar se não estiver. Útil quando o seu PC em casa não está sempre ligado. Escreve informações de log para /var/log/check-ssh-relay.log. A autenticação é feita por meio de chaves SSH, portanto, certifique-se de ter configurado essa configuração com antecedência.

No seu computador em casa:

Supondo que você tenha a configuração do servidor openssh corretamente, tudo que você precisa fazer agora é:

$ ssh <server-username>@localhost -p 12122

Para criar a conexão SSH. SCP, SFTP e co. funciona também, claro.

Se, por motivos de segurança, você quiser alterar a porta SSH padrão em sua máquina doméstica, basta substituir :22 no script do lado do servidor acima com a porta personalizada de sua escolha.


0