Собираем ядро с опциями:
options DUMMYNET
options IPFIREWALLОграничиваем трафик для сеток 1.1.1.0/24 и 3.3.3.0/24 на 14000 кбит/с:
ipfw add pipe 50 tcp from any to 1.1.1.0/24 via fxp0
ipfw add pipe 50 tcp from any to 3.3.3.0/24 via fxp0
ipfw pipe 50 config bw 14Kbit/sДля внесения задержки на N ms, используйте delay N после config.
Для установки веса данного пайпа по отношению к другим пайпам используйте weight вес.
Для WF2Q ограничения трафика используйте ipfw queue
(queue N config [pipe pipe_nr] [weight weight] [queue {slots | size})URL:
Обсуждается: http://www.opennet.me/tips/info/226.shtml
все вышеперечисленное работает как правило:
полоса пропускания для всех IP, т.е. для всех пользователей из сетки 1.1.1.0/24
суммарно скорость
прокачки 14000 кбит/с.
Если возникает необходимость организовать "канал" для каждого пользователя из нанной сети то пишемipfw pipe 10 config mask dst-ip 0x000000ff bw 1024bit/s queue
ipfw add pipe 10 tcp from any to 1.1.1.0/24 via fxp0Теперь каждый хост из сети 1.1.1.0/24 имеет свой канал 1024bit/s
А вот как срастить эти два правил (для всех 5Mbit/s но не более
512Kbit/s для каждого) пока не знаю.
В /etc/sysctl.conf пишем net.inet.ip.fw.one_pass=0 (или sysctl -w net.inet.ip.fw.one_pass=0). Ну и соответсвенно создаем две pipe - на сеть потом на хосты.
Могу ошибиться но вроде так.
Именно так.
net.inet.ip.fw.one_pass=0
Сначала общий пайп на 5Mbit/s
Потом пайп на 512Kbit/s для каждогоИМХО предложенное решение создает каналы указанной пропускной способности Но только для ВХОДЯЩЕГО траффика. Для шейпинга и исходящего повторить то-же только поменять from и to местами
а если имеется шлюз в инет, но машины при этом все с реальными ип?подскажите плиз как сделать так, чтобы весь трафик клиентам распределялся пайпами по 512Кбит?..все что тут написано у меня почемуто не проходит?..и эти правила должны быть добавлены в самый конец?
А можно написать пример того как создавать общий pipe , а потом в него запихивать другие pipe ??
Вот накатал тут скрипт, как думаете будет реально работать#!/bin/sh
ipfw='/sbin/ipfw -q'${ipfw} disable one_pass
${ipfw} flush
${ipfw} pipe flush
${ipfw} add divert natd all from any to any via lnc0# Pipe for all users
#${ipfw} pipe 10 config
#${ipfw} pipe 20 config${ipfw} queue 10 config pipe 10 weight 50 mask src-ip 0xffffffff
${ipfw} queue 20 config pipe 20 weight 50 mask dst-ip 0xffffffff${ipfw} add queue 10 all from 192.168.0.0/24 to any out via lnc0
${ipfw} add queue 20 all from any to 192.168.0.0/24 in via lnc0# Pipe for each user
${ipfw} pipe 30 config bw 128Kbit/s mask src-ip 0xffffffff
${ipfw} pipe 40 config bw 128Kbit/s mask dst-ip 0xffffffff${ipfw} add pipe 30 all from 192.168.0.0/24 to any out via lnc0
${ipfw} add pipe 40 all from any to 192.168.0.0/24 in via lnc0# Permissions
${ipfw} add allow all from 192.168.0.0/24 to any out via lnc0
${ipfw} add allow all from any to 192.168.0.0/24 in via lnc0
Вот накатал тут скрипт, как думаете будет реально работать#!/bin/sh
ipfw='/sbin/ipfw -q'${ipfw} disable one_pass
${ipfw} flush
${ipfw} pipe flush
${ipfw} add divert natd all from any to any via lnc0# Pipe for all users
#${ipfw} pipe 10 config
#${ipfw} pipe 20 config${ipfw} queue 10 config pipe 10 weight 50 mask src-ip 0xffffffff
${ipfw} queue 20 config pipe 20 weight 50 mask dst-ip 0xffffffff${ipfw} add queue 10 all from 192.168.0.0/24 to any out via lnc0
${ipfw} add queue 20 all from any to 192.168.0.0/24 in via lnc0# Pipe for each user
${ipfw} pipe 30 config bw 128Kbit/s mask src-ip 0xffffffff
${ipfw} pipe 40 config bw 128Kbit/s mask dst-ip 0xffffffff${ipfw} add pipe 30 all from 192.168.0.0/24 to any out via lnc0
${ipfw} add pipe 40 all from any to 192.168.0.0/24 in via lnc0# Permissions
${ipfw} add allow all from 192.168.0.0/24 to any out via lnc0
${ipfw} add allow all from any to 192.168.0.0/24 in via lnc0
Как разделить общий канал при условии:
в общем канале есть пользователи
1я очередь - пользователи с высоким приоритетом,
2я очередь - пользователи с низким приоритетом
3я очередь - все что осталось, делят между собой пользователи с выделеной полосой 128, 256к и получали свою полосу в случае если общая полоса не занята пользователями с высокими приоритетами. 1 и 2
Сделал так как написано выше:
# Pipe for each user${ipfw} pipe 30 config bw 128Kbit/s mask src-ip 0xffffffff
${ipfw} pipe 40 config bw 128Kbit/s mask dst-ip 0xffffffff${ipfw} add pipe 30 all from 192.168.0.0/24 to any out via lnc0
${ipfw} add pipe 40 all from any to 192.168.0.0/24 in via lnc0Скорость входящая ограничивается идеально. Но исходящая не режется. В чем подвох?