
我在本地網路上設定了一個 Raspberry Pi(名為blitzen
,與 Jessie 一起安裝)作為 VPN 網關,供本地網路上的所有電腦用來存取互聯網。
我正在使用iptables
NAT OpenVPN 連接 ( tun0
) 並將資料包轉發到eth0
它。我正在使用dnsmasq
DHCP 來配置網路上的所有計算機,以使用該伺服器作為 Internet 的預設路由。
這效果很好。
但是,如果 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 中,或可能在通用網路包中)來執行此操作?