從伺服器到客戶端的 OpenVPN 路由
我有兩個遙遠的地方,每個地方都有一個公共 IP,我想讓這些地方的 LAN 網路就好像它們是一個一樣。即A地的機器可以與B地的機器通信,B地的機器可以與A地的機器通信。
在地方 A (10.0.2.1) 我有一個 ASUS AC 1200g+ 和一個帶有 OpenVPN 伺服器的 Raspberry pi (10.0.2.60)。新客戶端保留在介面 tun0 ( 10.8.0.1 ) 中。此時,客戶端(地點 B)可以與地點 A 的 LAN 通信,只有目的地為 10.0.1.0/24 的流量被重定向到伺服器端。
現在我希望 A 地(伺服器)中的機器可以與 B 地的 LAN 通信。我在我的路由器中放置了一個路由,所有帶有 10.0.1.0/24 的目標請求都被重定向到 Raspberry Pi VPN 伺服器,但伺服器不知道如何處理該流量。
在地方 B (10.0.1.1) 我有一個帶有華碩 Merlin 韌體的華碩 AC86U,我用“入站防火牆”啟用選項啟動了 OpenVPN 客戶端。
我有一個類似的設置,其中樹莓派是客戶端,但這並不重要。免責聲明:這不是最容易設置的事情。
我正在使用此
/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
必須在配置所在的 -path 下手動
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/RoutedLans
- https://forums.openvpn.net/viewtopic.php?t=26839
祝你好運 :)