我有兩個遙遠的地方,每個地方都有一個公共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
,並且所有連接到伺服器的客戶端也應該被告知該路由 - 該路由被推送到客戶端。
對於我的設置,我使用了上面的鏈接,但在編寫此答案時,我發現了兩個有關該主題的有趣鏈接:
- https://community.openvpn.net/openvpn/wiki/RoulatedLans
- https://forums.openvpn.net/viewtopic.php?t=26839
祝你好運 :)