- Server:
Ubuntu 16.04
+OpenVPN Server 2.3.10
- Client:
Windows 10
+Securepoint SSL VPN Client 2.0.22 (Portable)
問題源於商務中心網路,網路邏輯如下
連上外部公用 VPN 後,公用服務區宣告 GG
在不能更動中心網路的前提下,尋找與思考可能的解決方案,結果為:
方案
❌1). 從 Server 強制 push 全部房間的閘道器路由,不管有沒有衝突,例如在 server.conf 中加入:
push "route 192.168.2.0 255.255.255.0 192.168.10.254"
push "route 192.168.2.0 255.255.255.0 192.168.20.254"
push "route 192.168.2.0 255.255.255.0 192.168.30.254"
push "route 192.168.2.0 255.255.255.0 192.168.40.254"
結果因規則彼此衝突,連上後過一陣子會被 Windows 自動清除而斷線
❌2). 從 Server 強制 push 全部房間的閘道器路由,Client 端指定使用哪條規則,概念上使用 iroute 的設定方式。
遺憾的是 iroute 只能用在 site-to-site 的場景
❌3).從 Server push 複寫 Client 的 route 將其 metric 設大 (優先權降低),例如設 100
push "route 10.8.0.0 255.255.255.0 10.8.0.1 100"
結果該條是變更了,但似乎不只一條需要修改 (以後有空研究,先放著)
👎4). 從 Server push 單條 route 指定 192.168.2 走房間閘道器的規則,例如
push "route 192.168.2.0 255.255.255.0 192.168.30.254"
結果當然成功,但別鬧了,一台 VPN Server 只能給單一房間使用?
👎5). PC 連上 VPN 後自己的路由自己改? (茶🍵
✔️6). 自己寫 Script 讓連線時觸發,執行設定正確的 route table
目前最佳解
OpenVPN Client 支援在連線/斷線前後等時候執行 Script 做任何事情,我們使用的 Securepoint Client 底層是 OpenVPN Client,當然也有支援。
因此我們可以在連線後,執行一個 Script 來:
- 取得現在 PC 上
192.168
開頭網段的閘道器 IP 位址 - 新增路由將
192.168.2.0
網段導向192.168
開頭的閘道器 IP 位址
斷線後也執行一個 Script 來:
- 刪除我們增加的 route
Securepoint 介面設定連線與斷線後執行的 Script 如下圖:
⚠️ 從 UI 設定有時會把我們的 ovpn 設定檔內容搞爛 (沒有完整支援),所以我偏好直接改設定檔案
設定步驟
1). 新增設定與各 Script 檔案,需要和 ovpn 檔放在一起,除了 scripts.conf
檔名不能變,bat 檔名可以隨意 (⚠️OpenVPN 原廠 Client 有限制),此例連線後觸發 CN1_up.bat
,斷線後觸發 CN1_down.bat
2). 連線後執行的 Script CN1_up.bat
檔案內容,Windows 限定 (Linux 更簡單,請自行 Google):
for /f "tokens=2,3 delims={,}" %%a in (
'"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "192.168" "'
) do (
set GWIP=%%~a
)
:: %%~b is IPv6 Gateway
route ADD 192.168.2.0 MASK 255.255.255.0 %GWIP%
:: echo Found Default GW: %GWIP%
3). 斷線後執行的 Script CN1_down.bat
檔案內容:
route DELETE 192.168.2.0
4). 在 scripts.conf 中指定 連線後與斷線後要執行哪個檔案:
路徑與檔名請自行修改AC:
是指連線後AD:
是指斷線後TO:
是指連線後要延遲多少毫秒 ms 再執行 Script
AC:D:/SecurepointSSLVPNClient/Portable/config/CN1/CN1_up.bat
TO:500
AD:D:/SecurepointSSLVPNClient/Portable/config/CN1/CN1_down.bat
⚠️ Script 的檔名與路徑不能有空格!!!
5). VPN 連線測試
現在每間房終於可以共用 VPN Server 與 Client 設定了