
Я настроил Raspberry Pi (называется blitzen
, установлен с Jessie) в своей локальной сети, чтобы он работал как VPN-шлюз для всех компьютеров в локальной сети для доступа в Интернет.
Я использую iptables
для NAT соединение OpenVPN ( tun0
) и пересылаю пакеты с eth0
него. Я использую dnsmasq
и DHCP для настройки всех компьютеров в сети на использование этого сервера в качестве маршрута по умолчанию в интернет.
Это работает хорошо.
Однако если модель ADSL выходит из строя, у меня возникает проблема. OpenVPN замечает, что tun0
неисправен, и отключается. Затем он пытается повторно подключиться, но не может, поскольку не может разрешить имя хоста VPN-сервера:
Nov 3 17:27:20 blitzen ovpn-TunnelBearGermany[3020]: RESOLVE: Cannot resolve host address: de.tunnelbear-ios.com: Temporary failure in name resolution
В ходе расследования выяснилось, что при демонтаже туннеля старая таблица маршрутизации остается активной:
$ 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
Если я вручную удаляю маршрут по умолчанию и перенастраиваю его так, чтобы он указывал на модем ADSL, то Pi успешно разрешает имя VPN-сервера и немедленно переподключается. Все возвращается в счастливое состояние.
Мой вопрос - предполагая, что это нормальное поведение - как я могу автоматизировать откат таблицы маршрутизации при обрушении туннеля? Есть ли соответствующий хук (в OpenVPN или, возможно, в пакете generic network) для этого?