Openvpn

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

  • January 5, 2021

我有兩個遙遠的地方,每個地方都有一個公共 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://serverfault.com/questions/1048592