Доброго дня. Возможно, свежий взгляд поможет решить проблему с шейпингом в pf. Итак, имеем простую до безобразия схему:
int_if="em1"
ext_if="em0"
pppoelan="10.255.4.0/24"
lan="192.168.0.0/22"
table <bosses> persist file "/etc/pftables/bosses"
table <it> persist file "/etc/pftables/it"
scrub in all
cu="{$lan, $pppoelan}"
#common users обычные юзеры
vip="{<it>, <bosses>}"
#привилегированные юзеры
altq on $ext_if cbq bandwidth 6Mb queue {cu_ext, vip_ext}
#основная очередь, весь канал, что пойдет в народ
queue cu_ext bandwidth 4Mb cbq {www_ext, non_www_ext}
#очередь для обычных юзеров, делится на обращения к www и non_www портам в пропорции 4/1,
#но дочерние очереди могут расширяться при необходимости за счет родительской
queue www_ext bandwidth 80% priority 1 cbq(default, borrow)
queue non_www_ext bandwidth 20% priority 3 cbq(red borrow)
queue vip_ext bandwidth 1Mb priority 3 cbq(red)
#отдельный мегабит vip'ам
_ _ _ _
pass proto tcp from any to any port www queue www_ext
pass proto tcp from any to any port {21, 22, 53, 8001, 8002, 3128, 2100, 3306, 8080, 9000, 995, 465} queue non_www
pass proto udp from any to any port www queue www_ext
pass proto udp from any to any port {21, 22, 53, 8001, 8002, 3128, 2100, 3306, 8080, 9000, 995, 465} queue non_www
pass out on em0 from $vip
pass out on em0 from $vip queue vip_ext
запускаем, смотрим трафик и понимаем, что шейпинг не работает=( какой-нибудь злющий юзер периодически забивает канал и класть хотел на altq. заблудился, как говорится, в трех соснах, а куда копать - ума не приложу.