根据客户端证书名称添加过滤器 (OpenVPN)

根据客户端证书名称添加过滤器 (OpenVPN)

有人能告诉我如何根据客户端证书名称过滤(更改带宽、延迟等)连接到 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 接口

详细设置可以参见这个答案

相关内容