基于客户端证书名称(OpenVPN)添加filter

任何人都可以告诉我如何过滤(改变带宽,延迟等)的一个或多个用户连接到OpenVPN的基础上,他们的客户端证书名称?

为什么我想使用客户端证书名称是我可以有100多个用户连接到OpenVPN,我想单独限制每个客户端的带宽

非常感谢

您可以使用指令client-connect <cmd>client-disconnect <cmd>

环境variables$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 

以下环境variables是相关的:

  • $common_name :包含客户端CN名称
  • $ifconfig_pool_remote_ip :包含客户端远程vpn IP
  • $dev :包含tun接口

详细的设置可以在这个答案中find。