我有两个独立的家庭网络。一个连接到互联网,另一个用于断开连接的物联网设备。
我使用独立网卡将 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.sh
(963-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
由于两个接口上有两个网络,因此您需要复制这些规则(或以不同的方式重写它们)。