如果 OpenVPN 不存在,可以創建預設路由嗎?
筆記
這個問題最初是關於 OpenVPN 不設置預設網關的問題,如果預設網關不存在,即使您指定
--redirect-gateway local
或--redirect-gateway def1
。從 2.4.1開始,無論是否已經存在,OpenVPN都會使用此選項設置預設網關,因此如果您使用該版本,它已經過時了。請注意,Ubuntu Zesty 中的 OpenVPN 版本是 2.4.0,並且沒有此更改。但是 Artful 的版本在 Zesty 上安裝沒有問題。
我在 Ubuntu 14.04.5 下創建了一個網路命名空間,併計劃在其中執行一個 VPN(使用 OpenVPN 2.3.2 和一個配置文件)。這個想法是在 VPN 執行之前,不能將任何流量路由出命名空間。
我通過不創建預設路由而是將 VPN 伺服器 IP 地址列入白名單來實現這一點。所以我的路由表看起來像:
# ip netns exec testns ip route add A.B.C.D/32 via 10.200.200.1 dev veth1 # ip netns exec testns ip route show 10.200.200.0/24 dev veth1 proto kernel scope link src 10.200.200.2 A.B.C.D via 10.200.200.1 dev veth1
請注意,這是虛擬介面( )的另一端的
10.200.200.1
地址。我已經確認我在根命名空間中的規則和 IP 轉發可以在有路由的情況下使流量進出命名空間。是 VPN 伺服器地址。veth0``veth1``10.200.200.2``iptables``testns``A.B.C.D
為了啟動 VPN,我執行
ip netns exec testns openvpn abcd.ovpn
. 此配置文件包含一個pull
指令,push
來自伺服器的 ed 配置包含:PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option[...]
但過了一會兒,我看到:
NOTE: unable to redirect default gateway -- Cannot read current default gateway from system
因此,我的命名空間中沒有設置預設路由
testns
。根據手冊,
redirect-gateway def1
不會嘗試替換預設路由,它只是創建兩個新路由0.0.0.0/1
和128.0.0.0/1
. 沒有預設路由如何阻止創建這些路由?當預設路由最初不存在時,如何讓 OpenVPN 通過 VPN 自動路由所有流量?
根據手冊,redirect-gateway def1 不會嘗試替換預設路由,它只是創建兩個新路由 0.0.0.0/1 和 128.0.0.0/1。沒有預設路由如何阻止創建這些路由?
如果 OpenVPN 只是覆蓋預設網關,它將不再能夠通過該原始網關到達其對等端點。因此,它首先要做的是查看預設網關並通過該網關為其對等端點設置顯式主機路由。
OpenVPN 的手冊頁對此非常明確:
–redirect-gateway 標誌…
自動執行路由命令以使所有傳出 IP 流量通過 VPN 重定向。這是一個客戶端選項。
此選項執行三個步驟:
(1) 為轉發到預先存在的預設網關的 –remote 地址創建靜態路由。這樣做是為了 (3) 不會創建路由循環。
(2) 刪除預設網關路由。
(3) 將新的預設網關設置為 VPN 端點地址(派生自 –route-gateway 或指定 –dev tun 時 –ifconfig 的第二個參數)。
當隧道被拆除時,上述所有步驟都反過來,恢復原來的預設路由。
然後你問
當預設路由最初不存在時,如何讓 OpenVPN 自動通過 VPN 路由所有流量?
OpenVPN 客戶端必須存在(某處)路由才能到達其對等端點(即伺服器)。
--up
因此,無論該路線是什麼,您都需要在腳本中實現上述三個任務。當然,您需要編寫此腳本。