Eu configurei um Raspberry Pi (executando o Raspbian) em casa como um servidor de mídia que acesse de fora da minha rede via SSH e outras portas (ou seja, usando o cliente Plex do celular através da porta 32400).
Recentemente, decidi me inscrever em um serviço de VPN comercial. Eu instalei e configurei o OpenVPN em Raspbian.
Depois de longas horas de pesquisa, leitura e testes, descobri como fazer remotamente o ssh em meu servidor enquanto ele redireciona todo o tráfego de eth0 para tun0. Simplesmente executando:
ip rule add from <internal IP of SSH server/VPN client> table 10
ip route add default via <internal IP of gateway/router> table 10
Eu adicionei alguns scripts em /etc/init.d/ para abrir a conexão VPN na inicialização e outro script que executa os dois comandos acima quando a conexão VPN é estabelecida (parece que essas regras são redefinidas na reinicialização). Então, com a configuração acima, posso ssh no meu servidor do trabalho sem nenhum problema.
O meu problema é que, com o ambiente descrito acima, não consigo fazer o ssh local no Raspberry Pi. E, portanto, meu cliente Plex no PlayStation 4 não pode encontrar o servidor mais ... No entanto, se eu remover os scripts rc.d que 1 / abrir a conexão VPN e 2 / executar as duas linhas de comando acima, posso conectar-se ao servidor de casa e de fora - mas não tem VPN em execução:)
Eu acho que estou fazendo algo errado com ip routes, mas não consigo descobrir o que. Ou talvez seja porque a ordem na qual os scripts são executados não está correta (embora a conexão vpnconnection dos Comandos de Roteamento do IP seja estabelecida)
Espero que tudo faça sentido, e que você possa me colocar na direção certa em relação a ser capaz de ssh para o pi de redes locais e remotas. Acredito que a resposta reside no uso de rota ou push, mas não tenho certeza.
Abaixo estão algumas saídas que podem ser úteis.
Agradecemos antecipadamente por sua ajuda!
Saída da rota -n quando o tun0 foi criado
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.109.1.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.109.1.1 10.109.1.5 255.255.255.255 UGH 0 0 0 tun0
10.109.1.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.109.1.5 128.0.0.0 UG 0 0 0 tun0
168.1.6.49 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
Saída de iptables -L -v
Chain INPUT (policy DROP 44 packets, 5890 bytes)
pkts bytes target prot opt in out source destination
0 0 fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
220 143K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
7062 1750K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32400
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5850
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4285
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:58846
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8112
1 64 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:72
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
92 15173 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 8071 packets, 1231K bytes)
pkts bytes target prot opt in out source destination
Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
arquivo de configuração do cliente OpenVPN
client
dev tun
proto udp
remote [xxx.yyy.com] [PORT]
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.pem
auth-user-pass
Saída do sysctl -a | grep \ .rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.tun0.rp_filter = 0
Saída do programa de rotas ip
0: from all lookup local
32765: from 192.168.0.170 lookup 10
32766: from all lookup main
32767: from all lookup default
Saída da tabela de exibição de rota ip 10
default via 192.168.0.1 dev eth0