Страница 1 из 1

Режим скорость

Добавлено: 2014-07-10 0:24:08
maestro0728
Доброго времени суток.
Помогите разобраться.
Эта конструкция в общем и целом эта конфигурация Firewall должна резать скорость для каждого из IP из сетки 192.168.0.0/24 до 4 Mbit/s, но неправильно режет - примерно в 2 раза меньше (менял скорости, на 10 мб режет до 5 +/-)
Правила Firewall

Код: Выделить всё

# cat /etc/ipfw.rules
!/bin/sh

FwCMD="ipfw -q"
NetIn="192.168.0.0"
NetMask="24"
IpIn="8.8.8.8"
IpOut="192.168.0.1"

# Сбрасываем ранее установленные правила:
${FwCMD} -f flush
# сбрасываем все pipe
${FwCMD} -f pipe flush
# сбрасываем очереди
${FwCMD} -f queue flush

# DUMMYNET
# учтите - чтобы пакеты не выпадали на трубе из файрволла (типа,
# как на разрешающем правиле) надо поставить переменную sysctl
# net.inet.ip.fw.one_pass в 0 (по дефолту - 1) и внести это в
# файл /etc/sysctl.conf - иначе при перезагрузке потеряется
${FwCMD} add pipe 1 ip from ${IpOut} to ${NetIn}/${NetMask}
${FwCMD} pipe 1 config bw 100Mbit/s
${FwCMD} add pipe 2 ip from ${IpIn} to ${NetIn}/${NetMask}
${FwCMD} pipe 2 config bw 100Mbit/s
# `спецтруба` для мелкиз пакетов типа ack - ибо если они теряются
# то повторные пакеты будут большего размера
${FwCMD} add pipe 3 ip from any to any tcpflags ack iplen 0-128
${FwCMD} pipe 3 config bw 100Mbit/s
# Пропускаем следующие трубы - чтобы мелкие пакеты не лимитировались
# пропускать надо до первого нормального (после труб) правила.
# я ему присвоил жёсткий номер - файрволл раздаёт номера с последнего правила
# (если номер жёстко не задан) с интервалом определяемым переменной sysctl
# net.inet.ip.fw.autoinc_step - по дефолту - 100
${FwCMD} add skipto 39999 ip from any to any tcpflags ack iplen 0-128

# запускаем счётчик
i=4
# цикл по $i
while [ $i != 252 ]
do
# добавляем трубу для IP адреса
${FwCMD} add pipe $i ip from not ${NetIn}/${NetMask} to 192.168.0.${i}
# проверяем - часом не мой ли это IP
if [ $i -eq 13 -o $i -eq 22 ]
then
# мой инет :)))
${FwCMD} pipe $i config bw 100Mbit/s
else
# не мой IP - режем скорость
${FwCMD} pipe $i config bw 2000000bit/s
fi
# увеличиваем $i на единичку
i=$(($i+1))
done

# проверяем временные правила (перед этим правилом возврщаются мелкие
# пакеты в файрволл) :
${FwCMD} add 40000 check-state

# разрешаем всё по интерфейсу lo0 (петля)
${FwCMD} add allow ip from any to any via lo0

Re: Режим скорость

Добавлено: 2014-07-27 19:40:04
Alex Keda
в одну трубу все потоки пихаете чтоле?
тогда всё номрально - два потока по 5 будет как раз 10 =)

Re: Режим скорость

Добавлено: 2014-07-27 23:00:38
rmn
во-первых, чтобы пайпы динамически создавались для каждого юзера, надо использовать в pipe config маски src-ip и dst-ip.

во-вторых, надо или через skipto раскидывать правила всех интерфейсов по разным блокам или явно указывать в add pipe направление пакета (in recv для локальных интерфейсов, out xmit для внешних), иначе пакеты будут проходить по пайпам два раза, соответственно, с двойной задержкой.