從伺服器到客戶端的 OpenVPN 路由

從伺服器到客戶端的 OpenVPN 路由

我有兩個遙遠的地方,每個地方都有一個公共IP,我想讓這些地方的區域網路就像一個一樣。即A地機器可以與B地機器通信,B地機器可以與A地機器通訊。

在地方 A (10.0.2.1),我有一個 ASUS AC 1200g+ 和一個帶有 OpenVPN 伺服器的 Raspberry pi (10.0.2.60)。新客戶端停留在介面 tun0 (10.8.0.1)。此時,客戶端(Place B)可以與Place A的LAN進行通信,只有目的位址為10.0.1.0/24的流量被重定向到伺服器端。

現在我希望A處的機器(伺服器)可以與B處的LAN進行通訊。我在路由器中放置了一個路由,所有 10.0.1.0/24 的目標請求都被重定向到 Raspberry Pi VPN 伺服器,但伺服器不知道如何處理該流量。

在地點 B (10.0.1.1) 中,我有一台帶有 ASUS Merlin 韌體的 ASUS AC86U,並使用「入站防火牆」啟用選項啟動 OpenVPN 用戶端。

網路架構

答案1

我有一個類似的設置,其中樹莓派是客戶端,但這應該不重要。免責聲明:這並不是最容易設定的事情。

我使用此/etc/iptables/iptables.rules文件將來自 OpenVPN 連接(通常tun0,但tun+涵蓋所有)的流量 NAT 到本地網路:

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth+ -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth+ -j ACCEPT
COMMIT

OpenVPN 設定需要所謂的客戶端到客戶端配置。伺服器 OpenVPN-config 中的這兩行啟用此功能:

# use ccd-folder (per host configs)
client-to-client
# routing to office lan:
client-config-dir ccd

必須在配置所在的路徑client-config-dir下手動建立。/etc/openvpn/...然後,您可以在該資料夾中建立每個主機的文字檔案。檔案命名很重要:仔細檢查 OpenVPN 如何在系統日誌中呼叫您的用戶端(例如,在檔案中journalctl -xef --unit openvpn-server@somehost或在openvpn-status.txt檔案中)。文件的內容很簡單:

ifconfig-push 10.10.99.18 255.255.255.255
iroute 192.168.0.0 255.255.0.0

會將其設定為每次連線時取得相同的 IP ( 10.10.99.18) 並將 VPN 伺服器設定為192.168.0.0/16使用此檔案的名稱和 IP 位址在內部將流量路由至用戶端。這可以理解為什麼我們還沒有有效的網路連線:也就是說,因為 VPN 伺服器的主機系統不知道 VPN 隧道可用於路由該網路的流量 ( netstat -rn4)。所以我們必須再次配置VPN伺服器並附加:

route       192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"

告訴伺服器,它應該將流量路由到192.168.0.0/16,並且所有連接到伺服器的客戶端也應該被告知該路由 - 該路由被推送到客戶端。


對於我的設置,我使用了上面的鏈接,但在編寫此答案時,我發現了兩個有關該主題的有趣鏈接:

祝你好運 :)

相關內容