Eu configurei um Raspberry Pi (chamado blitzen
, instalado com Jessie) na minha rede local para atuar como um gateway de VPN para todos os computadores na rede local usarem para acessar a Internet.
Estou usando iptables
para NAT, a conexão OpenVPN ( tun0
) e encaminhar pacotes de eth0
para ela. Estou usando dnsmasq
e DHCP para configurar todos os computadores na rede para usar esse servidor como a rota padrão para a Internet.
Isso funciona bem.
No entanto, se o modelo ADSL travar, eu tenho um problema. O OpenVPN percebe que tun0
está com defeito e desconecta. Em seguida, tenta se reconectar, mas falha porque não pode resolver o nome do host do servidor VPN:
Nov 3 17:27:20 blitzen ovpn-TunnelBearGermany[3020]: RESOLVE: Cannot resolve host address: de.tunnelbear-ios.com: Temporary failure in name resolution
Investigando, parece que, quando o túnel é derrubado, a velha tabela de rotas fica ativa:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.18.13.37 0.0.0.0 UG 0 0 0 tun0
46.101.162.205 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 202 0 0 eth0
172.18.13.1 172.18.13.37 255.255.255.255 UGH 0 0 0 tun0
172.18.13.37 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Se eu remover manualmente a rota padrão e reconfigurá-la para apontar para o modem ADSL, o Pi resolverá felizmente o nome do servidor VPN e reconectará-se imediatamente. Tudo volta ao estado feliz.
A minha pergunta é - assumindo que este comportamento é normal - Como posso automatizar a reversão da tabela de rotas quando o túnel se contrai? Existe um gancho apropriado (no OpenVPN, ou talvez no pacote de rede genérica) para fazer isso?