You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何指定仅针对特定OpenVPN客户端执行client-connect脚本

如何指定仅针对特定OpenVPN客户端执行client-connect脚本

我来帮你搞定这个需求!OpenVPN本身没有直接提供“仅对特定客户端触发脚本”的配置项,但我们可以通过两种实用的方式来实现,下面给你详细说明:

方法一:在client-connect脚本内添加客户端判断逻辑

OpenVPN在调用脚本时会自动传递一系列环境变量,其中common_name就是客户端证书里的唯一通用名称(CN)——这个名称和你客户端配置文件里的对应标识一致(比如你提到的openvpn_client01.conf对应的CN大概率是openvpn_client01)。

你只需要修改你的connect-openvpn-up.sh脚本,加入判断逻辑,只有匹配目标客户端CN时才执行通知操作:

#!/bin/bash
# 获取当前连接客户端的CN
TARGET_CN="openvpn_client01"
CLIENT_CN="$common_name"

# 仅当客户端CN匹配时执行SMS通知
if [ "$CLIENT_CN" = "$TARGET_CN" ]; then
    # 这里放你原本的SMS通知代码
    # 比如:send-sms "客户端 $CLIENT_CN 已成功连接OpenVPN服务器"
    echo "发送通知:客户端 $CLIENT_CN 已连接"
fi

同理,connect-openvpn-down.sh也可以用同样的逻辑做过滤。

方法二:使用客户端特定配置块(CCD)

这种方式更适合把不同客户端的配置分开管理,步骤如下:

  1. 在你的server.conf里添加或修改以下配置:
script-security 2
# 指定客户端配置目录
client-config-dir /etc/openvpn/ccd
  1. 创建/etc/openvpn/ccd目录(如果不存在的话):
mkdir -p /etc/openvpn/ccd
  1. 在该目录下创建一个与目标客户端CN同名的文件(比如openvpn_client01),写入专属的脚本配置:
# 仅对这个客户端触发连接/断开脚本
client-connect /path/to/connect-openvpn-up.sh
client-disconnect /path/to/connect-openvpn-down.sh

这样设置后,只有当openvpn_client01这个客户端连接时,才会加载这个配置文件里的脚本指令;其他客户端连接时不会触发任何通知脚本。

两种方法各有优势:方法一灵活,适合需要对多个客户端做不同逻辑处理的场景;方法二结构清晰,便于维护不同客户端的独立配置。

备注:内容来源于stack exchange,提问作者ogcurtis

火山引擎 最新活动