Может ли кто-нибудь показать мне, как фильтровать (изменять пропускную способность, задержку и т. Д.) Одного или нескольких пользователей, подключающихся к OpenVPN, на основе имени их сертификата клиента?
Почему я хотел бы использовать имя клиентского сертификата, так это то, что у меня может быть 100 пользователей, подключающихся к OpenVPN, и я хотел бы индивидуально ограничить пропускную способность каждого клиента.
Большое спасибо
Вы можете использовать директивы 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
: содержащий удаленный IP-адрес vpn клиента$dev
: содержащий интерфейс tunПодробную настройку можно найти в этот ответ.