Encaminhando portas ignorando a VPN

0

Eu tenho a seguinte configuração:

  1. Roteador com acesso à Internet
    • Endereço IP estático público
    • Pouco funcional
    • Possui 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 de 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).

    
por Maxim Shirokov 30.07.2018 / 10:13

1 resposta

0

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

Preparação no servidor:

Estou assumindo que você tenha cron instalado e em execução. Crie um novo arquivo em /etc/cron.hourly com o seguinte conteúdo: (não se esqueça de chmod +x do 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á se reconectar se não estiver. Útil quando o seu PC em casa não está sempre ligado. Ele grava informações de log em /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 openssh-server 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 na sua máquina doméstica, basta substituir o :22 no script do lado do servidor pela porta personalizada de sua preferência.

    
por 30.07.2018 / 23:09