有人能告诉我如何根据客户端证书名称过滤(更改带宽、延迟等)连接到 OpenVPN 的一个或多个用户吗?
我之所以要使用客户端证书名称,是因为我可能有 100 个用户连接到 OpenVPN,并且我想单独限制每个客户端的带宽
非常感谢
答案1
您可以使用指令client-connect <cmd>
和client-disconnect <cmd>
。
环境变量$common_name
被传递给指定的脚本<cmd>
,并且可以被评估为使用tc
该特定客户端上的特定设置,如下所示:
#!/bin/bash
if [ "$common_name" == "client1" ]; then
downrate=100mbit
uprate=100mbit
elif [ "$common_name" == "client2" ]; then
downrate=10mbit
uprate=10mbit
else
downrate=10kbit
uprate=10kbit
fi
tc qdisc add dev "$dev" root handle 1: htb
tc qdisc add dev "$dev" handle ffff: ingress
# Limit traffic from VPN server to client
tc class add dev "$dev" parent 1: classid 1:1 htb rate "$downrate"
tc filter add dev "$dev" parent 1:0 protocol ip prio 1 \
u32 match ip dst "$ifconfig_pool_remote_ip"/32 flowid 1:1
# Limit traffic from client to VPN server
tc filter add dev "$dev" parent ffff:0 protocol ip prio 1 \
u32 match ip src "$ifconfig_pool_remote_ip"/32 \
police rate "$uprate" burst 80k drop flowid :1
以下环境变量是相关的:
$common_name
:包含客户端 CN 名称$ifconfig_pool_remote_ip
:包含客户端远程 VPN IP$dev
:包含 tun 接口
详细设置可以参见这个答案。