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

Ограничение скорости по IPFW

Добавлено: 2012-02-06 11:16:45
maestro0728
Подскажите пожалуйста не могу разобраться почему скорость не режет по второму IP, а точнее режет но берёт другой параметр (bw1_out=4096Kbit/s), а должен брать для каждого указанного IP.
Помогите пожалуйста. В чём моя ошибка.

Рассмотрю другие варианты.

8192Kbit/s для 10.128.0.2

4096Kbit/s для 10.128.0.3

% ee /etc/rc.conf

firewall_enable="YES"
firewall_script="/usr/script/ipfw_load.sh"
-----------------------------------------------------------------------------------
% /usr/script/ipfw_load.sh

# FIREWALL
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"

# Main
oif="nfe0"
oif_ip="10.128.0.2"

bw_out=8192Kbit/s
bw_in=256Kbit/s

# Maks
oif1="nfe0"
oif1_ip="10.128.0.3"

bw1_out=4096Kbit/s
bw1_in=256Kbit/s

########################################################

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from any to any via $oif out
${fwcmd} add 1010 queue 2 ip from any to any via $oif in

#oif1
${fwcmd} pipe 1 config bw $bw1_out
${fwcmd} pipe 2 config bw $bw1_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1020 queue 1 ip from any to any via $oif1 out
${fwcmd} add 1030 queue 2 ip from any to any via $oif1 in

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-06 11:44:36
Shuba
Конечто будет 4 мегобита, т.к. ты в обоих случаях используешь именно их. Выставь на 1-ую сетевуху пайпы с номерами 1 и 2, а на вторую 3 и 4 к примеру, тогда они будут разные

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-06 21:27:51
maestro0728
"10.128.0.2" и "10.128.0.3" - это два разных компа. шлюз работает:
Вход интернета о одной ситевухе (vro)
Пользователь слушают на втором интерфейсе (nfe0).

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-07 1:08:41
Covax
Ошибка в том, что pipe и queue принимают значение с самого начала, до всех правил. Их расположение в конфиге ни на что не влияет.
Если посмотришь на свой конфиг, то там сначала pipe 1 присваивается значение $bw_out, а затем ему же присваивается $bw1_out.
Вот $bw1_out и будет применяться ко всем правилам.

И смысл Shuba правильно сказал, надо делать разные pipe на каждый ip.

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-07 12:17:40
maestro0728
Всё равно берёт самую большую скорость для любого указанного IP, вот мой IPFW config:

# FIREWALL
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"

ext_if="nfe0"
ext_ip="192.168.1.2"

####### MAIN #################################
oif="nfe0"
oif_ip="10.128.0.2"

bw_out=8192Kbit/s
bw_in=2048Kbit/s

####### MAKS #################################
oif1="nfe0"
oif1_ip="10.128.0.3"

bw1_out=4096Kbit/s
bw1_in=256Kbit/s

########################################################

${fwcmd} -f flush

${fwcmd} add 00001 allow all from any to any via lo0

${fwcmd} add deny all from any to me 22 via vr0
${fwcmd} add deny all from any to me 23 via vr0
${fwcmd} add deny all from any to me 80 in via vr0
${fwcmd} add deny all from any to me 8080 via vr0

${fwcmd} add allow all from any to me via nfe0
${fwcmd} add allow all from me to any via nfe0

${fwcmd} add allow all from me to any via vr0
${fwcmd} add allow all from any to me via vr0

${fwcmd} add allow all from any to any via vr0
${fwcmd} add allow all from any to any via nfe0
${fwcmd} add allow all from any to any

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from any to any via $oif out
${fwcmd} add 1010 queue 2 ip from any to any via $oif in

#oif1
${fwcmd} pipe 3 config bw $bw1_out
${fwcmd} pipe 4 config bw $bw1_in
${fwcmd} queue 3 config pipe 3 mask src-ip 0xffffffff
${fwcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 3 ip from any to any via $oif1 out
${fwcmd} add 1010 queue 4 ip from any to any via $oif1 in

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-07 15:55:17
Shuba
В правилах чёрт ногу сломит. На одной сетевухе 3 адреса (nfe0), вторая вроде как есть (vr0), но в макросах её нету. Далее

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

${fwcmd} add allow all from any to me via nfe0
${fwcmd} add allow all from me to any via nfe0

${fwcmd} add allow all from me to any via vr0
${fwcmd} add allow all from any to me via vr0
${fwcmd} add allow all from any to any via vr0
${fwcmd} add allow all from any to any via nfe0
${fwcmd} add allow all from any to any
пропустят всё и вся без всякого шейпинга
на стоках шейпинга вроде как имеются номера (но даже они одинаковые в обоих секциях), и возможно они будут задействованы, но это точно не известно.
Далее, в самом шейпинге 2 секции, в которых фигурирует одна и та же сетевуха с адресами any to any.
Вот и получается, что трафик если и будет шейпиться вообще, то только по первой секции.
Вообщем нарисуй схему, что, откуда, куда и через што должно идти и с какими скоростями

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-09 22:25:32
maestro0728

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

${fwcmd} -f flush

${fwcmd} add 00001 allow all from any to any via lo0

${fwcmd} add deny all from any to me 22 via vr0
${fwcmd} add deny all from any to me 23 via vr0
${fwcmd} add deny all from any to me 80 in via vr0
${fwcmd} add deny all from any to me 8080 via vr0

${fwcmd} add allow all from any to me via nfe0
${fwcmd} add allow all from me to any via nfe0

${fwcmd} add allow all from me to any via vr0
${fwcmd} add allow all from any to me via vr0

${fwcmd} add allow all from any to any via vr0
${fwcmd} add allow all from any to any via nfe0
${fwcmd} add allow all from any to any
Это можно вообще отключить и оставить одну строку

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

${fwcmd} add allow all from any to any
чтобы разрешить всему трафику проход.
Дело не в этом, а вот в чём не могу понять. Я все правила отрубаю оставляю только вышеуказанную строку. и всё равно скорость режется не правильно берётся самая верхняя скорость.
Я пробывал вот так даже, чтобы вам было понятно: (оставляю только ниже указанные строки)

# /usr/script/ipfw_load.sh

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

# FIREWALL
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"

ext_if="nfe0"
ext_ip="192.168.1.2"

####### MAIN #################################
oif="nfe0"
oif_ip="10.128.0.2"

bw_out=8192Kbit/s
bw_in=2048Kbit/s

####### MAKS #################################
oif1="nfe0"
oif1_ip="10.128.0.3"

bw1_out=4096Kbit/s
bw1_in=256Kbit/s

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from any to any via $oif out
${fwcmd} add 1010 queue 2 ip from any to any via $oif in

#oif1
${fwcmd} pipe 3 config bw $bw1_out
${fwcmd} pipe 4 config bw $bw1_in
${fwcmd} queue 3 config pipe 3 mask src-ip 0xffffffff
${fwcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff
${fwcmd} add 1020 queue 3 ip from any to any via $oif1 out
${fwcmd} add 1030 queue 4 ip from any to any via $oif1 in

Всё равно скорость не режет по IP берёт из первого параметра:

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

bw_out=8192Kbit/s
bw_in=2048Kbit/s

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-10 15:45:02
Shuba
Блин, ну почитай ты доки про прохождению трафика во фряхе вообще и в ipfw в частности. Вот тебе ссыль.
Ну и конкретно по твоим правилам:
Получаем такое:

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

${fwcmd} add 1000 queue 1 ip from any to any via nfe0 out
${fwcmd} add 1010 queue 2 ip from any to any via nfe0 in
${fwcmd} add 1020 queue 3 ip from any to any via nfe0 out
${fwcmd} add 1030 queue 4 ip from any to any via nfe0 in
Видно, что 1000 и 1020 практически одинаковые, также как и 1010 с 1030, отличается только номера в queue. Правила в ipfw срабатывают по первому совпадению, т.е. у тебя всё идёт через 1000 и 1010, ниодного пакета до 1020 и 1030 не дойдёт. Всё это можно просмотреть с помощью ipfw show

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-14 9:13:53
Covax
в ipfw срабатывают по первому совпадению, т.е. у тебя всё идёт через 1000 и 1010, ниодного пакета до 1020 и 1030 не дойдёт. Всё это можно просмотреть с помощью ipfw show
Не факт. Всё зависит от переменной net.inet.ip.fw.one_pass.

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-14 11:21:21
harmless

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

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from any to any via $oif out
${fwcmd} add 1010 queue 2 ip from any to any via $oif in

#oif1
${fwcmd} pipe 3 config bw $bw1_out
${fwcmd} pipe 4 config bw $bw1_in
${fwcmd} queue 3 config pipe 3 mask src-ip 0xffffffff
${fwcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 3 ip from any to any via $oif1 out
${fwcmd} add 1010 queue 4 ip from any to any via $oif1 in
У Вас в правилах нигде не фигурируют IP-адреса, на которые Вы хотите ограничить скорость!
Вы делаете комбинацию

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

 ip from any to any via
на интерфейсе где живут оба компа! Так что данная конструкция работать не будет!!!
Или указывайте явно адреса компов, или создайте таблицы и в них добавте нужные адреса и потом на отдельные таблицы отдельные очереди создавайте.

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-14 22:02:25
maestro0728
Я буду вам очень признателен. Можно с этого момента по подробнее.

Re: Ограничение скорости по IPFW

Добавлено: 2012-02-15 0:43:37
harmless
maestro0728 писал(а):Я буду вам очень признателен. Можно с этого момента по подробнее.
Пожалуйста!

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

# FIREWALL
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"

ext_if="nfe0"
ext_ip="192.168.1.2"

####### MAIN #################################
oif="nfe0"
oif_ip="10.128.0.2"

bw_out=8192Kbit/s
bw_in=2048Kbit/s

####### MAKS #################################
oif1="nfe0"
oif1_ip="10.128.0.3"

bw1_out=4096Kbit/s
bw1_in=256Kbit/s

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from ${oif_ip} to any out
${fwcmd} add 1010 queue 2 ip from any to ${oif_ip} in

#oif1
${fwcmd} pipe 3 config bw $bw1_out
${fwcmd} pipe 4 config bw $bw1_in
${fwcmd} queue 3 config pipe 3 mask src-ip 0xffffffff
${fwcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff
${fwcmd} add 1020 queue 3 ip from ${oif1_ip} to any out
${fwcmd} add 1030 queue 4 ip from any to ${oif1_ip} in
Это вариант годиться только для малого кол-ва клиентов.

Для большего кол-ва клиентов лучше использовать таблицы

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

# FIREWALL
#!/bin/sh

fwcmd="/sbin/ipfw -q"
ngctl="/usr/sbin/ngctl"

ext_if="nfe0"
ext_ip="192.168.1.2"

####### MAIN #################################
oif="nfe0"
oif_ip="10.128.0.2"

bw_out=8192Kbit/s
bw_in=2048Kbit/s

####### MAKS #################################
oif1="nfe0"
oif1_ip="10.128.0.3"

bw1_out=4096Kbit/s
bw1_in=256Kbit/s

${fwcmd} table 1 add $oif_ip
${fwcmd} table 1 add 10.128.0.4/32
${fwcmd} table 2 add $oif1_ip
${fwcmd} table 2 add 10.128.0.5/32
${fwcmd} table 2 add 10.128.1.0/24

#oif
${fwcmd} pipe 1 config bw $bw_out
${fwcmd} pipe 2 config bw $bw_in
${fwcmd} queue 1 config pipe 1 mask src-ip 0xffffffff
${fwcmd} queue 2 config pipe 2 mask dst-ip 0xffffffff
${fwcmd} add 1000 queue 1 ip from table\(1\) to any out
${fwcmd} add 1010 queue 2 ip from any to table\(1\) in

#oif1
${fwcmd} pipe 3 config bw $bw1_out
${fwcmd} pipe 4 config bw $bw1_in
${fwcmd} queue 3 config pipe 3 mask src-ip 0xffffffff
${fwcmd} queue 4 config pipe 4 mask dst-ip 0xffffffff
${fwcmd} add 1020 queue 3 ip from table\(2\) to any out
${fwcmd} add 1030 queue 4 ip from any to table\(2\) in