我知道从 server.conf 我可以这样做:
push "route 192.168.20.0 255.255.255.0"
但是,有没有办法动态推送路由呢?我有一个 API 调用,它返回 VPN 客户端需要的所有路由,因此,如果路由发生更改,客户端将重新启动 VPN 连接,并且它将拥有新路由。这可能吗?如何?我想从服务器端管理这个。
答案1
自定义配置的关键是使用客户端连接选项
vpn-endpoint.conf 摘录
script-security 2
client-connect /etc/openvpn/up-client
一个非常基本的脚本
#!/bin/sh
CONFIG_FILE=$1
( env ; echo CONFIG_FILE ${CONFIG_FILE} ) >> /var/log/openvpn-up-client.log
case "$username" in
(me)
echo 'push "route 192.168.168.168 255.255.255.255"' >>${CONFIG_FILE}
;;
(*)
echo 'push "route 192.168.169.169 255.255.255.255"' >>${CONFIG_FILE}
;;
esac
摘录男子开放VPN
--客户端连接cmd
在客户端连接上运行命令 cmd。
cmd 由脚本(或可执行程序)的路径组成,后面可以选择跟随参数。
路径和参数可以是单引号或双引号和/或使用反斜杠转义,并且应该用一个或多个空格分隔。
该命令将刚刚经过身份验证的客户端的公用名称和 IP 地址作为环境变量传递(请参阅下面的环境变量部分)。该命令还将新创建的临时文件的路径名作为最后一个参数(在 cmd 中指定的任何参数之后)传递,该命令将使用该路径将动态生成的配置文件指令传递回 OpenVPN。
如果脚本想要生成一个动态配置文件以在客户端连接时应用到服务器上,则应将其写入最后一个参数命名的文件中。
请参阅下面的 --client-config-dir 选项,了解可以在动态生成的配置文件中合法使用的选项。
请注意,脚本的返回值很重要。如果脚本返回非零错误状态,则会导致客户端断开连接。
答案2
我遇到过同样的问题。我编写了一个脚本,从数据库调用返回路由的存储过程。在你的情况下API。并将这些路由写入 file_list (sys.argv[1:])。
该脚本将其作为 serverConfig 中的选项传递/etc/openvpn/server.conf
。你写下这几行:
脚本安全 2
客户端连接 /path/to/your/script
您可以使用 python 脚本并append
在脚本中使用函数:
file_list.append("push \"route %s %s\"\n" % (your_vpn_route, "255.255.255.x"))