Eu posso responder como gerenciar a largura de banda quando você souber o que é IP em qual grupo. Você pode usar o bloco de tokens hierárquico para alocar três grupos.
- 10 Grupo A
- 20 Grupo B
- 30 Tráfego desconhecido para / de dispositivos não AD em sua rede
#Create egress shaping
$TC qdisc add dev eth0 root handle 1: htb default 20 r2q 50
$TC class add dev eth0 parent 1: classid 1:1 htb rate 19mbit ceil 19mbit
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 9mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit ceil 15mbit prio 1
$TC class add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit ceil 10mbit prio 2
#Send everything unknown to classid 1:30. The filter has low priority
#(higher numbers are filtered later)
$TC filter add dev eth0 parent 1: prio 20 protocol all u32 match u32 0 0 flowid 1:30
No script acima, os grupos podem emprestar largura de banda a outros grupos, caso não o usem. Se você não quiser que o conjunto ceil tenha o mesmo valor que taxa .
Agora você pode escrever um script que envia IPs dinamicamente para a classe 1:10 ou 1:20. Provavelmente você tem que ligar alguns eventos dhcp ou ad.
O script do grupo A pode ter esta aparência:
$TC filter replace dev eth0 parent 1: protocol ip prio 3 u32 match \
ip dst $THEIP/32 flowid 1:10
Lembre-se de que você só pode controlar o que envia. Portanto, se o seu roteador tiver a interface eth0 e eth1, você também precisará gerenciar a largura de banda na eth1.
E considere anexar a folha QQISC do SFQ às classes. O SFQ é ótimo!
$TC qdisc add dev eth0 parent 1:10 handle 110: sfq perturb 10
$TC qdisc add dev eth0 parent 1:20 handle 120: sfq perturb 10
$TC qdisc add dev eth0 parent 1:30 handle 130: sfq perturb 10
Mapeamento de IPs para grupos
Descobrir o que é IP em qual grupo depende do software que você usa. Se o seu software não suportar eventos, você poderá escrever um script que analise o log e decida alocar um IP em um determinado grupo.