virstud 0 Опубликовано: 2005-03-06 13:47:34 Share Опубликовано: 2005-03-06 13:47:34 вобщем ......divert в Ipfw отрабатывает нормально.......пакеты через сокет летят на старгайзер......обрабатываются.......а что потом????? по примеру на сайте ......они должны попасть в NATD ... но как они туда попадут....если их startgazer не возвращает......... МОЖЕТ КТОНИТЬ РАЗЬЯСНИТ...... ВООБЩЕ...КТОНИБУДЬ ДЕЛАЛ ЧЕРЕЗ DIVERT ???? делал через tee правило перенаправление пакетор...... старгайзер считает......но при большой нагрузке ....начинает врать...... ПОМОЖИТЕ!!!!!!! Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-06 21:51:59 Автор Share Опубліковано: 2005-03-06 21:51:59 т.е. он ....отдает пакеты....но както странно.....вобще никакой нагрузки не держит.....даж терминалка подвисает в некоторые моменты............ Ссылка на сообщение Поделиться на других сайтах
Gemini 0 Опубліковано: 2005-03-07 13:26:34 Share Опубліковано: 2005-03-07 13:26:34 Тоже присоединяюсь. Люди поделитесь опытом с настройкой обсчета через divert. Пожалуйста! Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-07 16:02:58 Автор Share Опубліковано: 2005-03-07 16:02:58 ну хоть ктонить пробовал?????? или это просто так там сделано..... Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-07 23:30:51 Автор Share Опубліковано: 2005-03-07 23:30:51 вобщем......чувствую....никто нечего сказать не хочет.... я поставил свои эксперементы... traffcounter.cpp - занимается подсчетом трафика...... там есть функция void * TRAFFCOUNTER::Run(void * obj) в ней цикл while ..занимается обработкой трафика.. вот запрос данных с divert сокета......: res = CapRead(buffer, BUFFER_LEN, &iface); аля DivertCapRead который в freebsd/divertcap.h лезем в divertcap.cpp ...смотрим DivertCapRead .. там куча всего....воснавном ифы настроек и pull функция определения текущего состояния сокета..... причем там 2-е DivertCapRead.........2 разные функции.......с одинаквыми именами но разным кол-ом аргументов...ЭТ НАВЕРНОЕ ЧТОБ ЗАПУТАТЬ....=) одны вызывает другую... вобщем все каректно... и вот самое главное......2 функции ...чтения сокета и запись обратно в него.. bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN, 0, (struct sockaddr*) &divertaddr, &divertaddrSize); и sendto(cddiv[n].sock, buf, bytes, 0, (struct sockaddr*)&divertaddr, divertaddrSize); .... вродебы..все каректно......траф снимается и возвращается.........но почемуто очень медленно все это работает......... закоментил все.......все кроме этих 2 функций.......получился while с прямым чтением и записью.........а он зараза всеравно медленно работает......максимум что можно зделать....так это в терминалке команду дать... ума не прилажу.....что может все это тормазить...... настройки конфига по мануалу.(интерфейс указываю dc0 15750)... в ipfw правило перенаправления выглядит так: ipfw add 10 divert 15750 tcp from any to 192.168.1.10 via dc0 dc0 - внутр интерфейс(192.168.1.1) 192.168.1.10 ---мой ip помогите разобраться.......что гадит.... Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2005-03-08 03:07:00 Share Опубліковано: 2005-03-08 03:07:00 В функции bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN, 0, (struct sockaddr*) &divertaddr, &divertaddrSize); Мне интересен параметр cddiv[n].sock Я могу предположить, что создается массив сокетов. Быть может тормоза возникают при работе с этим массивом? Борис, может тут собака зарыта? Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-08 08:25:24 Автор Share Опубліковано: 2005-03-08 08:25:24 В функции bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN,0, (struct sockaddr*) &divertaddr, &divertaddrSize); Мне интересен параметр cddiv[n].sock Я могу предположить, что создается массив сокетов. Быть может тормоза возникают при работе с этим массивом? Борис, может тут собака зарыта? нет...это всеголишь......позволяет указывать несколько интерфейсов учета трафика тобишь cddiv[n].sock -n = текущему проверяемуму сокету...... если в настройках было: iface iface=dc0 15750 ---- то n всегда =0 если: iface=dc0 15750 , ed0 15751 --- то n = 0 и 1. Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2005-03-08 09:13:25 Share Опубліковано: 2005-03-08 09:13:25 Понятно. Тогда поставь до и после каждой функции bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN, 0, (struct sockaddr*) &divertaddr, &divertaddrSize); и sendto(cddiv[n].sock, buf, bytes, 0, (struct sockaddr*)&divertaddr, divertaddrSize); Какие-нибудь функции для замера времени. Шоп в файл время скидывали или в массив, а потом уже в файл. Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-08 11:13:07 Автор Share Опубліковано: 2005-03-08 11:13:07 Понятно.Тогда поставь до и после каждой функции bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN, 0, (struct sockaddr*) &divertaddr, &divertaddrSize); и sendto(cddiv[n].sock, buf, bytes, 0, (struct sockaddr*)&divertaddr, divertaddrSize); Какие-нибудь функции для замера времени. Шоп в файл время скидывали или в массив, а потом уже в файл. я ставил...... все срабатывает.... там еще poll функция обеспечивает задержку..... она ждет момент когда можно читать сокет..... если ее закоментить....то старгайзер начинает отьедать 100 % процессора....и начинает гонять по функциям чтения -записи с бешеной скоростью......но при этом вобще неччего не работает..... кстати......в settings.h есть : #define MAX_DEV 10 максимальное кол-во интерфейсов...... и при инициализации .......в некоторых кусках кода выделается место под 10 интерфейсов........даже если в конфиге 1 интерфейс.......не экономно..... вооо...надо замерить ...сколько пакетов примет divert в ipfw через Log и сколько раз стработает recvfrom........ щас этим займусь...... Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-08 14:14:56 Автор Share Опубліковано: 2005-03-08 14:14:56 кароч........после эксперементов выяснил....что программа нормально читает пакеты из сокета.... добавил записть в лог вофера(buf) .....как только срабатывала функция чтения из сокета..... делал перенаправление......: старгайзер врубал....с dc0 15701 ipfw add 10 divert 15701 tcp from 192.168.1.10 to 192.168.1.1 15800 via dc0 в ирисе делал пакет на 15800... посылал 10 раз... смотрел лог.. и там 10 раз отражалось страбатывание функции чтения....все четко.. но вот еще не проверял запись обратно в сокет......... интересно...как сравнить пакеты на входе и выходе... пахоже он портит пакеты........или режет их по размеры......пока не могу понять надо почитать про divert функции...... Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-08 16:48:24 Автор Share Опубліковано: 2005-03-08 16:48:24 новые иследования....так сказать..... вобщем.....программа работает....вопрос только...как........ вобщем..... железо.....466 целерон......256 оперативы......... все как всегда.... задача.....посчитать кол-во пакетов(и их общий размер) на входе ipfw .....еще до divert-а...............и ..............после divert-а............ вобщем вот что получилось : ipfw add 10 count tcp from 192.168.1.10 to any via dc0 ipfw add 20 divert 15701 tcp from 192.168.1.10 to any via dc0 ipfw add 30 count tcp from 192.168.1.10 to any via dc0 ........ запускаю старгайзер........ и вот что мы видим.....: server# ipfw show 00010 665 61644 count tcp from 192.168.1.10 to any via dc0 00020 610 56084 divert 15701 tcp from 192.168.1.10 to any via dc0 00030 665 61644 count tcp from 192.168.1.10 to any via dc0 65535 4954080 3619631110 allow ip from any to any сначало ..все идет как надо.........колво пакетов до и после равно.....но потом... server# ipfw show 00010 5770 490354 count tcp from 192.168.1.10 to any via dc0 00020 5715 484794 divert 15701 tcp from 192.168.1.10 to any via dc0 00030 5709 413390 count tcp from 192.168.1.10 to any via dc0 65535 4968937 3631692524 allow ip from any to any после небольшой нагрузки с пиком...я думаю ..пару бегабайт/сек.....начинаются проблемы... 00010 5860 499366 count tcp from 192.168.1.10 to any via dc0 00020 5805 493806 divert 15701 tcp from 192.168.1.10 to any via dc0 00030 5797 422322 count tcp from 192.168.1.10 to any via dc0 65535 4969236 3631724588 allow ip from any to any и пакеты....и общий размер...поплыл................самое интересное .....что при этом .......старгайзер начинает отьедать процессор......эо видно ниже статистика: PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 10720 root 108 -19 3076K 2216K RUN 10:14 98.10% 98.10% stargazer 311 bind 96 0 2504K 1656K select 1:42 0.00% 0.00% named 529 ircd 96 0 14376K 12972K select 0:57 0.00% 0.00% ircd 520 hybserv 96 0 1972K 1108K select 0:27 0.00% 0.00% hybserv 838 nobody 96 0 7548K 6356K select 0:17 0.00% 0.00% httpd 8981 virstud 96 0 6220K 2320K select 0:16 0.00% 0.00% sshd 564 root 96 0 3808K 1860K select 0:16 0.00% 0.00% nmbd 841 nobody 20 0 7656K 6440K lockf 0:15 0.00% 0.00% httpd 839 nobody 20 0 7324K 6116K lockf 0:15 0.00% 0.00% httpd 836 nobody 20 0 7804K 6520K lockf 0:14 0.00% 0.00% httpd 840 nobody 20 0 7392K 6316K lockf 0:11 0.00% 0.00% httpd 539 root 96 0 1972K 1128K select 0:10 0.00% 0.00% hybserv 561 mysql 96 0 27012K 5464K select 0:10 0.00% 0.00% mysqld 835 root 96 0 4864K 3228K select 0:10 0.00% 0.00% httpd 837 nobody 20 0 7320K 6036K lockf 0:09 0.00% 0.00% httpd 842 nobody 20 0 7180K 5964K lockf 0:09 0.00% 0.00% httpd 474 root 96 0 3528K 1924K select 0:07 0.00% 0.00% sendmail а теперь вопрос........как ...нам ...эмулировать очередь...в divert-е......также как это делается....в pipe(трубе)............... а то получается........divert тупо шлет в сокет пакеты......а старгайзер не успевает их выгреб%#ь........... надо глянуть....еще на poll ......может он глючит.... блин......это тогда ваще не надежная штука получается..... как заставить divert ,..не слать пакет....пока его не выгребет старгайзер Ссылка на сообщение Поделиться на других сайтах
virstud 0 Опубліковано: 2005-03-08 18:10:22 Автор Share Опубліковано: 2005-03-08 18:10:22 Я НАШЕЛ!!!!!!!ВОТ НЕЛЕПОСТЬ ТО......... ВОБЩЕМ.....В divertcap.cpp(в папке freebsd исходников) ВСЕ БЫСТРО ПРАВИМ : - #define BUFF_LEN 1024 НА + #define BUFF_LEN 30000 .....А ТО ПОЛУЧАЕТСЯ....ЧТО МАКСИМАЛЬНЫЙ РАЗМЕР ПАКЕТА 1024 БАЙТА... ВО ТРАБЛ ТО......АФИГЕТ........ТОРОПИЛСЯ НАВЕРНОЕ АВТОР......РЕЛИЗ ВЫПУСТИТЬ.....=))) ТАМ КСТАТИ....ЕЩЕ МНОГО НЕДОЧЕТОВ........НО ЭТ ПРОСТО ВЫНОС....=)) Ссылка на сообщение Поделиться на других сайтах
TriNo 0 Опубліковано: 2005-03-17 22:07:50 Share Опубліковано: 2005-03-17 22:07:50 У меня уже 3 месяца на диверте пашет и все отлично считает и процык не напрегает! Конфигурацыя сервачка - Pentium MMX 550\64 мозгов, stg2-2004.12.28-16.31.32 Вообщем начинаем: Инет - 62.64.118.182 Локалка -192.168.0.1 Кидаю вот такой вот скриптик в /etc/rc.d #!/bin/sh fwcmd="/sbin/ipfw" natcmd="/sbin/natd" ${fwcmd} -f flush ${natcmd} -s -m -a 62.64.118.182 ${fwcmd} add 100 divert natd ip from any to 62.64.118.182 ${fwcmd} add 101 allow all from 192.168.0.2 to 192.168.0.1 ${fwcmd} add 102 allow all from 192.168.0.38 to 192.168.0.1 ${fwcmd} add 103 allow all from 82.144.199.35 to 62.64.118.182 ${fwcmd} add 104 allow all from 213.179.224.158 to 62.64.118.182 ${fwcmd} add 105 allow all from 212.184.75.0/24 to 62.64.118.182 ${fwcmd} add 200 deny log ip from any to 192.168.0.1 22 ${fwcmd} add 201 deny log ip from any to 62.64.118.182 22 ${fwcmd} add 202 deny all from any to 62.64.118.182 20-21 затем Onconnect fwcmd="/sbin/ipfw" login=$1 ip=$2 id=$4 ${fwcmd} add `expr $id '*' 10 + 7000` divert natd ip from $ip to any ${fwcmd} add `expr $id '*' 10 + 7001` allow ip from any to $ip echo "C `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log OnDisconnect fwcmd="/sbin/ipfw" login=$1 ip=$2 id=$4 ${fwcmd} delete `expr $id '*' 10 + 7000` ${fwcmd} delete `expr $id '*' 10 + 7001` echo "D `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log все это прекрасно работает, гимора ниразу не замечал, средняя нагрузка на сервачек составляет от 10 до 30 % Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2005-03-18 09:25:08 Share Опубліковано: 2005-03-18 09:25:08 2TriNo: могу посоветовать поставить в OnConnect перед разрешающими правилами удаляющие, т.е ${fwcmd} delete `expr $id '*' 10 + 7000` ${fwcmd} delete `expr $id '*' 10 + 7001` ${fwcmd} add `expr $id '*' 10 + 7000` divert natd ip from $ip to any ${fwcmd} add `expr $id '*' 10 + 7001` allow ip from any to $ip Это на всякий случай, чтобы разрешающие правила не дублировались. Ссылка на сообщение Поделиться на других сайтах
TriNo 0 Опубліковано: 2005-03-18 09:53:18 Share Опубліковано: 2005-03-18 09:53:18 XoRe Спасибо прийму во внимание Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас