Droid Posted May 11, 2008 Posted May 11, 2008 Подскажите, чем лучше шейпить соединения на 64 - 512 Кб\сек. На данный момент все работает под FreeBSD 7 (ipfw+dummynet). Все бы ничего, но вот стали появляться большие задержки при прохождении файрвола (иногда по 300 мс), что очень не приятно. Сейчас таких правил больше 150 штук. Если расширить пайп скажем до 4Мб\с, то задержки на файрволе практически пропадают. Характеристики компа: FreeBSD 7.0-STABLE CPU: Intel® Xeon® CPU E5335 @ 2.00GHz (2164.56-MHz K8-class CPU) usable memory = 4277878784 (4079 MB) avail memory = 4092952576 (3903 MB) В ядре: options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_FORWARD options IPSTEALTH options IPFIREWALL_VERBOSE_LIMIT=1000 options IPDIVERT options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT options DEVICE_POLLING options HZ=1000 Подскажите, может что-то надо подкрутить на FreeBSD или использовать какие-то другие альтернативы (altq), или решения на базе других ОС (linux), а может вообще комп заменить каким-то роутером (cisco). Главное, чтобы при количестве правил более 200 этих задержек не было. Вставить ник Quote
cmhungry Posted May 11, 2008 Posted May 11, 2008 имхо микротик само то по эти цели+1особенно если справиться на simple queue, без mangle Вставить ник Quote
edwin Posted May 12, 2008 Posted May 12, 2008 2Droid: Посмотрите в сторону ng_car: http://ospf-ripe.livejournal.com/2567.html http://tmp.barev.net/htmlart/unix/ng_car.html И главное - оптимизируйте правила. Активно используйте таблицы - сильно поможет. Вставить ник Quote
Droid Posted May 12, 2008 Author Posted May 12, 2008 ставьте linuxА что по части шейпинга в Линукс лучше, т.е. чем там лучше шейпить? Есть ли у вас какие-то наработки по шейпингу более 200 каналов и какие при этом бывают задержки? И вот про таблицы тоже интересно. Я так понимаю это делается с помощью altq на FreeBSD. Опять же было бы интересно узнать сравнивал ли кто-то уже соотношение производительности на Mikrotik, linux и FreeBSD? Какие-то результаты тестирований. Вставить ник Quote
edwin Posted May 12, 2008 Posted May 12, 2008 altq тут не причем - это уже епархия pf. Там есть свои нюансы. Вот к примеру pipe's + tables: http://www.opennet.ru/openforum/vsluhforumID1/74093.html Вставить ник Quote
nuclearcat Posted May 12, 2008 Posted May 12, 2008 200 каналов? Шейпил на Линуксе, на старом процессоре 5000 и больше... естественно крайне желательно использовать хеширование в фильтрах. Вставить ник Quote
ingress Posted May 12, 2008 Posted May 12, 2008 altq тут не причем - это уже епархия pf. вообще altq и dummynet две отдельные системы, просто в одном фаерволе одной пользуются, а в другом другой :) существует патч который позволяет использовать допустим dummynet в pf(наоборот не видел) Вставить ник Quote
AlKov Posted May 12, 2008 Posted May 12, 2008 (edited) 200 каналов? Шейпил на Линуксе, на старом процессоре 5000 и больше... естественно крайне желательно использовать хеширование в фильтрах.А на рабочие скрипты можно взглянуть? ;) P.S. Кстати, недавно как три дня назад поставил FreeBSD 6.0 RC1 на тестовую машину с целью изучения реализации почти этой же задачи (роутинг, фаервол, впн сервер, шейпер) на фри. Больше с целью сравнения фри и линукс. Если честно, то пока в полной растерянности - совершенно не вижу никаких преимуществ фри перед линукс в этом вопросе.. :( И вообще, после Linux, FreeBSD вызывает довольно удручающее впечатление... :( Edited May 12, 2008 by AlKov Вставить ник Quote
sirmax Posted May 12, 2008 Posted May 12, 2008 200 каналов? Шейпил на Линуксе, на старом процессоре 5000 и больше... естественно крайне желательно использовать хеширование в фильтрах.Хм, где прочитать про это?Действительно, хотелось бы пример. (упор на хеширование) Сейчас шейплю на VPN-ах, соответсвенно никаких фильтров, но хочу отказываться от этой схемы.. Вставить ник Quote
mikevlz Posted May 12, 2008 Posted May 12, 2008 P.S. Кстати, недавно как три дня назад поставил FreeBSD 6.0 RC1 на тестовую машину с целью изучения реализации почти этой же задачи (роутинг, фаервол, впн сервер, шейпер) на фри. Больше с целью сравнения фри и линукс. Если честно, то пока в полной растерянности - совершенно не вижу никаких преимуществ фри перед линукс в этом вопросе.. :(И вообще, после Linux, FreeBSD вызывает довольно удручающее впечатление... :( а чем обусловлен выбор релиз-кадидата 6.0? учитывая, что полноценный релиз ветки 6.3 уже скоро полгода как есть. Почему не сравнить современный линукс с какой-нить 4.0 fbsd? Вставить ник Quote
sirmax Posted May 12, 2008 Posted May 12, 2008 Если уж "холи вор" то хоть с примерами =) как Вы во фре делали, и как в линуксе... а то сразу будут вопросы про то что "кто то не умеет что то готовить" (с) Вставить ник Quote
jab Posted May 12, 2008 Posted May 12, 2008 ставьте linuxА что по части шейпинга в Линукс лучше, т.е. чем там лучше шейпить? Есть ли у вас какие-то наработки по шейпингу более 200 каналов и какие при этом бывают задержки? Не, фря лучше однозначно. Но она подразумевает наличие мозгов у того, кто ее настраивает. В отличие от линукса. Вставить ник Quote
witch Posted May 12, 2008 Posted May 12, 2008 (edited) таблицы помогут. проверено фря 6.2 ipfw правила без таблиц и с таблицами. Edited May 12, 2008 by witch Вставить ник Quote
AlKov Posted May 12, 2008 Posted May 12, 2008 (edited) [а чем обусловлен выбор релиз-кадидата 6.0? учитывая, что полноценный релиз ветки 6.3 уже скоро полгода как есть. Почему не сравнить современный линукс с какой-нить 4.0 fbsd?Да просто поставил то, что имелось в наличии. Как уже говорил, больше из спортивного интереса, наверное. ;)Ну а если насчет "свежести", то Linux у меня, можно сказать, такой же "не первой свежести" (Fedora 6), учитывая что уже давно вышла 8-я, да и 9-я тоже не за горами вроде. Правда признаюсь, что ядро обновил до 6.22 :-) Если уж "холи вор" то хоть с примерами =) как Вы во фре делали, и как в линуксе... а то сразу будут вопросы про то что "кто то не умеет что то готовить" (с)На линуксе собственно наверное также, как и Вы - на VPN-ах. Вот скрипт ip-up#!/usr/bin/php -q <?php error_reporting(E_ALL ^ E_NOTICE); $hname = "localhost"; $uname = "admin"; $dbpasswd = "superpasswd"; $dbname = "myDB"; $utable = "users"; $ptable = "packets"; $username = $argv[2]; $device = $argv[1]; $LINK = @mysql_pconnect($hname,$uname,$dbpasswd) or die ("Couldn't connect to MySQL server!"); @mysql_select_db($dbname,$LINK) or die ("Couldn't select database!"); $result=mysql_query("SELECT uid,gid,framed_ip FROM $utable WHERE user='".$username."'",$LINK) or die("DATABASE BROKE!!! table($utable) file:".__FILE__." line:".__LINE__." MYSQL : ".mysql_error() ); $us=mysql_fetch_array($result); $ip=$us[framed_ip]; $id=$us[uid]; mysql_free_result($result); $result2=mysql_query("SELECT packet, up_speed, max_speed FROM $ptable WHERE gid='".$us[gid]."'",$LINK) or die("DATABASE BROKE!!! table($ptable) file:".__FILE__." line:".__LINE__." MYSQL : ".mysql_error()); $packet2=mysql_fetch_array($result2); $v=$packet2; $up=$v[up_speed]; $max=$v[max_speed]; $tarif=iconv("cp1251","utf8",$v[packet]); mysql_free_result($result2); if ($up<>0 AND $max<>0) // если тариф анлим, запишем правила { $ipt_mark="/sbin/iptables -t mangle -I POSTROUTING 1 -d ${ip}/32 -j MARK --set-mark ${id}"; $ipt_mark2="/sbin/iptables -t mangle -I POSTROUTING 1 -s ${ip}/32 -j MARK --set-mark ${id}"; exec($ipt_mark); exec($ipt_mark2); $text="/sbin/tc qdisc add dev $(device) root handle 1: htb r2q 1 /sbin/tc class add dev $(device) parent 1:1 classid 1:$(ID) htb rate $(MAX)kbit ceil $(UP)kbit /sbin/tc filter add dev $(device) parent 1: protocol ip prio 3 handle $(ID) fw classid 1:$(ID)"; $search=Array('$(device)','$(MAX)','$(UP)','$(ID)'); $replace=Array($device,$v[max_speed],$v[up_speed],$us[uid]); $text1 = str_replace($search, $replace, $text); exec($text1); } ?> В принципе, маркировка в iptables, возможно лишняя, т.к. приоритеты по типу трафика не выставляются. В ip-down "обратная" операция - удаление соотв. очередей и правил. На фри еще не успел ничего попробовать - ну три дня всего, как установил, да еще в праздники! :-) И готовить последнюю я точно еще не умею. :D Не, фря лучше однозначно. Но она подразумевает наличие мозгов у того, кто ее настраивает. В отличие от линуксаКрайне "авторитетное" и "аргументированное" заявление! ;) После такого и обсуждать далее бессмысленно.. :DЛучше и не скажешь - "если у тебя Линукс, то тебе, дебилу, во Фри и делать нечего!" ;) ИМХО, это я лично так понимаю ваше утверждение. ;) По теме - после неоднократного и неоднодневного гугления по теме в плане Linux vs FreeBSD, у меня создалось впечатление, что шейпер на фри реализовать проще, а вот VPN сервер и фаервол проблематичнее. Но это только ИМХО.. Сам на фри за три дня реализовать что-то серьезное еще не успел, если не считать установку MC, смены шелла на bash и русификации консоли. Очень долго "плакаль" на команду route -n... Очень разочаровала... Ну а netstat -nr, ИМХО все же менее информативна и тяжелее в понимании. Ну это во-первых снова ИМХО, а во-вторых к теме не относится.. Edited May 12, 2008 by AlKov Вставить ник Quote
drug. Posted May 12, 2008 Posted May 12, 2008 (edited) ИМХО: Использование таблиц, снизит суммарное время прохождения пакета через цепочку правил, но не снизит задержку, которая возникает при прохождении пакета через конкретный pipe. А именно она составляет большую часть из задержки. Решение вот тут: http://www.freebsd.org/cgi/cvsweb.cgi/src/...t/ip_dummynet.c А конкретно: Revision 1.113: download - view: text, markup, annotated - select for diffs Sat Nov 17 21:54:56 2007 UTC (5 months, 3 weeks ago) by oleg Branches: MAIN Diff to: previous 1.112: preferred, colored Changes since revision 1.112: +6 -3 lines - New sysctl variable: net.inet.ip.dummynet.io_fast If it is set to zero value (default) dummynet module will try to emulate real link as close as possible (bandwidth & latency): packet will not leave pipe faster than it should be on real link with given bandwidth. (This is original behaviour of dummynet which was altered in previous commit) If it is set to non-zero value only bandwidth is enforced: packet's latency can be lower comparing to real link with given bandwidth. - Document recently introduced dummynet(4) sysctl variables. Однако, обновление до текущей стабильной версии, где-то месяц тому назад не содержало этих патчей. Edited May 12, 2008 by drug. Вставить ник Quote
nuclearcat Posted May 12, 2008 Posted May 12, 2008 http://lartc.org/howto/lartc.adv-filter.hashing.html Вставить ник Quote
jab Posted May 12, 2008 Posted May 12, 2008 Крайне "авторитетное" и "аргументированное" заявление! ;) После такого и обсуждать далее бессмысленно.. :DЛучше и не скажешь - "если у тебя Линукс, то тебе, дебилу, во Фри и делать нечего!" ;) Совсем наоборот. "Тем, кто задает такие же вопросы, как топикстартер, на фре делать нечего - марш на линукс." Вставить ник Quote
umike Posted May 12, 2008 Posted May 12, 2008 (edited) altq тут не причем - это уже епархия pf.вообще altq и dummynet две отдельные системы, просто в одном фаерволе одной пользуются, а в другом другой :) существует патч который позволяет использовать допустим dummynet в pf(наоборот не видел) очень интересно было бы взглянуть. По каким кейвордам гуглить? нагуглил а какже The format of ipfw rules is the following: [rule_number] [set set_number] [prob match_probability] action [log [logamount number]] [altq queue] [{tag | untag} number] body Edited May 12, 2008 by umike Вставить ник Quote
sirmax Posted May 12, 2008 Posted May 12, 2008 AlKov Свой скрипт я не постил по той причине что простых шейперов оченьмного - а для ВПНа ничего больше и не надо. Тут просто нет места для полета фантазии - отдать полосу и все. Собственно, это одна из причин по которой впн должен умереть ) кстати, я в php не силен, но вариант дергать каждый раз коннектится к БД не очень хорош. в моей давней реализации примерно того-же на bash это порождало 2 лишних вызова mysql, что крайне негативно сказывалось на производительности. рекомендую сделать как тут описано http://abills.net.ua/wiki/doku.php?id=abil...pppd_radattr:ru Вставить ник Quote
AlKov Posted May 12, 2008 Posted May 12, 2008 рекомендую сделать как тут описаноhttp://abills.net.ua/wiki/doku.php?id=abil...pppd_radattr:ru Вариант интересный и более правильный - согласен. Но есть одна незадача - у меня не ABillS, а FreeNibs... И непонятно, как в нем передать атрибуты (ту же скорость) плагину radattr.so ?? Как я понял, именно оттуда (вернее из /var/run/radattr.$user_ppp) скрипт вытаскивает нужные значения. А получает он их, по-видимому, также в MySQL (только за "один раз"). Пересобирать rlm_nibs и затем весь пакет что-то не воодушевляет.. :( Или можно попроще сиё реализовать? Не подскажете? ;) Вставить ник Quote
sirmax Posted May 12, 2008 Posted May 12, 2008 Хм, мы немного отклонились от темы.. А какие пары атрибут-значение возвращает Ваш радиус при коннекте пользователя? откуда он берет эти атрибуты? (я не знаком с FreeNibs, но у меня тоже не ABillS, просто тут наиболее внятно и коротко разъясняется как прикрутить свои атрибуты к связке radius+pptpd) Вставить ник Quote
Davion Posted May 12, 2008 Posted May 12, 2008 имхо микротик и никаких проблем что и другим советую))) Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.