根据用户规则使用 OpenVPN,但不路由互联网流量

根据用户规则使用 OpenVPN,但不路由互联网流量

编辑:我知道learn-address我需要使用它来调用脚本(如项目中所指定openvpn-netfilter)来设置防火墙规则。我想我的问题与脚本更相关config.ovpn。如何配置client.ovpn文件以同时了解用户需要哪些路由,同时保持 Internet 流量流向用户的 ISP?

我有一个问题,关于如何制定每个用户的防火墙规则,同时不是通过 OpenVPN 服务器路由互联网流量。我正在尝试为一群朋友和我设置 VPN 服务器,因为我们在做一个项目。我将实现类似这个 Github 项目的东西:https://github.com/gdestuynder/openvpn-netfilteriptables。这将使 VPN 服务器能够查找用户的 ACL,并在服务器端使用它们。所有其他流量将被丢弃。

对于我自己的家庭 VPN,我知道我可以在配置中使用以下client.ovpn内容不是通过 VPN 路由互联网流量:

route-nopull
route 192.168.1.0 255.255.255.0

192.168.1.0/24我的家庭子网在哪里,适配器10.8.0.0/24的 DHCP IP 范围(未显示)在哪里tun。我知道将其放置在客户端的配置中会覆盖服务器设置push "redirect-gateway def1 bypass-dhcp"

这就是我感到困惑的地方:我已经知道我的家庭子网是192.168.1.0/24,所以我可以轻松地将其放在client.ovpn文件中。但如果我不知道我可以访问的子网/IP(大多数用户都不知道),OpenVPN 如何动态地将每个用户的 VPN 规则推送到客户端?

换句话说,如果user1有权限访问10.0.0.210.0.2.10并且user2有权限访问10.0.2.1010.0.3.4,那么在使用相同的通用配置的情况下,OpenVPN 如何知道向每个用户推送正确的路由client.ovpn

答案1

您可以使用 client-config-dir 中客户端特定的配置文件将单独的 openvpn 指令推送到您的客户端。

在服务器配置文件中包含指令:

client-config-dir ccd

如果您的 openvpn 路径中不存在此目录,请创建它,例如:

/etc/openvpn/ccd

现在在目录中为每个客户端创建一个配置文件,其名称与客户端的X509ccd通用名称相同。以下选项在特定于客户端的上下文中是合法的:push、、、和。push-resetirouteifconfig-pushconfig

例如将路由推送到user1证书中带有 CN 的客户端:

echo 'push "route 10.0.0.2 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1
echo 'push "route 10.0.2.10 255.255.255.255 10.8.0.1"' >> /etc/openvpn/ccd/user1

为了使其工作,您需要使用指令从服务器拉取客户端上的配置指令pull

您可能在客户端配置中有该指令client,它是一个辅助指令,其扩展如下:

pull
tls-client

不要route-nopull组合使用,因为它会阻止客户端拉取路由。如果您需要redirect-gateway在某些客户端上将所有流量路由到 VPN 子网,则可以将此指令仅放在这些客户端配置文件中,而不是放在所有客户端的服务器配置文件中。该redirect-gateway指令会自动执行路由命令,以使所有传出的 IP 流量通过 VPN 重定向。请参阅男人页。

答案2

对于任何想知道替代答案的人来说,以下内容也应该有用。当您使用脚本时client-connect,OpenVPN 会将一个参数传递给您的脚本:临时文件的路径,您可以在其中添加push "route 192.168.10.0 255.255.255.0"类似语句。这可以用作动态 CCD 类文件,而无需生成静态 CCD 文件。

相关内容