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

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
maestro0728
ефрейтор
Сообщения: 57
Зарегистрирован: 2012-01-10 20:16:03

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

Непрочитанное сообщение maestro0728 » 2012-02-06 11:16:45

Подскажите пожалуйста не могу разобраться почему скорость не режет по второму 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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Shuba » 2012-02-06 11:44:36

Конечто будет 4 мегобита, т.к. ты в обоих случаях используешь именно их. Выставь на 1-ую сетевуху пайпы с номерами 1 и 2, а на вторую 3 и 4 к примеру, тогда они будут разные
Сила ночи, сила дня - одинакова фигня!

maestro0728
ефрейтор
Сообщения: 57
Зарегистрирован: 2012-01-10 20:16:03

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

Непрочитанное сообщение maestro0728 » 2012-02-06 21:27:51

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

Covax
мл. сержант
Сообщения: 131
Зарегистрирован: 2008-04-27 23:54:31
Откуда: Витебск, Беларусь
Контактная информация:

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

Непрочитанное сообщение Covax » 2012-02-07 1:08:41

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

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

maestro0728
ефрейтор
Сообщения: 57
Зарегистрирован: 2012-01-10 20:16:03

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

Непрочитанное сообщение maestro0728 » 2012-02-07 12:17:40

Всё равно берёт самую большую скорость для любого указанного 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

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Shuba » 2012-02-07 15:55:17

В правилах чёрт ногу сломит. На одной сетевухе 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.
Вот и получается, что трафик если и будет шейпиться вообще, то только по первой секции.
Вообщем нарисуй схему, что, откуда, куда и через што должно идти и с какими скоростями
Сила ночи, сила дня - одинакова фигня!

maestro0728
ефрейтор
Сообщения: 57
Зарегистрирован: 2012-01-10 20:16:03

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

Непрочитанное сообщение maestro0728 » 2012-02-09 22:25:32

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

${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

Аватара пользователя
Shuba
ст. сержант
Сообщения: 365
Зарегистрирован: 2008-03-25 10:58:21
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Shuba » 2012-02-10 15:45:02

Блин, ну почитай ты доки про прохождению трафика во фряхе вообще и в 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
Сила ночи, сила дня - одинакова фигня!

Covax
мл. сержант
Сообщения: 131
Зарегистрирован: 2008-04-27 23:54:31
Откуда: Витебск, Беларусь
Контактная информация:

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

Непрочитанное сообщение Covax » 2012-02-14 9:13:53

в ipfw срабатывают по первому совпадению, т.е. у тебя всё идёт через 1000 и 1010, ниодного пакета до 1020 и 1030 не дойдёт. Всё это можно просмотреть с помощью ipfw show
Не факт. Всё зависит от переменной net.inet.ip.fw.one_pass.

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2012-02-14 11:21:21

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

#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
на интерфейсе где живут оба компа! Так что данная конструкция работать не будет!!!
Или указывайте явно адреса компов, или создайте таблицы и в них добавте нужные адреса и потом на отдельные таблицы отдельные очереди создавайте.

maestro0728
ефрейтор
Сообщения: 57
Зарегистрирован: 2012-01-10 20:16:03

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

Непрочитанное сообщение maestro0728 » 2012-02-14 22:02:25

Я буду вам очень признателен. Можно с этого момента по подробнее.

harmless
лейтенант
Сообщения: 715
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2012-02-15 0:43:37

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