![OpenVPN 用戶端作為其他客戶端的網關](https://rvso.com/image/623645/OpenVPN%20%E7%94%A8%E6%88%B6%E7%AB%AF%E4%BD%9C%E7%82%BA%E5%85%B6%E4%BB%96%E5%AE%A2%E6%88%B6%E7%AB%AF%E7%9A%84%E7%B6%B2%E9%97%9C.png)
我的 OpenVPN 網路包含一台伺服器和兩個客戶端。當我在 C1 上設定預設路由以經過 S(它確實啟用了 ip 轉送和 NAT)時,一切都按預期進行。問題是,如果我將 C1 預設路由指向 C2(也正確配置為從 VPN 到網際網路的 NAT 流量),流量無論如何都會被 S 搶走並由它轉送。當我在 C2 上進行 tcpdump 時,沒有任何跡象表明有任何東西到達那裡。是否可以將用戶端設定為 OpenVPN 中其他用戶端的網關,或者如果用戶端上的路由指向其他用戶端,則封包由伺服器事件路由是系統的屬性嗎?
編輯:
方括號代表我的虛擬網路(它實際上並不存在)。網路內C1/C2/S可以互相ping通,沒有問題。我想將流量從 C1 透過 C2 路由到網際網路。我可以從 C1(也可能從 C2)透過 S 路由到互聯網,但透過 C2 路由不起作用,因為封包由 S 轉送。這似乎是 OpenVPN 伺服器不想將封包發送到它們應該去的地方的問題。
[C1-S(NAT)] -- 互聯網 網際網路-[(NAT)C2/]
答案1
如果不知道您要描述的網路拓撲,則很難完全回答這個問題。雖然我想我可以說一般來說可以做你所要求的事情。
考慮以下場景:
C1 -- R1 --(NAT)-- 網際網路 --(NAT)-- R2 -- C2
在這裡,如果 R1 和 R2 之間創建了(正確配置的)OpenVPN 隧道,則 C1 可以與 C2 通信,反之亦然。
這種情況更難正確:
C2 -- R1 --(NAT)-- 網際網路 --(NAT)-- R2 -- C3 C1/\C4
其中 C2 和 C3 是 OpenVPN 端點,C1 應使用 VPN 到達 C4。第一個障礙是在 C2 和 C3 之間建立 OpenVPN 隧道,可能使用從 UDP 1190 的 R1 和 R2 分別到 C2 和 C3 的連接埠轉送。
接下來是讓 C1 使用 C2 作為將封包傳送到 C4 的方式。這涉及到在 C1 和 C4 上配置路由表。 C1 設定透過 C2 到 C4 網路的路由,C4 設定透過 C3 到 C1 網路的路由。這兩條路由都應優先於預設路由。因此,也許在 C1 上:{route add 192.168.3.0 gw 192.168.2.2},在 C4 上:{route add 192.168.1.0 gw 192.168.3.2}。假設 C2 和 C3 的位址分別為 192.168.2.2 和 192.168.3.2,且 C1 和 C4 分別與 C2 和 C3 位於同一網路上。
希望這足以回答您的問題,並證明在預設網關上設定 VPN 比在用戶端上設定 VPN 容易得多,但兩者都有用例。
編輯:根據此拓撲以及問題的描述,我相信 C1 和 C2 上存在路由問題... C1 的預設路由應指向作為路由器的 C2 的 VPN 位址。這將迫使 C1 使用 VPN 將封包傳送到 C2,然後 C2 決定如何處理它們。
如果 C2 使用自己的 Internet 連線(如您所示),C2 的預設路由應該是自己的 Internet 連線。
如果 C2 實際上沒有自己的 Internet 路徑,而是透過 S,則 S 應該是 C2 的預設路由器。
答案2
我以前遇到過這個問題,我有一個 VPN 用戶端正在工作,阻止我訪問家庭區域網路上的另一個裝置。我必須設定到第二台機器的靜態路由,因為 VPN 用戶端會自動新增預設路由並將所有流量轉送到伺服器。
如果您可以讓從 C1 到 C2 的流量通過伺服器,則需要在 server.conf 中啟用 client-to-client 指令,以便用戶端可以透過 VPN 互相存取。預設情況下,客戶端只能存取伺服器。
查看http://openvpn.net/index.php/open-source/documentation/howto.html在「使用路由 VPN (dev tun) 時包含客戶端的多台電腦」下。