alesha Posted July 5, 2005 Posted July 5, 2005 Сделал как указано в доке для того, чтобы подсчет велся через divert sockets. Стоит FreeBSD 5.3. но старгайзер два этих сокета которые указал в конфигурациооном файле не открыл. Может кто сталкивался с этой проблемой, а?
Max Posted July 6, 2005 Posted July 6, 2005 На сколько я помню, подсчёт через диверт реализован но пока не работает! Но обещают исправить!
Vadimka Posted July 7, 2005 Posted July 7, 2005 Привіт! Маю freebsd 4.11, mem-64, CPU-166. rl0-lan-192.168.1.0/28 wi0-inet-195.55.55.55 192.168.1.2-my PC Поставив останню версію 2 старга з diverтом. В конфі писав iface=rl0 8000 і wi0 8001 (8000 і 8001 це просто любі вільні порти на сервері, сюди не потрібно писати 8668 чи ще якийсь порт на якому у вас працює нат, так як діверт просто передає дані на обробку для інших програм то це порти на які діверт передасть дані старгу, так само, як він передає іх нату на порт 8668) І тут саме головне поставити правило діверта на старг перед натом!!! по іншому не буде взагалі рахувати. 10 divert 8000 ip from 192.168.1.2 to any via rl0 (для стат сітки) 20 divert 8001 ip from 192.168.1.2 to any via wi0 (для стат нета) 30 divert natd ip from any to 195.55.55.55 in recv wi0 (дані для нета з сітки) 40 divert natd ip from 192.168.1.2 to any out xmit wi0 (дані для сінки з нета) От в мене загрузка проца 26% на одному мені, та це можна списати на мій потужний сервер і статистика Мб точна.
Vadimka Posted July 7, 2005 Posted July 7, 2005 Сделал как указано в доке для того, чтобы подсчет велся через divert sockets. Стоит FreeBSD 5.3. но старгайзер два этих сокета которые указал в конфигурациооном файле не открыл. Может кто сталкивался с этой проблемой, а? А звідки ви знаєте, що він іх не відкрив? Якщо набрати netstat -a то видно ті порти як: div4 0 0 *.8000 *.* div4 0 0 *.8001 *.*
alesha Posted July 9, 2005 Author Posted July 9, 2005 Да, я немного ошибся да действительно порты открываюстя, но данные не передаются и естественно не счтаются. В скрипте Onconnect. Я добавил правило для diverta: ipfw add divert 15701 ip from $ip to any via rl0 (смотрит в инет) ipfw add divert 15702 ip from $ip to any via xl1 (смотрит в локалку) Хотя на сайте указано что бы в этом файле нужно указывать: ${fwcmd} add `expr $id '*' 10 + 29000` fwd 127.0.0.1,3128 tcp from $ip to any 80 via ${int_if} ${fwcmd} add `expr $id '*' 10 + 29001` divert 15701 ip from $ip to any via ${int_if} Эти правила мне кажутся без смысленными по одной простой причине первое правило разрешает выход в интернет и подсчет вестись как я понимаю не будет, если не прав поправьте, к сожалению проверить на практике я это не могу, как я уже сказал divert не работет. После того как пользователь подконнектился ipfw создаются эти 2 правила и пакеты даже туда идут но как я понимаю назад он их не отдает. Vadimka а ты можешь описать всю настройку более подробно, может где то я чего-то упустил, то что ты здесь написал, я уже пробывал подсчета нет. Пробывал вместо diverta использовать tee, это вообще ужас. Система просто умирает, и очень конкретно.
Vadimka Posted July 12, 2005 Posted July 12, 2005 Та на сайті написано про те як завернути весь трафік що йде на порт 80 на локальний проксі сервер! А ви як я розумію просто дівертом це все завертаєте. Чи я помиляюся? ${fwcmd} add `expr $id '*' 10 + 29000` fwd 127.0.0.1,3128 tcp from $ip to any 80 via ${int_if} А це правило просто щей дівертить ті самі дані що ідуть на вихід в нет, на порт який слухає старгазер для підрахунку ${fwcmd} add `expr $id '*' 10 + 29001` divert 15701 ip from $ip to any via ${int_if} Питайте що не зрозуміло спробуємо прояснити ситуацію
XoRe Posted July 13, 2005 Posted July 13, 2005 Насколько я понял, для 4 ветки FreeBSD диверт работает, для 5 - нет.
alesha Posted July 14, 2005 Author Posted July 14, 2005 Для начала сделаю вводную часть, чтобы было все всем понятно, если где-то мои предположения, окажутся ошибочными или я чего-то не понимаю, можно пинать и даже очень сильно. Итак, есть система FreeBSD_5.3, которая по-моему замыслу должна считать трафик пользователей. Ее характеристики: CPU DURON or Athlon 1,00Ggz; RAM 256 Mb; HDD 4,3 Gb. Итак на этом железе старгайзер впринципе нормально считает, так при одновременной записи 10 фильмов я теряю где-то 100 Мб, а то и еще меньше. Но всего этого я добился стандартными средствами, но у меня есть еще одна машинка: CPU Celeron 600Mgz; RAM 64 Mb; HDD 4,3 Gb. Вот на ней стандартными настройками я смог добиться только того, что вместо 734Мб она считала 130Мб. И возникло тогда решение использовать divert. Дальше я расскажу, что я делал, с Celeronom, может кому-то поможет, чтобы он(она) не повторял(а) этих действий. В начале пробывал увеличить размер bpf фильтра да помогло, но подсчет вырос где-то на 15%, пробывал увеличть память до 256 Мб, результата положительного вообще не было. Следующим этапом стало использование диверта, естественно у меня стоит firewall, но вот прокси у меня нет, для трансляции адресов я использую ipnat. при подключении юзера просто прописываю разрешающее правило в firewalle. Теперь, что касается diverta я прописывал правила в скрипте OnConnect: ${fwcmd} add `expr $ID '*' 10 + 29001` divert 8000 log ip from $IP to any via rl0 ${fwcmd} add `expr $ID '*' 10 + 29002` divert 8001 log ip from $IP to any via rl1 И видел, что пакеты перенаправлялись по этим правилом. но назад уже в firewall не возвращались. Я пробывал прописывать это правило и для для случая когда firewall был отключен т.е все правила разрешены. Пока эти 2 правила не были включены, т.е пока пользователь не подконектился. Все работал прекрасно и в локалку ходил и в инет как только их включил все результат нулевой весь доступ закрыт. Пробывал я этот divert и на 4 и на фрюхе, теже грабли. Может конечно и у меня руки кривые.
Vadimka Posted July 22, 2005 Posted July 22, 2005 Теперь, что касается diverta я прописывал правила в скрипте OnConnect:${fwcmd} add `expr $ID '*' 10 + 29001` divert 8000 log ip from $IP to any via rl0 ${fwcmd} add `expr $ID '*' 10 + 29002` divert 8001 log ip from $IP to any via rl1 И видел, что пакеты перенаправлялись по этим правилом. но назад уже в firewall не возвращались. Та все так, але може вам використати для роздачі нету людям nat? Принаймі на ньому в мене працює!!!
XoRe Posted July 23, 2005 Posted July 23, 2005 Я у себя проверял диверт на FreeBSD 5.1 делал так ipfw add 100 count ip from ip to any ipfw add 200 divert в старгейзер ip from ip to any ipfw add 300 count ip from ip to any Нажимал на какую-нить закачку. на 100 правиле ipfw show показывал какое-то количество пакетов. на 200 правиле было, если не ошибаюсь, такое же количество пакетов. на 300 правиле было 0 пакетов. Т.е. из диверта пакеты не возвращались. Была мыслЯ заменить divert на tee, но я не помню, что с этой мыслЁй стало. Наверное пробовал, но и так не считало. Хотя можно попробовать ещё раз. Люди, замените divert на tee и попробуйте
Vadimka Posted July 24, 2005 Posted July 24, 2005 То виходить що правило з дівертом на старгайзер потрібно ставити після діверту для нету?
virstud Posted July 28, 2005 Posted July 28, 2005 С дивертом в свое время ...я тут уже разбирался.... у меня получилось заставить работать ..старгайзер через диверт... причина: ошибка в исходниках.....divert.cpp или чтото типа этого.... там максимальный размер пакета был....50 байт .... вобщем.........копайте форум......диверт работает..... можно поиск по моему нику....
alesha Posted August 1, 2005 Author Posted August 1, 2005 На неделю покинул город и работу и вижу тема моя не умерла, это хорошо, думаю вместе мы поборем эту проблему. У меня, XoRe, такой же результат как и у тебя т.е. первое правило получает данные, а второе после него ничего не получает. XoRe что тебя интересует все что писал Vadimka тебе перевести на русский язык? Если да то немного разгребусь и через пару дней и переведу все тебе на русский язык. Только скажи об этом, что тебе оно нужно, а то просто тратить свое время в пустую не хочется. Я переведу, а тебе оно окажется не интересным. Последнее что писал Vadimka:"То виходить що правило з дівертом на старгайзер потрібно ставити після діверту для нету?" Читай так :"Получается, что правило с дивертом на старгайзере нужно ставить после диверта для инета?" Да кстати про tee можете забыть если машина считает трафик некорректно, tee не поможет, если у Вас только не Пентюх4, хотя у меня такой возможности проверить не было. У меня был Сел 600 правда ОЗУ 64 М, пробывал этот tee начинал считать но вместо 730М он насчитывал около 20М, при этом машина в это время напрочь лежала. virstud, обрати пожайлуста внимание я в очередной раз перечитал все твои замечание и советы, но ты заранее получал хоть какие-то данные. Я же не получаю ничего. И я ставил последний старгайзер а там уже стоит 16635 байт размер, взято из cтг из файла divertcap.cpp: // FreeBSD extern SETTINGS * settings; #define BUFF_LEN (16436) //max mtu -> lo=16436. Буду копать дальше. Кому интересно присоединяемся.
XoRe Posted August 2, 2005 Posted August 2, 2005 2virstud: если у тебя получилось заставить divert работать на FreeBSD 5.х, то вышли пожалуйста свои сырцы на xor<бобик>elizovo.ru На 4.9-11, насколько я понял, диверт работает на ура.
alesha Posted August 4, 2005 Author Posted August 4, 2005 Ни чего подобного XoRe, на 4.9. у меня были теже грабли скороей
alesha Posted August 4, 2005 Author Posted August 4, 2005 Случайно, отправил не дописанное письмо, мы с тобой XoRe не там где-то копаем. Вот только где? Как у тебя получится чбросишь мне на мыло, или здесь на форуме разместишь, твои решения.
TriNo Posted August 4, 2005 Posted August 4, 2005 У меня уже очень давно на диверте пашет и все отлично считает! Конфигурацыя сервачка - Pentium MMX 550\64 мозгов, FreeBSD 5.3 Вообщем начинаем: Добавляем в ядро следуюющие опции: options IPFIREWALL options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE options IPFIREWALL_FORWARD options IPDIVERT options DUMMYNET А терь сам старгазер: Инет - 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 затем Onconnect fwcmd="/sbin/ipfw" login=$1 ip=$2 id=$4 ${fwcmd} delete `expr $id '*' 10 + 7000` ${fwcmd} delete `expr $id '*' 10 + 7001` ${fwcmd} delete `expr $id '*' 10 + 7002` ${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 ${fwcmd} add `expr $id '*' 10 + 7002` allow ip from $ip to any 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` ${fwcmd} delete `expr $id '*' 10 + 7002` echo "D `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log все это прекрасно работает, гимора ниразу не замечал P.S Исходники я не правил
Max Posted August 4, 2005 Posted August 4, 2005 ) Я плакал! До сего момента я был уверен (исходя из всех мною прочитанных постов) что стг и диверт вещи не совместимые! А тут бац и на тебе! А какая версия стг у вас стоит? Если какая нибудь из старых, то тут действительно что то в сырцах зарыто!
Vadimka Posted August 4, 2005 Posted August 4, 2005 Привет просили писать по русски, попробую, за ошыбки в словах не пинать! Давайте розберёмся с divertoм все вмести, а то пишем один в одну сторону другой в другую, (лутше через Аську конешно). Предлагаю начать с самого первого шага, тоесть с установки! Все ставим последнюю версию и пишем что получилось. И так дальше по шагам. Тогда может и сможем что-то прояснить! Жду предложений!
Vadimka Posted August 4, 2005 Posted August 4, 2005 Привет просили писать по русски, попробую, за ошыбки в словах не пинать! Давайте розберёмся с divertoм все вмести, а то пишем один в одну сторону другой в другую, (лутше через Аську конешно). Предлагаю начать с самого первого шага, тоесть с установки! Все ставим последнюю версию и пишем что получилось. И так дальше по шагам. Тогда может и сможем что-то прояснить! Жду предложений!
alesha Posted August 5, 2005 Author Posted August 5, 2005 Vadimka, я немного разгребусь поработаю над этой проблему и буду писать о проблемах, ты понимаешь мне кажется что диверт без ната не работает!
TriNo Posted August 5, 2005 Posted August 5, 2005 Ребятки скажу вам одно: ставил 3 версии стг и все прекрасно работает с дивертом! Я работаю с дивертом месяцев так 7-8 . А то что у кого то не получаеться, ну что ж бывает, у меня получилось. Я делал по доке, но у меня тоже нифига не получилось, начал сам по разному крутить и получилось. Выше я привел пример полность рабочей конфигурации стг с дивертом, при том что я нифига в сорцах не правил. А сейчас последняя версия стг стоит. Кстати под FreeBSD 5.4 тоже работает. Если есть вопросы - ICQ 322225739
XoRe Posted August 10, 2005 Posted August 10, 2005 2TriNo: Мы говорим о подсчете пакетов старгейзером вторым способом, т.е. открытием divert сокета и отправкой на него пакетов фаерволом для подсчета. Ты говоришь о диверте для отправки пакетов на НАТ, т.е. о маскардинге пакетов. 2all: В общем я разобрался с дивертом для фрях пятой ветки. Обощу материал по этой теме: 1. Есть дока http://www.stargazer.dp.ua/doc/conf_divert.html Так вот, там написано, что надо редактировать файл make.bsd Для 5 ветки надо редактировать make.bsd5 Ибо в 5.х мы пишем make bsd5 для сборки. А make bsd5 читает файл make.bsd5, а не make.bsd 2. В stargazer.conf не забываем писать что-то типа iface=xl0 15701,xl1 15702 где xl0, xl1 - ваши сетевухи, где вы хотите считать (по идее подсчет обычно ведется на одной внутренней сетевухе) 15701,15702 - это номера divert портов, которые старгейзер откроет для приема пакетов для их обсчета. Надеюсь, вы знаете, что есть tcp порты и есть udp порты, и они между собой не пересекаются. Так вот есть ещё divert порты, и они не пересекаются с tcp и udp. Пример использования divert портов - natd. natd использует 8668 divert порт. Если честно, я не думаю, что у вас ещё какое-нибудь ПО использует диверт порты. Поэтому в конфиге стг можете ставить любые номера портов от 1 до 65535, кроме 8668, который у вас используется натом. 3. stargazer успешно считает трафик через диверт. Есть только один нюанс: tcp пакеты он не возвращает обратно в фаервол. Обычно идет как: на правиле divert в ipfw пакет отправляется какой-нибудь программе, программа пакет обрабатывает и возвращает в ipfw на дальнейшую обработку. Так вот, стг не возвращает tcp пакеты. udp возвращает, icmp возвращает, а tcp нет. Остальные протоколы не проверял. Поэтому нельзя написать divert ip from any to any. Ибо тогда tcp пакеты не выйдут за пределы правила divert. Это можно обойти. Вместо divert можно воспользоваться директивой tee. tee так-же отправляет пакет на обработке программы, точнее отправляет копию пакета, а сам пакет идет дальше обрабатываться правилами ipfw. Т.е. с помощью tee можно отправить копию пакета tcp на обработку стг, она не вернется и бог с ней. Но tee нужно использовать только для tcp пакетов. Для udp и icmp нужно использовать divert. Это можно реализовать двумя способами. 1. написать вместо одного три правила: tee tcp from any to any divert udp from any to any divert icmp from any to any Тогда для tcp будут считаться (и не возвращаться) копии пакетов. Для icmp и udp будут считаться сами пакеты. Если вы точно знаете, что у вас ещё какой-то протокол гуляет, можете добавить ещё одно правило с divert или tee для него. 2. Это можно реализовать с помощью skipto: tee tcp from any to any skipto номер tcp from any to any divert ip from any to any где номер должен быть больше номера следующего правила (divert ip from any to any ). Таким образом tcp пакеты будут считаться с помощью tee, а потом перепрыгивать подсчет через divert. Пакеты всех остальных протоколов будут обсчитываться через divert. 4. Сейчас тестировал у себя скачать большой файл через 2 шлюза. Проверял сколько покажет стг с первым типом подсчета на 1 шлюзе и стг с дивертом на 2 шлюзе. Стг с дивертом показал объем чуть больше на 1-5%. Почему - не могу сказать, ибо не знаю. Дерзайте. Я заинтересован в исправлениях и дополнениях моей основной идеи.
Max Posted August 10, 2005 Posted August 10, 2005 to XoRe: а нагрузка на проц в момент закачки какая? Ну и параметры машины тоже хотелось бы увидеть!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now