Em uma máquina Debian, eu estava tendo problemas para me conectar a um servidor openVPN.
A conexão poderia ser estabelecida, meramente no sentido de que uma interface seria adicionada e que eu obteria um IP 10.130.x.x atribuído a ela, mas não consegui nenhum tráfego em toda a VPN. Todo o tráfego ainda passaria por meu endereço IP público original:
root@vps2:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
92.222.32.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo
92.222.32.42
root@vps2:~# service openvpn start
[ ok ] Starting virtual private network daemon: myvpn.
root@vps2:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.130.3.137 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
92.222.32.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo
92.222.32.42
root@vps2:~#
No meu syslog eu consegui ver a mensagem NOTE: unable to redirect default gateway -- Cannot read current default gateway from system
. E algumas pesquisas me levaram a descobrir que isso acontecia porque o gateway padrão não estava definido explicitamente. Eu acho que a VPN remota está usando algum tipo de script de cliente que não apenas espera encontrar um gateway padrão definido explicitamente.
Eu tentei duas maneiras de definir meu gateway padrão explicitamente. E ambos funcionam !
Primeiro, tentei definir meu endereço IP público original como o gateway padrão, que funcionou:
route add default gw 92.222.32.42
root@vps2:~# route add default gw 92.222.32.42
root@vps2:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
92.222.32.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
0.0.0.0 92.222.32.42 0.0.0.0 UG 0 0 0 venet0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
root@vps2:~# service openvpn start
[ ok ] Starting virtual private network daemon: myvpn.
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo
217.23.15.239
root@vps2:~#
Mas por que usar meu IP público original como o gateway padrão? Eu não sei. Então eu também tentei definindo o primeiro salto de um traceroute aleatório como o gateway padrão. E isso também funcionou:
root@vps2:~# traceroute foo.com
traceroute to foo.com (121.232.122.233), 30 hops max, 60 byte packets
1 49.ip-92-222-50.eu (92.222.50.49) 0.039 ms 0.011 ms 0.012 ms
2 [......... I stop the traceroute when I see the first hop]
^C
root@vps2:~# route add default gw 92.222.50.49
root@vps2:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
92.222.32.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
0.0.0.0 92.222.50.49 0.0.0.0 UG 0 0 0 venet0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
root@vps2:~# service openvpn start
[ ok ] Starting virtual private network daemon: myvpn.
root@vps2:~# wget --no-dns-cache --no-proxy --header="Host: ipecho.net" http://146.255.36.1/plain -q -O - 2>&1;echo
217.23.15.239
root@vps2:~#
Hooray! Eu cheguei até aqui sozinha.
Agora, depois de se conectar à VPN, o roteamento é alterado automaticamente. Isso é bom e tudo, mas agora eu perco toda a conectividade através do meu endereço IP público original e minha conexão SSH cai, meu servidor web não está mais acessível e até mesmo outros serviços que ofereço. Eu acho que isso é porque todas as conexões de entrada agora têm respostas sendo roteadas através da VPN. Eu preferiria ver todas as conexões que chegam através do meu IP público original, para obter respostas do mesmo IP. E que a VPN só é usada para conexões que meu servidor inicia em direção ao mundo exterior. Eu ainda não descobri essa parte.
É assim que meu roteamento fica depois que eu me conecto à VPN:
root@vps2:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.130.0.1 10.130.3.73 255.255.255.255 UGH 0 0 0 tun0
10.130.3.73 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
217.23.15.239 92.222.32.42 255.255.255.255 UGH 0 0 0 venet0
92.222.32.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0
0.0.0.0 10.130.3.73 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.130.3.73 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 92.222.32.42 0.0.0.0 UG 0 0 0 venet0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
root@vps2:~#
Então, minhas perguntas são:
O que devo usar como meu gateway padrão, pois ambos os métodos funcionaram? Meu IP público original ou o primeiro salto no traceroute? Ou algo totalmente diferente, mesmo?
Como posso automatizar isso, então o gateway é configurado automaticamente ao inicializar? Quero dizer que, assim que iniciar, o servidor verificará se eu configuro um gateway padrão e, caso contrário, colocará meu IP público ou o primeiro salto do traceroute como o gateway padrão ...
E depois de finalmente me conectar ao openVPN, como evito perder a conectividade através do endereço IP público original, mas ainda assim todas as conexões de saída usam a VPN?