我已经为我的办公室设置了VPN。配置如下:
- 安装OpenVPN办公室服务器之一上的服务器(Ubuntu20.04 服务器)使用端口1194和协议UDP。
- 该港口是转发通过调制解调器/路由器连接到外部(以及我们用于其他服务的端口,如 443、80、3000、8000)
- 我选择了10.8.xx 的 IP 范围作为 VPN 用户的 IP。
- 对于我想要连接的每个客户端,我
ovpn
使用安装 OpenVPN 服务器时使用的相同脚本生成了一个文件。
的数量客户我有最高 10/15。
看这个可以更好地理解设置图表:
当我和一些客户端连接到 VPN 时,一切都正常:互联网连接,公共 IP 是办公室的 IP,我可以使用 SSH 和其他协议连接到办公室内的服务器,我也可以使用他们的 10.8.xx IP 与其他客户端连接。
虽然许多其他客户端可以连接到 VPN,但它们只能使用互联网并连接到 IP 为 10.8.xx 的其他客户端。无法连接到内部机器以任何方式在 IP 192.168.1.x 上。
我不明白为什么:
- 受此问题影响的客户端有多种操作系统,并且没有一个共同的特征可能是罪魁祸首。(我有一台完全相同的计算机,操作系统版本和 OpenVPN 客户端版本相同,但我工作正常)
- 我检查过,每个客户端都有不同的 IP,如 10.8.0.x,所以没有冲突。
我可以测试什么来找到解决方案?我是否以错误的方式配置了 VPN?
答案1
您无需更改 LAN 主机上的 IP 配置,而是可以从例如块中“分配”另一个子网10.0.0.0/8
(例如)来在 VPN 客户端上10.1.0.0/24
“表示” 。192.168.1.0/24
将其添加到您的 OpenVPN 服务器配置文件中:
push "route 10.1.0.0 255.255.255.0"
这样 VPN 客户端就会将流量路由10.1.0.0/24
到隧道中。(如果您的设置不使用推拉,route 10.1.0.0 255.255.255.0
则需要将其添加到每个客户端的配置中。)
然后在表的链中添加一条NETMAP
规则,以便对相关的流量执行目标 NAT:PREROUTING
nat
iptables -t nat -A PREROUTING -d 10.1.0.0/24 -j NETMAP --to 192.168.1.0/24
在转发到办公室中的 LAN 主机之前,子网/块中每个 IP的流量目标 IP 将从 更改为10.1.0.x
。192.168.1.x
10.1.0.0/24
当 LAN 主机的回复转发到 VPN 客户端时,其源 IP 也将被“反向 NAT”。但是,如果(且仅当)您希望 LAN 主机能够“主动”访问 VPN 客户端,您还需要添加以下NETMAP
规则:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j NETMAP --to 10.1.0.0/24
否则,来自 VPN 客户端的回复将发送到他们自己的 LAN 主机(如果存在)。
显然,使用这种方法,需要注意的是 VPN 客户端将使用具有不同“前缀”(10.1.0
而不是192.168.1
)的 IP 访问办公室 LAN 主机。当然,任何 NATing 都会带来的一些极端问题(我不熟悉/没有确切的例子)也可能会发生。