OpenVPN, по-видимому, не очищает таблицу маршрутизации при разрыве VPN-туннеля.

OpenVPN, по-видимому, не очищает таблицу маршрутизации при разрыве VPN-туннеля.

Я настроил 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) для этого?

Связанный контент