Adicionar filtro com base no nome do certificado de cliente (OpenVPN)

1

Alguém pode me mostrar como filtrar (alterar largura de banda, atraso, etc) de um ou mais usuários se conectando ao OpenVPN com base no nome do certificado de cliente?

Por que eu gostaria de usar o nome do Client Cert é que eu poderia ter 100 dos usuários se conectando ao OpenVPN e gostaria de limitar individualmente a largura de banda de cada cliente

Muito obrigado

    
por Server Programmer 31.05.2016 / 03:22

1 resposta

0

Você pode usar as diretivas client-connect <cmd> e client-disconnect <cmd> .

Uma variável de ambiente $common_name é passada para o script especificado em <cmd> e pode ser avaliada para usar configurações específicas de tc nesse cliente específico da seguinte forma:

#!/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

As seguintes variáveis de ambiente são relevantes:

  • $common_name : contendo o nome CN do cliente
  • $ifconfig_pool_remote_ip : contendo o cliente vpn IP remoto
  • $dev : contendo a interface do tun

Uma configuração detalhada pode ser encontrada em esta resposta .

    
por 01.06.2016 / 12:40