
Eu configurei um Raspberry Pi (chamado blitzen
, instalado com Jessie) na minha rede local para atuar como um gateway VPN para todos os computadores da rede local usarem para acessar a Internet.
Estou usando iptables
para NAT a conexão OpenVPN ( tun0
) e encaminhar pacotes eth0
para ela. Estou usando dnsmasq
o DHCP para configurar todos os computadores da rede para usar este servidor como rota padrão para a Internet.
Isso funciona bem.
Porém, se o modelo ADSL travar, tenho um problema. OpenVPN percebe que está tun0
com defeito e desconecta. Em seguida, ele tenta se reconectar, mas falha porque não consegue 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, verifica-se que, quando o túnel é desmontado, a antiga tabela de rotas permanece 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á o nome do servidor VPN e se reconectará imediatamente. Tudo retorna ao estado feliz.
Minha pergunta é - assumindo que esse comportamento seja normal - como posso automatizar a reversão da tabela de rotas quando o túnel entra em colapso? Existe um gancho apropriado (no OpenVPN, ou talvez no pacote de rede genérico) para fazer isso?