OpenVPN如何通過客戶端路由網際網路流量
我的案例:我想
machine B
通過machine A
. 但是,我不能簡單地將 OpenVPN 伺服器安裝在machine A
我machine A
無法控制的 NAT/防火牆層後面。我目前的解決方案是安裝 OpenVPN 伺服器machine C
,並擁有兩者machines A
並作為客戶端B
連接C
。我正在嘗試**設置正確的路線,以便B
可以路由A
**來自的所有流量。下面詳細介紹了每台機器上的設置和我嘗試過的步驟,剩下的問題在倒數第二段。現在,
machine C
在 Docker 容器 ( https://github.com/kylemanna/docker-openvpn ) 中執行 Linux 和 OpenVPN 伺服器。使用redirect-gateway def1
,兩台客戶端電腦都可以通過伺服器連接和路由流量(https://ipleak.net確認伺服器 IP)。但是,對於以下測試,redirect-gateway def1
刪除了,而topology subnet
添加了 和client-to-client
。伺服器有子網IP192.168.255.1
和公網IPAAA.BBB.CCC.DDD
。
machine A
執行 Windows 並已IPEnabledRouter=1
設置HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
,服務Routing and Remote Access
設置為Automatic
並執行,並且具有 Internet 訪問權限的網路適配器設置為允許從 OpenVPN TAP 適配器共享。它被分配192.168.255.2
。
machine B
執行 Windows 並且位於具有 IP 的路由器後面192.168.1.100
。它被分配了 OpenVPN 子網 IP192.168.255.3
。除了 OpenVPN 自動設置的路由之外,還添加了以下路由:Network Destination Netmask Gateway Interface Metric 0.0.0.0 128.0.0.0 192.168.255.2 192.168.255.3 259 128.0.0.0 128.0.0.0 192.168.255.2 192.168.255.3 259 AAA.BBB.CCC.DDD 255.255.255.255 192.168.1.1 192.168.1.100 291
從
machine B
,我可以 ping通machine A
,192.168.255.2
但網際網路流量仍然通過 OpenVPN 伺服器路由(ipleak 顯示AAA.BBB.CCC.DDD
)。我嘗試添加一個 route:route add default gw 192.168.255.2 tun0
,但這會使客戶端無法訪問 Internet。伺服器路由表通常如下所示:Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.19.0.1 0.0.0.0 UG 0 0 0 eth0 172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 192.168.254.0 192.168.255.2 255.255.255.0 UG 0 0 0 tun0 192.168.255.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
我怎樣才能使這項工作?
**$$ EDIT $$**關於案例的更多背景資訊:我需要為一個部門設置 VPN,以便他們使用者的家用電腦
machine B
可以訪問基於 IP 地址限制訪問的第三方資源。訪問machine A
未被阻止,但組織中至少有兩層 NAT/防火牆,其管理員不想更改其設置以幫助處理傳入連接。因此,我們想設計一個可行的解決方案,使用machine C
可能是 VPS 作為 VPN 伺服器。有一個官方的 VPN 服務,但由於它對某些外部成員開放,第三方供應商不希望允許其 IP 訪問。
原則上,設置應該類似於RoutedLans,除了我們不能簡單地設置
machine A
為 handle0.0.0.0
。這個 SF答案解釋了為什麼不能通過另一個客戶端作為網關使用 TUN 介面發送數據包。但是,根據對此答案的第一條評論有一種解決方法。開
machine C
:
- 將以下內容添加到伺服器配置中:
topology subnet client-to-client route 1.0.0.0 255.0.0.0 route 2.0.0.0 254.0.0.0 route 4.0.0.0 252.0.0.0 route 8.0.0.0 248.0.0.0 route 16.0.0.0 240.0.0.0 route 32.0.0.0 224.0.0.0 route 64.0.0.0 192.0.0.0 route 128.0.0.0 128.0.0.0 push "route 1.0.0.0 255.0.0.0" push "route 2.0.0.0 254.0.0.0" push "route 4.0.0.0 252.0.0.0" push "route 8.0.0.0 248.0.0.0" push "route 16.0.0.0 240.0.0.0" push "route 32.0.0.0 224.0.0.0" push "route 64.0.0.0 192.0.0.0" push "route 128.0.0.0 128.0.0.0"
machine A
為in設置 iroutes 和靜態 IPclient-config-dir
。ifconfig-push 192.168.255.2 255.255.255.0 push "route 192.168.255.0 255.255.255.0 192.168.255.1" iroute 1.0.0.0 255.0.0.0 iroute 2.0.0.0 254.0.0.0 iroute 4.0.0.0 252.0.0.0 iroute 8.0.0.0 248.0.0.0 iroute 16.0.0.0 240.0.0.0 iroute 32.0.0.0 224.0.0.0 iroute 64.0.0.0 192.0.0.0 iroute 128.0.0.0 128.0.0.0
開
machine A
:
- 中
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
,設置IPEnableRouter=1
。- 將服務設置
Routing and Remote Access
為Automatic
並確保它正在執行。- 將網路適配器設置為具有 Internet 訪問權限,以允許從 OpenVPN TAP 適配器進行共享。似乎每次重新啟動機器時都必須禁用並重新啟用共享。
On
machine B
:確保redirect-gateway def1
在客戶端配置中。