Eu tenho um servidor remoto usando Debian. Por acaso, eu uso o SSH em uma porta não padrão devido à porta de bloqueio do ISP 22. Não tenho problemas para conectar ao SSHd de fora da minha rede com o cliente OpenVPN não sendo executado no servidor. No segundo em que inicio o cliente OpenVPN, recebo o seguinte:
$ ssh -v -p 922 domain.dyndns.org
OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016
debug1: Reading configuration data /home/user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to domain.dyndns.org [1.2.3.4] port 922
debug1: connect to address 1.2.3.4 port 922: Connection timed out
ssh: connect to host domain.dyndns.org port 922: Connection timed out
Eu tenho um endereço IP dinâmico, mas o servidor está atrás de um roteador, então não consigo ligar o sshd ao endereço público. Mesmo que pudesse, não estou convencido de que os pacotes não se perderiam no tun0.
Nas minhas viagens pela Internet para tentar resolver esse problema, encontrei o seguinte script.
#!/bin/bash
grep -q fix_ssh /etc/init.d/openvpn || sed -i.backup -e '/start_vpn ()/ i fix_ssh () {\
ip rule add fwmark 65 table novpn\
ip route add default via 192.168.0.1 dev eth0 table novpn\
ip route flush cache\
iptables -t mangle -A OUTPUT -p tcp --sport 922 -j MARK --set-mark 65\
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP\
}\
undo_fix_ssh () {\
iptables -D INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP\
iptables -t mangle -D OUTPUT -p tcp --sport 922 -j MARK --set-mark 65\
ip route del default via 192.168.0.1 dev eth0 table novpn\
ip rule del fwmark 65 table novpn\
ip route flush cache\
}'\
-e 's/start_vpn$/& \&\& fix_ssh/' \
-e 's/stop_vpn$/& \&\& undo_fix_ssh/' \
/etc/init.d/openvpn
Eu tentei executá-lo sem sucesso. Comparando com outras respostas que encontrei, não sei ao certo onde está o problema com essa solução e fiquei sem ideias para solução de problemas.
Não sei bem qual é a melhor abordagem para o problema. O serviço OpenVPN é um serviço comercial que não controlo.
Editar: Meu objetivo é ser capaz de SSH no SSH servir enquanto está em execução e conectado ao servidor OpenVPN. Eu quero que todo o outro tráfego passe pela VPN. Eventualmente, eu quero usar o SSHFS para poder visualizar arquivos no servidor SSH e, em seguida, redirecionamento de portas para que minhas milhas de distância possam compartilhar a mesma conexão VPN.
------------ ----------------
|My Server |--->OpenVPN>---|Commercial VPN |-->Internet>--Web
------------ Over internet | Server |
| -----------------
/|\
SSH
Over Internet
/|\
----------
| Laptop |
----------
Editar 2: Não, o laptop está em um local diferente do servidor SSHd. Imagem editada novamente para maior clareza.
Editar 3: Existe um roteador envolvido. O servidor está atrás de um roteador. tun0 é a conexão do OpenVPN.
$ sudo /sbin/iptables-save
# Generated by iptables-save v1.4.14 on Mon Dec 26 13:03:22 2016
*mangle
:PREROUTING ACCEPT [11077726:5767595109]
:INPUT ACCEPT [9445198:5734927839]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10132207:7571233156]
:POSTROUTING ACCEPT [10132784:7571256515]
-A OUTPUT -p tcp -m tcp --sport 922 -j MARK --set-xmark 0x41/0xffffffff
COMMIT
# Completed on Mon Dec 26 13:03:23 2016
# Generated by iptables-save v1.4.14 on Mon Dec 26 13:03:23 2016
*filter
:INPUT ACCEPT [9445173:5734925686]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10132201:7571259291]
-A INPUT -i tun0 -p tcp -m tcp --dport 922 -j DROP
COMMIT
# Completed on Mon Dec 26 13:03:23 2016
Edit: Eu vou ser melhor ter algo como um pi de framboesa para evitar isso? Eu teria dificuldades diferentes? Ainda não tenho certeza da causa raiz para saber se isso resolveria alguma coisa. Uma cadeia de túneis de SSH é ruim? Idéia sendo:
[Laptop] - > SSH- > --------- > - [Pi] -a mesma rede- > - [meu servidor] - > - [OpenVPN]
/|\
[router]
Editar:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.68.10.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.68.10.1 10.68.10.5 255.255.255.255 UGH 0 0 0 tun0
10.68.10.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.68.10.5 128.0.0.0 UG 0 0 0 tun0
192.40.88.17 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Conteúdo de um arquivo .ovpn:
client
dev tun
proto udp
remote server 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass auth.txt
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
# Permitir chamadas de executáveis internos e scripts definidos pelo usuário. segurança de script 2
# Analisa as opções de DHCP do openvpn para atualizar o resolv.conf para cima / etc / openvpn / update-resolv-conf abaixo / etc / openvpn / update-resolv-conf