我有可以访问网络的 OpenVPN 服务器:
- 1.1.1.0/24
- 2.2.2.0/24
我还有 2 个 OpenVPN 用户:
- 用户A:只能访问网络1.1.1.0/24
- 用户B:只能访问网络2.2.2.0/24
我怎样才能做到这一点?
我尝试自己做这件事。在同一台机器上,我创建了 1 个 CA、1 个服务器和 2 个客户端证书。以及 2 个守护进程的 2 个 OpenVPN 配置文件
在哪里:
- 第一个配置文件将路由 1.1.1.0/24 推送到其客户端。并且其守护进程使用端口 1193
- 第二个配置文件将路由 2.2.2.0/24 推送到其客户端。并且其守护进程使用端口 1194
然后:
- 在 userA.ovpn 中我设置
remote server.ip.address 1193
- 在 userB.ovpn 中我设置
remote server.ip.address 1194
在这种情况下,它可以“完美”地工作。当我从不同的用户连接时(使用不同的 ovpn 配置文件),我的路由表中会得到不同的网络。但如果我在 user*.ovpn 配置文件中手动更改端口号(1194 <> 1193),那么我就可以访问我本不应该访问的网络。这就像黑客攻击一样……
答案1
我认为您需要在单个 OpenVPN 服务器实例上进行每个客户端的配置。
为此,你需要将client-config-dir
选项设置为 OpenVPN 守护进程使用的账户可读取的目录名称,并传递给服务器;例如,你可以添加
client-config-dir /etc/openvpn/ccd
到您的 OpenVPN 的配置文件。
CN
然后,为每个需要自定义配置的用户添加一个配置文件。请注意以下几点:
- 并非每个用户都需要这样的额外配置;这些文件会覆盖服务器的默认设置。
- 这些文件的名称并不完全匹配
CN
:它们是使用某种算法进行处理的 - 例如用-
s替换_
s 等等。有关完整详细信息,请参阅手册页。
现在,在这些文件中,您可以使用几乎任何需要应用于该特定客户端的设置。您可以随意使用ifconfig-push
, push`。iroute,
我们成功地使用该方案通过单个 OpenVPN 实例连接了多个远程 LAN,但与您的情况相比,这需要做更多的工作(也就是说,我们需要 OpenVPN 进行更多的内部路由)。