通過 VPN 路由來自具有更改本地子網的客戶端的所有流量
我有一個簡單的網狀 VPN(使用 Tinc 實現),其中包含我的個人筆記型電腦和一個具有公共 IP 的 VPS。假設伺服器的公共 IP 是
1.2.3.4
. 筆記型電腦10.16.1.2
的私有地址是 ,伺服器的私有地址是10.16.0.2
。我想通過 VPN 路由我筆記型電腦的所有流量,並使其從 VPS 退出。我已經通過啟用轉發和偽裝將伺服器設置為網關,但我不知道如何在筆記型電腦上配置路由。
問題是筆記型電腦沒有固定的本地子網。例如,有時它可能是
192.168.0.0/24
我家的路由器,或者可能是172.16.0.0/12
我大學的路由器。我希望我的筆記型電腦通過 VPN 網關路由我的所有流量,但與此同時,我應該能夠訪問本地網路,即使它有一個未知的更改子網。
這是我設法完成的:
# ip route default via 192.168.0.1 dev wlan0 0.0.0.0/1 via 10.16.0.2 dev vpn 128.0.0.0/1 via 10.16.0.2 dev vpn 10.16.0.0/16 dev vpn proto kernel scope link src 10.16.1.2 192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.133
遵循一些 OpenVPN 指南,我將整個網際網路分成兩個大的
/1
,以便它們充當一種預設路由,而不更改實際的預設路由 (default via 192.168.0.1 dev wlan0
)。問題是即使是發往 VPS 的數據包1.2.3.4
也會被/1
路由擷取,並且流量會卡住。如果有可能寫出類似的東西:
ip route add 1.2.3.4/32 via default
這會很好,但不要認為是可能的。
我什至嘗試使用基於策略的路由和使用 iptables 標記數據包,但我沒有運氣。
在不知道您的實際 VPS IP 地址的情況下,我無法給您確切的命令,但基本上您需要將“網際網路”分成更多部分,其中不包括您的 VPS。例如,如果您的 VPS 地址是 255.255.255.255(顯然不是),那麼您將擁有
- 127.0.0.0/7 通過 10.16.0.2 開發 vpn
- 255.0.0.0/15 通過 10.16.0.2 開發 vpn
- 255.255.0.0/23 通過 10.16.0.2 開發 vpn
- 255.255.255.0/31 通過 10.16.0.2 開發 vpn
請注意,這涵蓋了您的所有第二個網際網路塊,除了您的 VPS 地址。請注意,我故意選擇了一個簡單的地址,這樣我就不會整天都在這裡了,但是如果你願意寫足夠多的路線,你可以做任何你想做的事情,只要你的 VPS 地址,你應該只需要做一次沒有改變。