OpenVPN 伺服器將用戶端連接到第二個網絡

OpenVPN 伺服器將用戶端連接到第二個網絡

我有兩個獨立的家庭網絡。一個連接到互聯網,第二個用於斷開連接的物聯網設備。

我使用單獨的網路卡將 Ubuntu 伺服器連接到這兩個網路。

我驗證了我可以從該伺服器存取兩個網路中的裝置的資料(使用舊的方法curl來取得http請求)。我也可以透過它存取互聯網。

然後我安裝了 OpenVPN,並按照以下說明進行設置伺服器空間

下一步我配置了一個客戶端並能夠從互聯網連接到該 VPN 伺服器。

連接後,客戶端可以存取互聯網和其中一個內部網絡,但不能存取另一個。

從VPN伺服器執行route -n我得到:

0.0.0.0         12.12.1.1       0.0.0.0         UG    100    0        0 eno1
0.0.0.0         13.13.0.1       0.0.0.0         UG    200    0        0 eno2
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
12.12.1.0       0.0.0.0         255.255.255.0   U     100    0        0 eno1
12.12.1.1       0.0.0.0         255.255.255.255 UH    100    0        0 eno1
13.13.0.0       0.0.0.0         255.255.255.0   U     200    0        0 eno2
13.13.0.1       0.0.0.0         255.255.255.255 UH    200    0        0 eno2

VPN 用戶端連接到網路10.8.0.0並為其指派 IP 位址10.8.0.2

連線的VPN客戶端:

  • 可以存取網路12.12.1.0
  • 可存取互聯網。
  • 13.13.0.0無法從...存取任何IP位址

我的配置中缺少什麼來允許 VPN 用戶端存取第二個網路?

更新

我嘗試從 eno2 (13.x) 的腳本中添加 NAT 命令,但它仍然不起作用...我/etc/iptables/add-openvpn-rules.sh用以下內容修改了創建的文件(空格之前的部分是由腳本自動創建的):

#!/bin/sh
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I FORWARD 1 -i eno1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno1 -j ACCEPT
iptables -I INPUT 1 -i eno1 -p udp --dport 1194 -j ACCEPT

iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno2 -j MASQUERADE
iptables -I FORWARD 1 -i eno2 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno2 -j ACCEPT
iptables -I INPUT 1 -i eno2 -p udp --dport 1194 -j ACCEPT

重新啟動後運行iptables -S 我得到以下資訊:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eno2 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i eno1 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno2 -j ACCEPT
-A FORWARD -i eno2 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno1 -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT

答案1

首先,VPN 伺服器上的防火牆(即 iptables「FORWARD」鏈)必須允許傳送和接收封包。

其次,你的所有設備都需要有路由後退到 VPN 網路,否則它們只能接收來自 VPN 用戶端的資料包,而無法回應它們。

例如,12.12.* 網路上的設備(或更常見的是,不是設備本身,而是該網路的網關)需要路由「10.8.0.0/24 via 12.12.1.1」。

如果無法做到這一點,您的替代方法是讓 VPN 伺服器在兩個網路之間執行 SNAT(即來源位址「偽裝」)。透過 SNAT,來自 VPN 用戶端的所有資料包都將看起來像它們實際上來自 VPN 伺服器本身(即來自 12.12.1.1)——在您的情況下,它與您的設備位於同一網路上,因此設備已經知道如何存取。

看來您正在使用的 VPN 安裝腳本(它確實很多實際上為一個介面新增了 iptables SNAT 規則;你可以在...裡找到它們/etc/iptables/add-openvpn-rules.sh963-977 行在腳本中)。相關規則如下 - 使用 iptablesMASQUERADE操作:

iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o $NIC -j MASQUERADE

當然,還有允許轉發的資料包通過的規則:

iptables -I FORWARD 1 -i $NIC -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o $NIC -j ACCEPT

由於兩個介面上有兩個網絡,因此您需要複製這些規則(或以不同的方式重寫它們)。

相關內容