URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5015
[ Назад ]

Исходное сообщение
"шейпинг через pf+altq"

Отправлено skiff2002 , 28-Мрт-12 13:47 
Доброго дня. Возможно, свежий взгляд поможет решить проблему с шейпингом в 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. заблудился, как говорится, в трех соснах, а куда копать - ума не приложу.


Содержание

Сообщения в этом обсуждении
"шейпинг через pf+altq"
Отправлено skeletor , 28-Мрт-12 23:07 
Во-первых 4+1 не будет 6 (это роли особо не играет, но всё-таки).
Во-вторых, какой смысл несут эти правила

pass out on em0 from $vip
pass out on em0 from $vip queue vip_ext

В третьих, лучше указывать на каком интерфейсе применяется шейпинг:
pass on $ext_if...queue...

В чётвёртых - если уж используете макросы, то используйте везде - ext_if, а не то ext_if, то  em0.

"шейпинг через pf+altq"
Отправлено artemrts , 07-Апр-12 17:35 
>[оверквотинг удален]
> 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}

Ограничивайте скорость скачивания на внутреннем интерфейсе. Величина bandwidth = 96% от ISP.

altq on $int_if cbq bandwidth 6Mb queue {cu_ext, vip_ext}  

>[оверквотинг удален]
>  #но дочерние очереди могут расширяться при необходимости за счет родительской
>            
>     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'ам

set state-policy if-bound
set skip on lo0

Скрабить достаточно на внешнем ифейсе.
scrub on $ext_if all

Дальше опишу только внутренний ифейс:

pass in quick on $int_if inet from <vip> to !($int_if) queue vip_ext
pass in quick on $int_if inet proto tcp from <cu> to any port {80 443} queue www_ext
pass in quick on $int_if inet from <cu> to any queue non_www_ext


> запускаем, смотрим трафик и понимаем, что шейпинг не работает=( какой-нибудь злющий юзер
> периодически забивает канал и класть хотел на altq. заблудился, как говорится,
> в трех соснах, а куда копать - ума не приложу.