我有配置/etc/openvpn/server.conf
。
大多数时候我都会更新路线。
在 init 脚本中不存在重新加载。这service openvpn restart
只是停止然后启动该过程,这显然会让每个人都退出(但我不想)。
答案1
如果需要立即将新路由传播到连接的客户端,则有踢出任何人并让他们重新连接,因为只有在建立连接后才会推送路由。
答案2
我偶然看到了这个问题并意识到我有解决方案。
使用脚本。路由可以不在配置文件中指定,而是使用client-connect
脚本动态构建。因此,如果您更新脚本并连接新客户端,它将获得更新的路由集。
这样,我就可以管理相当大的 VPN 服务器。具体来说,我使用 Python,并将它提供给不同用户的路由集分组,这很方便(将一些“模板”定义为列表,然后通过 连接列表将多个模板分配给用户+
)。
答案3
正如其他地方提到的,你必须踢掉一些人并让他们重新连接(以便他们能够接受你所做的配置更改)。
然而,这会带来问题,尤其是在使用多因素(基于时间)身份验证时。显然,当他们重新连接时,他们将无法使用相同的 MFA 代码,因此必须重新输入(这在 VPN 客户端中并不总是一种好的体验)。
OpenVPN AS 非常巧妙地解决了这个问题,因为它似乎允许用户重新进行身份验证而无需 MFA。底层连接似乎确实完全关闭并重新打开以执行此操作,因此我假设服务器有一些“魔法”允许最近断开连接的人重新连接。
如果我不得不猜测的话,服务器会在重新启动进程时跟踪谁已连接。然后它允许这些用户重新连接而无需身份验证(仅依靠客户端证书,该证书对于 AS 产品上的每个用户都是唯一的)。我还猜测它只允许在断开连接后几秒钟内无需身份验证即可重新连接,因为有时它会在重新启动后要求输入用户名/密码/MFA,尽管大多数情况下它不会这样做。不过,社区版中没有这些。