使用拆分 openvpn 網路,無法通過 vpn 連接到遠端伺服器
我正在執行 ubuntu 12.04,並且只想要可以綁定到 vpn 埠(地址)的特定應用程序的 vpn。如果我使用通過 VPN 埠路由的所有流量連接到 VPN,一切正常(如下面的第二條路線所示)。如果我選中“僅將此連接用於其網路上的資源”選項,該路由看起來就像我期望的那樣,並且其他程序可以訪問網際網路,但我無法連接到綁定到 vpn 埠的遠端伺服器,例如“ telnet google.com 80 -b 10.187.1.9" 似乎我可以將數據包取出,但可能無法輸入。有人知道路由有什麼問題嗎?
使用“僅將此連接用於其網路上的資源”設置:(無法僅使用 tun0 (10.187.1.9) 連接到遠端伺服器
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth2 10.187.1.1 10.187.1.9 255.255.255.255 UGH 0 0 0 tun0 10.187.1.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 130.185.155.58 192.168.1.1 255.255.255.255 UGH 0 0 0 eth2 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth2 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth2 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
預設選項:(我可以使用 tun0 連接到遠端伺服器,但所有流量都通過 tun0 路由)
0.0.0.0 10.187.1.9 0.0.0.0 UG 0 0 0 tun0 10.187.1.1 10.187.1.9 255.255.255.255 UGH 0 0 0 tun0 10.187.1.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth2 185.3.135.58 192.168.1.1 255.255.255.255 UGH 0 0 0 eth2 192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth2 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
OpenVPN 使用一個 entre 子網來容納其伺服器端的虛擬介面以及連接的客戶端。在您的情況下,此子網似乎配置為 10.187.1.0/24。OpenVPN 為伺服器端分配 10.187.1.1,並將子網的其餘部分拆分為每個客戶端連接的較小子網。預設情況下,出於兼容性原因,它將使用 /30 和 2 個可用地址、一個網路地址和一個廣播地址,並將第一個可用地址分配給伺服器,第二個分配給連接的客戶端。在您的範例中,這將是 10.187.1.9(伺服器)和大概 10.187.1.10(客戶端)。
因此,您的第一個問題正在執行
telnet google.com 80 -b 10.187.1.9
- 您正在指示telnet
綁定到一個非本地地址,這是行不通的。第二個問題是 Linux 在預設情況下*僅通過評估目標地址來進行路由決策。*正如google.com
解析不是您的網路本地且未被任何其他路由覆蓋的內容一樣,數據包通過預設路由中繼,在您的情況下為 192.168.1.1 並且可能對 10.187.1.0/24 子網一無所知,所以它有效地丟棄了數據包。如果您需要此流量通過 路由tun0
,您應該明確告訴 Linux:echo "200 vpn" >> /etc/iproute2/rt_tables ip rule add from 10.187.1.0/24 table vpn ip route add table vpn default dev tun0
這將創建一個名為 的附加路由表註冊,
vpn
如果數據包來自 10.187.1.0/24 子網,則添加使用此路由表的規則,並添加通過 tun0 的預設路由(這是一個點對點介面,因此路由規範不需要網關地址)用於通過vpn
表路由的所有流量。