Перейти до

stargazer не отдает пакеты после divert-а на него.


Рекомендованные сообщения

вобщем ......divert в Ipfw отрабатывает нормально.......пакеты через сокет летят на старгайзер......обрабатываются.......а что потом?????

по примеру на сайте ......они должны попасть в NATD ...

но как они туда попадут....если их startgazer не возвращает.........

МОЖЕТ КТОНИТЬ РАЗЬЯСНИТ......

ВООБЩЕ...КТОНИБУДЬ ДЕЛАЛ ЧЕРЕЗ DIVERT ????

делал через tee правило перенаправление пакетор......

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

ПОМОЖИТЕ!!!!!!!

Ссылка на сообщение
Поделиться на других сайтах

т.е. он ....отдает пакеты....но както странно.....вобще никакой нагрузки не держит.....даж терминалка подвисает в некоторые моменты............

Ссылка на сообщение
Поделиться на других сайтах

вобщем......чувствую....никто нечего сказать не хочет....

я поставил свои эксперементы...

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

 

помогите разобраться.......что гадит....

Ссылка на сообщение
Поделиться на других сайтах

В функции bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN,

0, (struct sockaddr*) &divertaddr, &divertaddrSize);

 

Мне интересен параметр cddiv[n].sock

Я могу предположить, что создается массив сокетов.

Быть может тормоза возникают при работе с этим массивом?

Борис, может тут собака зарыта?

Ссылка на сообщение
Поделиться на других сайтах
В функции 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.

Ссылка на сообщение
Поделиться на других сайтах

Понятно.

Тогда поставь до и после каждой функции

bytes = recvfrom (cddiv[n].sock, buf, BUFF_LEN, 0, (struct sockaddr*) &divertaddr, &divertaddrSize);

и

sendto(cddiv[n].sock, buf, bytes, 0, (struct sockaddr*)&divertaddr, divertaddrSize);

 

Какие-нибудь функции для замера времени.

Шоп в файл время скидывали или в массив, а потом уже в файл.

Ссылка на сообщение
Поделиться на других сайтах
Понятно.

Тогда поставь до и после каждой функции

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........

 

щас этим займусь......

Ссылка на сообщение
Поделиться на других сайтах

кароч........после эксперементов выяснил....что программа нормально читает пакеты из сокета....

добавил записть в лог вофера(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 функции......

Ссылка на сообщение
Поделиться на других сайтах

новые иследования....так сказать.....

вобщем.....программа работает....вопрос только...как........

 

вобщем.....

железо.....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 ,..не слать пакет....пока его не выгребет старгайзер

Ссылка на сообщение
Поделиться на других сайтах

Я НАШЕЛ!!!!!!!ВОТ НЕЛЕПОСТЬ ТО.........

ВОБЩЕМ.....В divertcap.cpp(в папке freebsd исходников) ВСЕ БЫСТРО ПРАВИМ :

 

- #define BUFF_LEN 1024

 

НА

 

+ #define BUFF_LEN 30000

 

.....А ТО ПОЛУЧАЕТСЯ....ЧТО МАКСИМАЛЬНЫЙ РАЗМЕР ПАКЕТА 1024 БАЙТА...

ВО ТРАБЛ ТО......АФИГЕТ........ТОРОПИЛСЯ НАВЕРНОЕ АВТОР......РЕЛИЗ ВЫПУСТИТЬ.....=)))

 

ТАМ КСТАТИ....ЕЩЕ МНОГО НЕДОЧЕТОВ........НО ЭТ ПРОСТО ВЫНОС....=))

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

У меня уже 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 %

Ссылка на сообщение
Поделиться на других сайтах

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

 

Это на всякий случай, чтобы разрешающие правила не дублировались.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...