Объясните простой технический момент.
есть цель порезать трафик на вход/выход с интерфейса. Наиболее подходит вариант cbq/hfsc. но есть тонкость - как и под Linux ограничение нормально действует только на out трафик.
Ну вот банальный пример:
канал 10 Мбит/с. pf+altq+cbq. что бы особо не заморачиваться - cbq.altq on $ext_if cbq bandwidth 10Mb queue { main, web, icmp }
queue main bandwidth 10% cbq(default red)
queue web bandwidth 30% cbq(red)
queue icmp bandwidth 10% cbq
# WWW in for apache
pass in on $ext_if proto tcp to $ext_ip port $www keep state queue web
# WWW out
pass out on $ext_if proto tcp from $ext_ip to any port $www keep state queue web
в независимости от того в какую очередь запихнут трафик - качает на полном канале(borrow нет). и обратите внимание - основная очередь, по которой проверяется работа имее 30%. сумма составляет 50%. 50 ещё гуляют. может это и не правильно? просто делал для дебагинга и до 100 сумму очередей поднимать не хотел.
режем саму очередь до мегабита
altq on $ext_if cbq bandwidth 1Mb queue { main, web, icmp }
queue main bandwidth 10% cbq(default red)
queue web bandwidth 30% cbq(red)
queue icmp bandwidth 10% cbq
Качать начинает в половину - 5-4,5Мбит/с
Качаю банальным fetch с самого тазика. никаких натов и т.д.
поднимаю ipfw
Из вредности зажимаю до 100 Кбит
ipfw pipe 1 config bw 100Kbit/s
ipfw add pipe ip from any to any
мои "честные" (с небольшими закидонами вверх) 100 Кбит
даю 1 Мбит и т.д.
ipfw pipe 1 config bw 1Mbit/s
И опять таки честно всё получаю и на вход и на выход.
Если бы не потребность в динамическом шейпинге я бы забил и всё на pipe и построил, но мне нужно вся прелесть altq с его borrow, upperlimit и т.д.
Собственно вопросов несколько:
1) почему себя так непонятно ведёт altq+pf. Бог с ним, что скорость только на отдачу нормально регулируется. но ведь на скачку при указании лимита меньше полосы пропускания в разы он выдаёт скорость выше лимита и ниже полосы. Это глюк или фича? а в чём прикол? Покрайней мере в разрекламированной книге The Book of PF ни в мане не нашёл объяснение такого поведения. Altq как бы режет скорость, но не в рамках определённой очереди или заданной полосы пропускания.
2) можете посоветовать альтернативу кроме варианта поднятия ещё одной очереди на ещё одном интерфейсе и там дополнительно шейпить трафик? не хочется плодить очереди в простеньком то конфиге. дополнительно подключать ipfw для задания границы сверху через pipe - тоже.
3) под freebsd, как в openbsd, что-то подобное systat с отображением очередей pf есть?
PS:
fbsd82# uname -rsm
FreeBSD 8.3-PRERELEASE amd64
fbsd82#