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

Шейпер по pps в Freebsd

Добавлено: 2009-09-27 0:04:12
si__
Столкнулся с проблемой органичения флуда из сети через шлюз на freebsd. Сервер пропускает пакетов боольше, чем выдерживает маршрутизатор провайдера :( . Pipe режут только байты.. а нужно именно пакеты. Вроде под iptable есть приблуды, режущие pps, но переставлять шлюз и осваивать iptabe не очень хорошая перспектива, равно как покупка каталиста за ХХХ уе, умеющего ограничить pps.
Подскажите, пожалуйста, возможно ли это настроить на freebsd.

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 0:30:47
paradox
именно pps так и небыл рализован
хотя идеи были url

можно попробовать зарезать limit коннектов на айпишники

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 0:51:28
si__
paradox писал(а):именно pps так и небыл рализован
хотя идеи были url

можно попробовать зарезать limit коннектов на айпишники
Лимит по маске есть, но если, например, кто то будет отправлять пакеты на один айпи с частотой, как сможет его система и 100 Мбитная сеть...
Может есть какие то "извращенные" методы, как-то завернуть в netgraph?
Тогда еще вопрос, осилит ли линукс на железе вроде 3,0 ггц коре дуо pps 100-200 к, с учетом фильтраций iptable?

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 0:54:58
warzoni
si__ писал(а):Столкнулся с проблемой органичения флуда из сети через шлюз на freebsd. Сервер пропускает пакетов боольше, чем выдерживает маршрутизатор провайдера :( . Pipe режут только байты.. а нужно именно пакеты. Вроде под iptable есть приблуды, режущие pps, но переставлять шлюз и осваивать iptabe не очень хорошая перспектива, равно как покупка каталиста за ХХХ уе, умеющего ограничить pps.
Подскажите, пожалуйста, возможно ли это настроить на freebsd.

Здрасвуйте! если я не ошибся то расмотрите этот пример

http://lists.freebsd.org/pipermail/free ... 00074.html

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 1:04:55
si__
warzoni писал(а): Здрасвуйте! если я не ошибся то расмотрите этот пример

http://lists.freebsd.org/pipermail/free ... 00074.html
Совершенно верно, спасибо, подскажите, пожалуйста, куда это вставить, ip_fw2.c ... ?

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 1:14:20
warzoni
si__ писал(а):
warzoni писал(а): Здрасвуйте! если я не ошибся то расмотрите этот пример

http://lists.freebsd.org/pipermail/free ... 00074.html
Совершенно верно, спасибо, подскажите, пожалуйста, куда это вставить, ip_fw2.c ... ?
К сожелению когда я нахожу овтеты, и это заключаетца в програмирвоание либо разберателстве соурцев, то я прибегаю к с пециалистам,я хочу сам видить и надеюсь,програмисты нам расжуют, куда и как вставить *),...я не сталкивался с этой проблеммой но ваш вопрос меня насторожил и хотелось бы самому увидить,реализацию данного ограничение на уровне Ipfw :smile:

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 1:29:07
warzoni
Я вот о чём подумал а разве нету ограничение пакетов на Ip адрес видь есть же на queues

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

weight 50 pipe 102   10 sl. 1 queues (1 buckets) droptail
загоняйте в трубу и указуйте не больше 10 бакетов на айпи адрес..

тоесть pipe устанавливаете трубу и queues загоняете в пайпы и ставте ограничение на пакеты ..помойму так..

у меня просто режит по айпишникам и например я делаю юзеру 512 килабит скорасть и небольше 10 пакетов в секунду...пакеты регулирую queues

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 1:34:12
si__
Будем надеятся, программисты подскажут, по идее надо править /usr/src/sys/netinet/ip_fw2.c, но файл не маленький :smile:
предположу, что

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

 case O_PPS: {
надо добавить в

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

int
ipfw_chk(struct ip_fw_args *args)
{ ...
например, перед

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

 case O_RECV:
                                match = iface_match(m->m_pkthdr.rcvif,
                                    (ipfw_insn_if *)cmd);
                                break;
а структуру в ipfw.h
только в том же ipfw.h надо ж указать O_PPS: в enum ipfw_opcodes {

Re: Шейпер по pps в Freebsd

Добавлено: 2009-09-27 1:42:53
si__
warzoni писал(а):Я вот о чём подумал а разве нету ограничение пакетов на Ip адрес видь есть же на queues

weight 50 pipe 102 10 sl. 1 queues (1 buckets) droptail

загоняйте в трубу и указуйте не больше 10 бакетов на айпи адрес..

тоесть pipe устанавливаете трубу и queues загоняете в пайпы и ставте ограничение на пакеты ..помойму так..

у меня просто режит по айпишникам и например я делаю юзеру 512 килабит скорасть и небольше 10 пакетов в секунду...пакеты регулирую queues
buckets hash-table-size
Specifies the size of the hash table used for storing the various
queues. Default value is 64 controlled by the sysctl(8) variable
net.inet.ip.dummynet.hash_size, allowed range is 16 to 65536.

т.е, такая конструкция

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

  ipfw  pipe 11 copnfig bw 512kbits/s queue 40
 ..... 12  ....
  ipfw queue 111 config pipe 11 weigth 20 queue 40  [ buckets 10 ] [ mask src-ip oxffffffff ]
 ...              112   ......
   ipfw queue  113                                     weigth30
...................
  ipfw add 1111 queue 111 tcp from {net_max_prio} to {ip}  limit src-addr 200
 ......  1112               111                  other prio                                   50
  ipfw add 1116 queue 116 udp from {net_max_prio} to {ip}  limit src-addr 50
  ......................................
  ipfw add 1121 queue 112 tcp from {ip} to {net_max_prio} limit dst-addr 200
 ......  1122               112                  other prio                                   50
  ipfw add 1126 queue 112 udp from {ip} to {net_max_prio}   limit dst-addr 50
  ......................................
разве органичит юникастовый флуд пакетами по 25 байт? ведь их там 500 000 пролезет через 100 мбитную сеть

Re: Шейпер по pps в Freebsd

Добавлено: 2010-02-28 1:39:35
wel
В связи с проблема с новым протоколом mTp возникает проблема с надобностью ограничения pps на клиентов.
Сейчас есть:
freebSD + mpd5 + PPTP

Re: Шейпер по pps в Freebsd

Добавлено: 2010-02-28 3:13:48
FreeBSP
вариант: снимать с файера(ipfw) статистику по пакетам, вычислять PPS и динамически ставить шейпинг
реализовать можно как скриптом так и прогой/ при программной реализации достигается более высокая точность и понизится латентность системы

но вот такая мысль, если просто сужать пропускную способность, то где то надо хранить поступающие пакеты, причем их очередь будет нарастать...
или я просто не понимаю ижею шейпинга по ппс?

Re: Шейпер по pps в Freebsd

Добавлено: 2010-02-28 3:40:08
wel
FreeBSP писал(а):вариант: снимать с файера(ipfw) статистику по пакетам, вычислять PPS и динамически ставить шейпинг
реализовать можно как скриптом так и прогой/ при программной реализации достигается более высокая точность и понизится латентность системы

но вот такая мысль, если просто сужать пропускную способность, то где то надо хранить поступающие пакеты, причем их очередь будет нарастать...
или я просто не понимаю ижею шейпинга по ппс?
сейчас только не ленивый "продает" скорость хомячкам до 100Мбит/сек... - в пределе это 205 кило-pps 64байтными пакетами. Если учесть что скорость будут только расти... на один брас будет приходить до нескольких лямов-pps, может десятка лямов-pps.
А теперь самое главное - на хомячках не то что заработать, а оборудование обновить сложно, а вот "торрент-качков" среди них только увеличивается...
Чем отличаются честные юрики которые платят 50%-100% от настоящей цены честного Мбит-а, от хомячков - которые платят 0,5-5% за скорость интернета?...

Желание резать количество pps и сессий - убить оверсейлинг услуг провайдера, поднять ARPU, защитить оборудование для предоставления должного качества обслуживания...

Re: Шейпер по pps в Freebsd

Добавлено: 2010-02-28 15:34:11
wel
FreeBSP писал(а):вариант: снимать с файера(ipfw) статистику по пакетам, вычислять PPS и динамически ставить шейпинг
реализовать можно как скриптом так и прогой/ при программной реализации достигается более высокая точность и понизится латентность системы
В том то и дело что pps - это pps, и со скоростью оно может вообще не коррелироваться, pps-ов может быть много... Если ограничивать скорость pps-ы не ограничиваются

Re: Шейпер по pps в Freebsd

Добавлено: 2010-10-22 20:50:26
Inzevision
попытаюсь оживить эту тему. кто-то решил вопрос лимитирования пакетов/сек на фре?

Re: Шейпер по pps в Freebsd

Добавлено: 2010-10-23 8:01:33
Shuriks
Inzevision писал(а):попытаюсь оживить эту тему. кто-то решил вопрос лимитирования пакетов/сек на фре?
Лимитировать пока не приходилось, но пакеты считать пришлось.
Здесь уже появлялась идея считать пакеты с ipfw. Это и реализовал.
При желании, можно на основе анализа рассчитанных pps заняться уже и ограничением. Как вариант, в зависимости от значения pps можно менять значение probe для pipe.
Собственно сам скрипт, вызывается каждые 15 сек.

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

#!/usr/local/bin/bash

for ((i=1; i<=4; i++))
{
 pr[i]=$(cut -d" " -f$i prev.pps);
}

cur[1]=$(ipfw -a list | egrep ^"00001" | tr -s " " | cut -d" " -f2);
cur[2]=$(ipfw -a list | egrep ^"00002" | tr -s " " | cut -d" " -f2);
cur[3]=$(ipfw -a list | egrep ^"00011" | tr -s " " | cut -d" " -f2);
cur[4]=$(ipfw -a list | egrep ^"00012" | tr -s " " | cut -d" " -f2);

for ((i=1; i<=4; i++))
{
 pps[i]=$(echo "scale=0; (${cur[i]}-${pr[i]})/15" | bc);
}

echo $(date "+%H:%M:%S")" "${pps[1]}" "${pps[2]}" "${pps[3]}" "${pps[4]} >> $(date "+%Y%m%d").pps;
echo ${cur[1]} ${cur[2]} ${cur[3]} ${cur[4]} > prev.pps
Прошу сильно не пинать за такую реализацию, только начинаю осваивать скриптописание. Хочу уйти от bash, но пока знаний не хватает. Если есть у кого желание оптимизировать сей скрипт, буду очень благодарен :-).
З.Ы. Использование bc осталось с тех пор, когда считал pps с точностью до 0,1

Re: Шейпер по pps в Freebsd

Добавлено: 2012-07-23 11:07:26
napTu
проходил мимо, но...

pps вроде так:

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

netstat -a 1

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

netstat -I em0 1
ограничить так

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

count udp from table(4) to any in via em0 limit src-addr 15