Vpn

通過 VPN 路由來自具有更改本地子網的客戶端的所有流量

  • November 20, 2015

我有一個簡單的網狀 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 地址,你應該只需要做一次沒有改變。

引用自:https://serverfault.com/questions/737681