Jump to content

Recommended Posts

Posted

Подскажите, чем лучше шейпить соединения на 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 этих задержек не было.

  • Replies 87
  • Created
  • Last Reply

Top Posters In This Topic

Posted
ставьте linux
А что по части шейпинга в Линукс лучше, т.е. чем там лучше шейпить? Есть ли у вас какие-то наработки по шейпингу более 200 каналов и какие при этом бывают задержки?

 

И вот про таблицы тоже интересно. Я так понимаю это делается с помощью altq на FreeBSD. Опять же было бы интересно узнать сравнивал ли кто-то уже соотношение производительности на Mikrotik, linux и FreeBSD? Какие-то результаты тестирований.

Posted
altq тут не причем - это уже епархия pf.

вообще altq и dummynet две отдельные системы, просто в одном фаерволе одной пользуются, а в другом другой :)

существует патч который позволяет использовать допустим dummynet в pf(наоборот не видел)

 

Posted (edited)
200 каналов? Шейпил на Линуксе, на старом процессоре 5000 и больше... естественно крайне желательно использовать хеширование в фильтрах.
А на рабочие скрипты можно взглянуть? ;)

 

P.S. Кстати, недавно как три дня назад поставил FreeBSD 6.0 RC1 на тестовую машину с целью изучения реализации почти этой же задачи (роутинг, фаервол, впн сервер, шейпер) на фри. Больше с целью сравнения фри и линукс. Если честно, то пока в полной растерянности - совершенно не вижу никаких преимуществ фри перед линукс в этом вопросе.. :(

И вообще, после Linux, FreeBSD вызывает довольно удручающее впечатление... :(

Edited by AlKov
Posted
200 каналов? Шейпил на Линуксе, на старом процессоре 5000 и больше... естественно крайне желательно использовать хеширование в фильтрах.
Хм, где прочитать про это?

Действительно, хотелось бы пример. (упор на хеширование)

 

Сейчас шейплю на VPN-ах, соответсвенно никаких фильтров, но хочу отказываться от этой схемы..

Posted
P.S. Кстати, недавно как три дня назад поставил FreeBSD 6.0 RC1 на тестовую машину с целью изучения реализации почти этой же задачи (роутинг, фаервол, впн сервер, шейпер) на фри. Больше с целью сравнения фри и линукс. Если честно, то пока в полной растерянности - совершенно не вижу никаких преимуществ фри перед линукс в этом вопросе.. :(

И вообще, после Linux, FreeBSD вызывает довольно удручающее впечатление... :(

а чем обусловлен выбор релиз-кадидата 6.0? учитывая, что полноценный релиз ветки 6.3 уже скоро полгода как есть. Почему не сравнить современный линукс с какой-нить 4.0 fbsd?
Posted

Если уж "холи вор" то хоть с примерами =) как Вы во фре делали, и как в линуксе... а то сразу будут вопросы про то что "кто то не умеет что то готовить" (с)

Posted
ставьте linux
А что по части шейпинга в Линукс лучше, т.е. чем там лучше шейпить? Есть ли у вас какие-то наработки по шейпингу более 200 каналов и какие при этом бывают задержки?

Не, фря лучше однозначно. Но она подразумевает наличие мозгов у того, кто ее настраивает. В отличие от линукса.

Posted (edited)

таблицы помогут. проверено

d5f6e8a54103t.jpg

фря 6.2 ipfw правила без таблиц и с таблицами.

 

 

Edited by witch
Posted (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 by AlKov
Posted (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 by drug.
Posted
Крайне "авторитетное" и "аргументированное" заявление! ;) После такого и обсуждать далее бессмысленно.. :D

Лучше и не скажешь - "если у тебя Линукс, то тебе, дебилу, во Фри и делать нечего!" ;)

Совсем наоборот. "Тем, кто задает такие же вопросы, как топикстартер, на фре делать нечего - марш на линукс."

Posted (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 by umike
Posted

AlKov

Свой скрипт я не постил по той причине что простых шейперов оченьмного - а для ВПНа ничего больше и не надо.

Тут просто нет места для полета фантазии - отдать полосу и все.

Собственно, это одна из причин по которой впн должен умереть )

 

кстати, я в php не силен, но вариант дергать каждый раз коннектится к БД не очень хорош.

в моей давней реализации примерно того-же на bash это порождало 2 лишних вызова mysql, что крайне негативно сказывалось на производительности.

 

рекомендую сделать как тут описано

http://abills.net.ua/wiki/doku.php?id=abil...pppd_radattr:ru

Posted
рекомендую сделать как тут описано

http://abills.net.ua/wiki/doku.php?id=abil...pppd_radattr:ru

Вариант интересный и более правильный - согласен. Но есть одна незадача - у меня не ABillS, а FreeNibs... И непонятно, как в нем передать атрибуты (ту же скорость) плагину radattr.so ?? Как я понял, именно оттуда (вернее из /var/run/radattr.$user_ppp) скрипт вытаскивает нужные значения. А получает он их, по-видимому, также в MySQL (только за "один раз"). Пересобирать rlm_nibs и затем весь пакет что-то не воодушевляет.. :( Или можно попроще сиё реализовать? Не подскажете? ;)
Posted

Хм, мы немного отклонились от темы..

А какие пары атрибут-значение возвращает Ваш радиус при коннекте пользователя? откуда он берет эти атрибуты?

(я не знаком с FreeNibs, но у меня тоже не ABillS, просто тут наиболее внятно и коротко разъясняется как прикрутить свои атрибуты к связке

radius+pptpd)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.