The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Подробнее об использовании pipe-s в IPFW (ipfw limit pipe queue traffic shaper limit freebsd)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: ipfw, limit, pipe, queue, traffic, shaper, limit, freebsd,  (найти похожие документы)
From: napTu3aH <napTu @ front . ru> Newsgroups: email Date: Mon, 20 May 2005 14:31:37 +0000 (UTC) Subject: Подробнее об использовании pipe-s в IPFW В данной статье хочу поделиться собственными наработками в части ограничения и распределения трафика для клиентов с помощью pipes в IPFW. Существующая информация дает поверхностное описание и не описывает всех тонкостей работы с pipes. В своём изучении pipes я основывался на известной статье by Kuzmich ( http://www.hub.ru/modules.php?name=Sections&sop=viewarticle&artid=24&page=4 ), которая может дать толчек для начальных знаний, но оставляет при этом множество вопросов. Здесь я приведу пример настроек в моей сети и опишу как это работает. Когда настраиваются правила для IPFW, то перед запуском скрипта с новыми правилами обычно производится очистка от старого набора при помощи команды ipfw -f flush как выяснилось, тоже самое необходимо делать и для pipes, т.е. ipfw -f pipe flush - для очистки всех каналов. Подобным образом можно применять команду ipfw -f queue flush Итак, перед тем как описывать каналы и очереди, нужно представить себе как это выглядит. Я разобрался в этих понятиях только после того как нарисовал на бумаге следующую конструкцию: канал pipe с параметрами: queue Q - размер очереди (отброс не поместившихся в очередь пакетов) bw B - скорость выхода пакетов в [K|M]bit/s delay D - дополнительная задержка каждого пакета на D ms _____________________________________________ < очередь queue 1 описывается параметрами: queue Q - размер очереди (отброс не поместившихся в очередь пакетов) weight 50 - весовой коэффициент от 1 до 100 соответствует приоритету очереди | пакет1 | пакет2|пакет3|...пакет Q| _____________________________________________ < очередь queue 2 weight 40 | пакет1 | пакет2|пакет3|...пакет Q| _____________________________________________ > очередь queue 3 weight 30 | пакет1 | пакет2|пакет3|...пакет Q| _____________________________________________ > очередь queue 4 weight 20 | пакет1 | пакет2|пакет3|...пакет Q| _____________________________________________ В правилах эта конструкция описыватся следующим образом: ipfw pipe 1 config bw 100Kbit/s queue 20 ipfw queue 1 config pipe 1 weight 50 queue 20 ipfw queue 2 config pipe 1 weight 40 queue 20 ipfw queue 3 config pipe 1 weight 30 queue 20 ipfw queue 4 config pipe 1 weight 20 queue 20 "queue 20" приведено для примера и говорит о том что очередь имеет размер 20 пакетов { Место в скрипте, где описывается pipe не имеет значения. В множестве примеров я видел это описание после обьявления правила для прохода пакетов через pipe, однако сам описываю pipe в начале скрипта. } Но вернемся к приведенному выше рисунку нашей pipe. --------- Из этого примера следует, что для работы группы пользователей по ограниченному каналу с равными или разными приоритетами, необходимо пакеты каждого отдельного пользователя ставить в отдельную очередь. Тогда пакеты будут выходить из pipe в соответствии с приоритетами очередей, в которых они находятся. --------- Это и есть основная мысль, которая описывает разделение пакетов в pipe. Теперь рассмотрим реализацию этого метода на практике. Сперва задаем pipe ipfw pipe 1 config bw 80Kbit/s queue 20 Если скорость pipe соответствует пропускной способности канала, то установка правильного значения имеет большое влияние на корректную работу системы разделения трафика. К примеру, в моей сети установлен модем Sirius с выделенным каналом 115 Кбит/с, однако для правильной работы pipe я устанавливаю 80Кбит/с, т.к. это примерно соответствует реальному значению скорости в канале. При установке значения скорости большего, чем может обеспечить канал, вся система разделения перестаёт работать. Это можно показать на следующем примере. Пусть в сети через один канал работают два пользователя через очереди с равными приоритетами. Реальная пропускная способность канала 80Кбит/с, но мы устанавливаем pipe 110Кбит/с. Оба пользователя непрерывно качают примерно одинаковый поток данных. Один из них начал качать раньше. Когда появился второй, то система начала ограничивать поток для первого до 110/2=55 Кбит/с. Считая что второму также будет отведено 55Кбит/с, однако из-за того что реальная пропускная способность канала 80Кбит/с, то второму пользователю будет предоставлено всего 80-55=25Кбит/с. Кроме того возможно система будет считать, что второй пользователь не использует выделенный ему канал и давать еще больший приоритет первому, чтобы довести общий поток до 110Кбит/с. После создания pipe нам необходимо создать очереди queue. Если всем пользователям необходимо равномерно распределять поток, то создавать вручную количество очередей соответствующее количеству пользователей не нужно. Мы создаем всего одну очередь ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff но приписываем параметр mask, в котором указываем что для каждого отдельного destination адреса будет создаваться своя очередь с такими же параметрами, как у этой. { Здесь я не согласен с примерами приведенными у Кузмича, где маска адреса установлена в 0x00000000. При такой маске не происходит разделения на отдельные очереди и все пакеты на любые destination адреса заносятся в одну единственную очередь, из которой они сходят в таком же порядке в котором они туда попали. При этом не происходит никакого реального разграничения по приоритетам или равномерного разделения. } Реально работающую pipe с очередями можно просмотреть командой ipfw pipe show Эта команда практически нигде не описана, но очень сильно помогает в настройке работы pipe и в понимании работы системы в целом. Параметр mask можно установить в all. Казалось бы - это то что нужно и каждый адрес будет выделен в отдельную queue, но нет. mask all создает отдельные очереди не только для адресов, но еще и для протоколов. Кроме того разграничиваются как входящие так и исходящие адреса. В результате получается полный хаос - создается море очередей, где трафик делится по интернет адресам, протоколам и месным адресам. Для себя я нашел следующее решение. Создаем две очереди для входящего и исходящего трафика ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff ipfw queue 11 config pipe 1 weight 50 queue 20 mask src-addr 0xffffffff Далее запускаем в эти очереди трафик ipfw add queue 1 ip from any to 192.168.0.0/24 ipfw add queue 11 ip from 192.168.0.0/24 to any Таким образом очередь 1 будет являться образцом для создания очередей с трафиком идущим на каждый отдельный ip нашей сети, а очередь 11 - соответственно примером для исходящего трафика с каждого нашего ip. Эти четыре записи будут соответствовать тому как если бы мы создали количество очередей соответствующее количеству IP адресов в нашей сети и создали бы такое же количество правил для прохождения трафика и разделили бы каждую запись на входящий и исходящий трафик. Если Вам необходимо выделить еще несколько разных приоритетов, для сильно вредных или сильно важных пользователей, то это можно сделать так: #нормальным ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff ipfw queue 11 config pipe 1 weight 50 queue 20 mask src-addr 0xffffffff #вредным ipfw queue 2 config pipe 1 weight 10 queue 20 mask dst-addr 0xffffffff ipfw queue 21 config pipe 1 weight 10 queue 20 mask src-addr 0xffffffff #важным ipfw queue 3 config pipe 1 weight 80 queue 20 mask dst-addr 0xffffffff ipfw queue 31 config pipe 1 weight 80 queue 20 mask src-addr 0xffffffff #важным ipfw add queue 3 ip from any to 192.168.0.233 ipfw add queue 31 ip from 192.168.0.233 to any #вредным ipfw add queue 2 ip from any to 192.168.0.154 ipfw add queue 21 ip from 192.168.0.154 to any ipfw add queue 2 ip from any to 192.168.0.102 ipfw add queue 21 ip from 192.168.0.102 to any #всем остальным ipfw add queue 1 ip from any to 192.168.0.0/24 ipfw add queue 11 ip from 192.168.0.0/24 to any Вот что мы получим в итоге. Например работают три пользователя 192.168.0.1, 2, 3 Наша pipe будет выглядеть следующим образом: pipe 1 > очередь queue 1 для трафика с любого интернет адреса на 192.168.0.1 _____________________________________________________________ > очередь queue 1 для трафика с любого интернет адреса на 192.168.0.2 _____________________________________________________________ > очередь queue 1 для трафика с любого интернет адреса на 192.168.0.3 ____________________________________________________________________ ____________________________________________________________________ < очередь queue 11 для трафика с адреса 192.168.0.1 на любой адрес интернет _____________________________________________________________________ < очередь queue 11 для трафика с адреса 192.168.0.2 на любой адрес интернет _____________________________________________________________________ < очередь queue 11 для трафика с адреса 192.168.0.3 на любой адрес интернет Итак, запускаем скрипт, исправляем ошибки и смотрим что получилось ipfw pipe show © napTu 3aH < napTu @ front . ru > 19.05.2005

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, adsh, 02:51, 21/05/2005 [ответить] [смотреть все]
  • +/
    Всё хорошо, только лучше ещё использовать GRED - будут меньше потери и скорость не будет прыгать туда / сюда. Ну и размеры очередей пакетов подобрать.
     
     
  • 2.2, dmitry, 13:00, 23/05/2005 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    как правильно GRED и размер очереди подобрать каким алгоритмом руководствоватьс... весь текст скрыт [показать] [показать ветку]
     
  • 2.4, waso, 09:21, 24/05/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А можно с этого места поподробнее ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.31, TigraS, 19:15, 10/02/2010 [^] [ответить] [смотреть все]  
  • +/
    Может кому пригодится про red и Gred http freebsd-r16 narod ru freebsd shaper ... весь текст скрыт [показать]
     
  • 1.3, napTu, 02:03, 24/05/2005 [ответить] [смотреть все]  
  • +/
    From Александр Subject Re Подробнее об использовании pipe-s в IPFW Возможно я... весь текст скрыт [показать]
     
     
  • 2.5, napTu, 14:52, 25/05/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Всё хорошо и я согласен с твоими рассуждениями о разбивке по приоритетам очереде... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, napTu, 20:45, 27/05/2005 [ответить] [смотреть все]  
  • +/
    а еще я сделал вот так maska 0xffffffff ipfw pipe 1 config bw 80Kbit s que... весь текст скрыт [показать]
     
     
  • 2.7, gara, 15:53, 17/06/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Кстати на основе этих правил очень хорошо организовывается Анлим делаем 3 оче... весь текст скрыт [показать] [показать ветку]
     
  • 1.8, Grayich, 00:21, 08/08/2005 [ответить] [смотреть все]  
  • +/
    почему pipe создается только один ?
    ведь сириус-128 позволяет одновременно как отсылать 115кбит (теоритически, практически около 96кбит) так и принимать столько-же...

     
  • 1.9, Михаил, 01:59, 04/09/2005 [ответить] [смотреть все]  
  • +/
    а если нужно просто зделать приоретизацию трафика без ограничения по скорости то как быть?
     
     
  • 2.10, Banan, 01:14, 17/09/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Для себя я нашел следующее решение Создаем две очереди для входящего и исходящ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.18, Maks, 12:37, 18/02/2006 [^] [ответить] [смотреть все]  
  • +/
    У меня тоже заработало только с dst-ip и src-ip Почему не работает с dst-addr и... весь текст скрыт [показать]
     
  • 3.28, Camb, 14:36, 22/07/2009 [^] [ответить] [смотреть все]  
  • +/
    Часик потратил на вычисление длины очереди, но работает классно Мне ндравится ... весь текст скрыт [показать]
     
  • 1.11, snoop, 07:02, 25/10/2005 [ответить] [смотреть все]  
  • +/
    Вот интересно...а как проверить работают-ли правила?
    на ввод комманды ipfw pipe show ответ вот какой
    00001: 128.000 Kbit/s    0 ms   25 sl. 0 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
    ...оно и понятно...а где очереди или еще что-то... не пойму....
     
     
  • 2.12, Grayich, 11:43, 25/10/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    пакеты непоподают в шейпер, или канал очередь заданы неправильно, например неве... весь текст скрыт [показать] [показать ветку]
     
  • 1.13, snoop, 14:58, 25/10/2005 [ответить] [смотреть все]  
  • +/
    ну конфиг у меня вот какой
    у меня 2-е подсети
    192.168.20.0/24  моя
    192.168.2.0/24   арендаторы
    хочу отдать им 30% а себе 70%
    делаю вот что...
    определяю общий pipe...
    ipfw pipe 1 config bw 128Kbit/s queue 20
    далее создаю 4-е очереди =
    ipfw queue 3 config pipe 1 weight 70 queue 25 mask dst-addr 255.255.255.0                                                  
    ipfw queue 31 config pipe 1 weight 70 queue 25 mask src-addr 255.255.255.0
    ipfw queue 11 config pipe 1 weight 30 queue 25 mask src-addr 255.255.255.0                                                            
    далее создаю очереди для каждой подсети....                                    
    ipfw add queue 3 ip from 192.168.20.0/24 to any
    ipfw add queue 31 ip from 192.168.20.0/24 to any #          
    ipfw add queue 11 ip from any to 192.168.2.0/24
     
     
  • 2.14, Grayich, 15:13, 25/10/2005 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    ipfw queue 3 config pipe 1 weight 70 queue 25 mask src-ip 0xffffffff ipfw queue ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.15, snoop, 07:04, 26/10/2005 [^] [ответить] [смотреть все]  
  • +/
    когда так прописал, ipfw s возвращает 06200 141 11082 queue 3 ip from 192 168... весь текст скрыт [показать]
     
     
  • 4.16, Grayich, 12:21, 26/10/2005 [^] [ответить] [смотреть все]  
  • +/
    это что ... весь текст скрыт [показать]
     
  • 4.17, cj, 11:08, 27/01/2006 [^] [ответить] [смотреть все]  
  • +/
    а ты попробуй пострадать и 06200 141 11082 queue 3 ip from 192 168 20 0 24 t... весь текст скрыт [показать]
     
  • 1.19, steel, 12:14, 28/09/2007 [ответить] [смотреть все]  
  • +/
    Почему в 6.1 , ipfw не понимает src-addr, dst-addr, они эквивалентны src-ip, dst-ip ?
     
     
  • 2.20, grayich, 14:13, 28/09/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >Почему в 6.1 , ipfw не понимает src-addr, dst-addr, они эквивалентны src-ip,
    >dst-ip ?

    да

     
  • 1.21, steel, 14:53, 28/09/2007 [ответить] [смотреть все]  
  • +/
    Еще вопрос, в каком месте должны находится правила PIPE ? До основных правил или после? Например я каким-то юзерам разрешаю доступ, каким-то запрещаю и  т.п. PIPE правило должно находится перед всем этим?
     
     
  • 2.22, grayich, 14:59, 28/09/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    описания queue и pipe в любом месте, самиже добавления ipfw add queue или ipfw add pipe в зависимости от логики правил, обычно для исходящего трафика до NAT, а для входящего после NAT.
    хотя резать входящий обычно неимеет смысла.
     
     
  • 3.23, vadislaus, 17:57, 25/10/2007 [^] [ответить] [смотреть все]  
  • +/
    А как сделать шейп на каждый IP в сети. Например:
    имеются сети 192.168.0.х, 192.168.1.x. Надо каждому IP из одной сети дать шейп на 128 Кбит, из другой - 256 Кбит. Или только прописав пайп на каждый IP?

    С уважением Владислав

     
     
  • 4.24, grayich, 01:11, 26/10/2007 [^] [ответить] [смотреть все]  
  • +/
    в статье об этом написано, перечитай
     
  • 1.25, devchaos, 18:24, 27/03/2008 [ответить] [смотреть все]  
  • +/
    Разделение полосы 10 мегабит на всех

    ipfw pipe 3 config bw 10Mbit/s
    ipfw queue 3 config pipe 3 weight 50 mask dst-ip 0xffffffff
    ipfw queue 4 config pipe 3 weight 50 mask src-ip 0xffffffff
    ipfw add queue 3 ip from any to 192.168.0.0/24
    ipfw add queue 4 ip from 192.168.0.0/24 to any
    Это для асиметричного линка 10 мегабит. По крайней мере если исходить из этой статьи.
    Ежели пример по каким либо причинам нерабочий, пожалуйста, подправьте.

     
  • 1.26, shamil, 10:15, 03/03/2009 [ответить] [смотреть все]  
  • +/
    Правильно ли настроен firewall? Цель: дать 2Мбита для пользователей с IP из сети 172.16.200.0/24

    ipfw pipe 1 config bw 2048Kbit/s
    ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-ip 0xffffffff
    ipfw queue 11 config pipe 1 weight 50 queue 20 mask src-ip 0xffffffff
    00041  queue 11 ip from 172.16.200.0/24 to any
    00050 divert 8668 ip from any to 91.205.128.6 in via em1
    00060 divert 8668 ip from 172.16.0.0/16 to any via em1
    00061 queue 1 ip from any to 172.16.200.0/24

     
     
  • 2.27, grayich, 10:51, 03/03/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    sysctl net.inet.ip.fw.one_pass=0

    # типа так
    ipfw pipe 1 config bw 2048Kbit/s queue 1 # out
    ipfw pipe 2 config bw 2048Kbit/s queue 20 # in
    # если 2 мегабита на in и out общий то pipe 1 есесенно использовать

    ipfw queue 1 config pipe 1 weight 50 queue 20 mask src-ip 0xffffffff # out
    ipfw queue 2 config pipe 2 weight 50 queue 20 mask dst-ip 0xffffffff # in

    ipfw add queue 1 ip from 172.16.200.0/24 to any out via em1

    ipfw nat 1 config if em1 log same_ports
    ipfw add nat 1 ip from 172.16.200.0/24 to any out via em1
    ipfw add nat 1 ip from any to any in via em1

    ipfw add queue 2 ip from any to 172.16.200.0/24 in via em1

    ipfw add allow ip from any to any


     
  • 1.29, Ramin, 17:27, 28/08/2009 [ответить] [смотреть все]  
  • +/
    ipfw queue  1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff

    не работает.
    ipfw: unrecognised option ''dst-addr''
    ошибка

     
     
  • 2.30, grayich, 23:40, 28/08/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-ip 0xffffffff
     
  • 1.32, 0bJ0riK, 12:29, 28/09/2010 [ответить] [смотреть все]  
  • +/
    Подскажите плиззз, мне надо просто выдать в своей подсети каждому айпи по 5Мб/s как это реализовать?
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor