IPN и классы трафика

~AsmodeuS~
Site Admin
Сообщения: 5749
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

чтото я не отловил

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

~AsmodeuS~ писал(а):чтото я не отловил
Не отловил что? Там в комментариях к линкапдаун очепяточка... Другой конец туннеля указывать нада. $5. А правила тс нерабочие отлажу свои - выложу. Некогда щас, ночером мабуть

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Вот пример рабочего шейпера для линуха в линкапдаун. Некоторые замечания:

1. Я не ограничиваю скорость входящего (в сторону клиента) трафика из приватных подсетей (10/8, 172.16/12, 192.168/16) и исходящего трафика в приватные подсети. Весь остальной трафик попадает под ограничения. По-уму конечно было бы вытаскивать всё из интервалов из базы и строить правила, но времени ковырять исходник на тему как это проще сделать у меня нету. Если Автор подскажет, как получить пары типа подсеть-скорость, подсеть-скорость... - вставлю.

2. Резать исходящий трафик ингресс дисциплиной с политикой дроп - это конечно жестоко :) Собсно у меня-то сделано по-другому. Режется классовыми дисциплинами в другом месте. Но мой реальный шейпер врядли кому-то подойдёт. А для универсальности вполне и этот покатит. По крайней мере работать будет у всех.

линкапдаун строка 332:

Код: Выделить всё

    elsif ($ARGV[0] eq 'pppd') {
      my $s_in = $speed_out * 1024;
      my $s_out = $speed_in * 1024;
      if ($traf_type == 0) {
        $s_in = $speed_in * 1024;
        $s_out = $speed_out * 1024;
      }
      my $s_deltain = 104857600 - $s_in;
      if ($speed_in > 0) {
      
          # Ограничение входящего (с точки зрения клиента) трафика
      
          push @FW_ACTIONS, "/sbin/tc qdisc del dev $INTERFACE root &>/dev/null";
          push @FW_ACTIONS, "/sbin/tc qdisc add dev $INTERFACE root handle 1: htb default 20";
	  
	  # Вся полоса = 100Мбит. Предполагается, что клиент подключён через ethernet (PPPoE или PPTP)
	  
          push @FW_ACTIONS, "/sbin/tc class add dev $INTERFACE parent 1: classid 1:1 htb rate 104857600bit";
	  
	  # Полоса, в которую заворчивается трафик, скорость которого НЕ НАДО ограничивать
	  
          push @FW_ACTIONS, "/sbin/tc class add dev $INTERFACE parent 1:1 classid 1:10 htb rate $s_deltain"."bit ceil 104857600bit";
	  
	  # Полоса с ограничением скорости
	  
          push @FW_ACTIONS, "/sbin/tc class add dev $INTERFACE parent 1:1 classid 1:20 htb rate $s_in"."bit";
	  
	  # Дисциплины обслуживания полос
	  
          push @FW_ACTIONS, "/sbin/tc qdisc add dev $INTERFACE parent 1:10 handle 10: sfq perturb 10";
          push @FW_ACTIONS, "/sbin/tc qdisc add dev $INTERFACE parent 1:20 handle 20: sfq perturb 10";
	  
	  # Трафик из приватных сетей пропускаем без ограничения скорости
	  
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent 1: protocol ip prio 1 u32 match ip src 10.0.0.0/8 flowid 1:10";
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent 1: protocol ip prio 1 u32 match ip src 172.16.0.0/12 flowid 1:10";
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent 1: protocol ip prio 1 u32 match ip src 192.168.0.0/16 flowid 1:10";

	  # Остальной трафик (типа из инета) попадёт в дефолтовый класс с ограничением скорости
	  
       }
      if ($speed_out > 0) {
      
          # Ограничение исходящего (с точки зрения клиента) трафика
      
          push @FW_ACTIONS, "/sbin/tc qdisc del dev $INTERFACE ingress &>/dev/null";
          push @FW_ACTIONS, "/sbin/tc qdisc add dev $INTERFACE handle ffff: ingress";
	  
	  # Трафик в приватные сети пропускаем без ограничения скорости
	  
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent ffff: protocol ip prio 1 u32 match ip dst 10.0.0.0/8 flowid :1";
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent ffff: protocol ip prio 1 u32 match ip dst 172.16.0.0/12 flowid :1";
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent ffff: protocol ip prio 1 u32 match ip dst 192.168.0.0/16 flowid :1";
	  
	  # Остальной трафик (типа в инет) попадает под ограничение скорости
	  
          push @FW_ACTIONS, "/sbin/tc filter add dev $INTERFACE parent ffff: protocol ip prio 2 u32 match ip dst 0.0.0.0/0 police rate $s_out"."bit burst 20k drop flowid :1";
	  
       }
      
     }
    #FreeBSD ipfw pipe shaper

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

У меня такой вопрос
При редактировании Тарифы трафика в пункте
Система/ Dialup / VPN/ Тарифные планы/ Интервалы/
есть поле Выражения

Так вот, облазил форум и прочитал доки и нигде не нашёл описания этого поля
1) Как его можно использовать, отдельно или совместно с полем NETS
И какой синтаксис надо использовать?

2) Могу ли я использовать стандартные перловые regexp'ы?
Например описать пару внутренних трафиков таким образом:

Код: Выделить всё

внутренний1 - "10\.[12]0\.|192\.168\.15\.|172\.35\.10\.([0-9][0-9]|1[0-2][0-9])"
внутренний2 - "192\.168\.|172\.16\.|10\."
Для чего мне это нужно?
Я делаю перловым скриптом детальную статистику по трафикам/субтрафикам (хостам+протоколам+портам) пользователей на основе данных NETFLOW. Соответственно параметры для обработки хочу брать из базы abills.
И описывать трафики хотелось бы одним шаблоном, чтоб обрабатывать за 1 проход.


3) Кстати, посему ещё вопрос
каков порядок проверки при обработке IP, если один из трафиков содержит в себе подсеть, входящую в бОльшую сеть в другом трафике.
К примеру
субтрафик 0 = 0.0.0.0/24
субтрафик 1 = 192.168.10.0/24
субтрафик 2 = 192.168.10.0/25

Пакет с IP 192.168.10.34 куда попадёт?
А если номера трафиков сменить в обратном направлении?

Заранее благодарен
Человек должен думать, машина - работать

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

1) http://abills.net.ua./wiki/doku.php?id= ... #intervals

2) а зачем изобретать велосипед? детальная статистика уже реализована в модуле Ipn

3) по наиболее точному совпадению - в субтрафик 2 от номеров трафиков не зависит

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

Спасибо что раскрыл глаза :)
Я чё-то по запарке искал описание в доках к модулю IPN
Велосипеду несколько лет, а модуль IPN пользую недавно.
Человек должен думать, машина - работать

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

ran писал(а):2) а зачем изобретать велосипед? детальная статистика уже реализована в модуле Ipn
Кстати я что-то не вижу, где в IPN детальная статистика, наверное лыжи не едут :)

У меня скрипт делает детальную статистику по трафикам/субтрафикам (хостам+протоколам+портам) пользователей.
причём имена хостов я делаю не обратным резолвингом, поскольку этим способом, если что-то и выясните, то не факт что это будет реальное имя WEB-сервера, да и вообще зачастую нет имён в обратной зоне.
Я просто парсером при каждой заливке трафика беру имена из логов transparent-proxy сервера и складываю/обновляю в файлик cdb-хеша, где всё это безобразие накапливается для последующего использования. Для невыясненных хостов указываются IP

Получается примерно такая статистика, правда она у меня в красивой html-таблице:

Код: Выделить всё

USER	- test
Трафик --Интернет--  подключений Протоколы-порты
sb.google.com	0.288 Mb	54	TCP-80
www.opennet.ru	0.177 Mb	19	TCP-80
nexus.org.ua	0.139 Mb	3	TCP-80
www-128.ibm.com	0.114 Mb	4	TCP-80
informer.gismeteo.ru	0.101 Mb	10	TCP-80
pics.utro.ru	0.066 Mb	2	TCP-80
tbn0.google.com	0.060 Mb	4	TCP-80
a.gismeteo.ru	0.049 Mb	10	TCP-80
an.yandex.ru	0.038 Mb	4	TCP-80
www.google.com	0.027 Mb	6	TCP-80
images.google.com	0.023 Mb	7	TCP-80
static.feed.rbc.ru	0.013 Mb	2	TCP-80
counter.rambler.ru	0.005 Mb	8	TCP-80
www.ibm.com	0.004 Mb	8	TCP-80
top.list.ru	0.004 Mb	12	TCP-80
top8.list.ru	0.004 Mb	6	TCP-80
tools.spylog.ru	0.004 Mb	2	TCP-80
engine.awaps.net	0.003 Mb	2	TCP-80
button.blogs.yandex.net	0.003 Mb	2	TCP-80
hitsrv3.hotlog.ru	0.003 Mb	4	TCP-80
top3.list.ru	0.002 Mb	4	TCP-80
dyn.gismeteo.ru	0.002 Mb	2	TCP-80
counter.yadro.ru	0.002 Mb	2	TCP-80
u9121.01.spylog.com	0.002 Mb	2	TCP-80
www.google-analytics.com	0.001 Mb	4	TCP-80
top100-images.rambler.ru	0.001 Mb	4	TCP-80
c.bigmir.net	0.001 Mb	2	TCP-80
80.91.249.20	0.000 Mb	3	ICMP-0
82.116.1.46	0.000 Mb	3	ICMP-0
213.248.104.142	0.000 Mb	3	ICMP-0
213.248.97.173	0.000 Mb	3	ICMP-0
217.150.45.197	0.000 Mb	3	ICMP-0
ya.ru	0.000 Mb	4	ICMP-0
Итого --Интернет--	1.139 Mb

Трафик --Внутренний-- 	подключений	Протоколы-порты
192.168.10.54	0.301 Mb	5	TCP-22
tech.dom.local	0.078 Mb	8	TCP-80
stat.dom.local	0.025 Mb	2	TCP-22
88.230.162.250	0.010 Mb	12	TCP-3128
88.230.162.1	0.000 Mb	3	ICMP-0
88.230.162.28	0.000 Mb	3	ICMP-0
88.230.162.17	0.000 Mb	3	ICMP-0
Итого --Внутренний--	0.416 Mb
Человек должен думать, машина - работать

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

ran писал(а):2) а зачем изобретать велосипед? детальная статистика уже реализована в модуле Ipn
Кстати я что-то не вижу, где в IPN детальная статистика, наверное лыжи не едут :)

У меня скрипт делает детальную статистику по трафикам/субтрафикам (хостам+протоколам+портам) пользователей.
причём имена хостов я делаю не обратным резолвингом, поскольку этим способом, если что-то и выясните, то не факт что это будет реальное имя WEB-сервера, да и вообще зачастую нет имён в обратной зоне.
Я просто парсером при каждой заливке трафика беру имена+IP из логов transparent-proxy сервера и складываю/обновляю в файлик cdb-хеша, где всё это безобразие накапливается для последующего использования. Для невыясненных хостов указываются IP

Получается примерно такая статистика, правда она у меня в красивой html-таблице:

Код: Выделить всё

USER	- test
Трафик --Интернет--  подключений Протоколы-порты
sb.google.com	0.288 Mb	54	TCP-80
www.opennet.ru	0.177 Mb	19	TCP-80
nexus.org.ua	0.139 Mb	3	TCP-80
www-128.ibm.com	0.114 Mb	4	TCP-80
informer.gismeteo.ru	0.101 Mb	10	TCP-80
pics.utro.ru	0.066 Mb	2	TCP-80
tbn0.google.com	0.060 Mb	4	TCP-80
a.gismeteo.ru	0.049 Mb	10	TCP-80
an.yandex.ru	0.038 Mb	4	TCP-80
www.google.com	0.027 Mb	6	TCP-80
images.google.com	0.023 Mb	7	TCP-80
static.feed.rbc.ru	0.013 Mb	2	TCP-80
counter.rambler.ru	0.005 Mb	8	TCP-80
www.ibm.com	0.004 Mb	8	TCP-80
top.list.ru	0.004 Mb	12	TCP-80
top8.list.ru	0.004 Mb	6	TCP-80
tools.spylog.ru	0.004 Mb	2	TCP-80
engine.awaps.net	0.003 Mb	2	TCP-80
button.blogs.yandex.net	0.003 Mb	2	TCP-80
hitsrv3.hotlog.ru	0.003 Mb	4	TCP-80
top3.list.ru	0.002 Mb	4	TCP-80
dyn.gismeteo.ru	0.002 Mb	2	TCP-80
counter.yadro.ru	0.002 Mb	2	TCP-80
u9121.01.spylog.com	0.002 Mb	2	TCP-80
www.google-analytics.com	0.001 Mb	4	TCP-80
top100-images.rambler.ru	0.001 Mb	4	TCP-80
c.bigmir.net	0.001 Mb	2	TCP-80
80.91.249.20	0.000 Mb	3	ICMP-0
82.116.1.46	0.000 Mb	3	ICMP-0
213.248.104.142	0.000 Mb	3	ICMP-0
213.248.97.173	0.000 Mb	3	ICMP-0
217.150.45.197	0.000 Mb	3	ICMP-0
ya.ru	0.000 Mb	4	ICMP-0
Итого --Интернет--	1.139 Mb

Трафик --Внутренний-- 	подключений	Протоколы-порты
192.168.10.54	0.301 Mb	5	TCP-22
tech.dom.local	0.078 Mb	8	TCP-80
stat.dom.local	0.025 Mb	2	TCP-22
88.230.162.250	0.010 Mb	12	TCP-3128
88.230.162.1	0.000 Mb	3	ICMP-0
88.230.162.28	0.000 Mb	3	ICMP-0
88.230.162.17	0.000 Mb	3	ICMP-0
Итого --Внутренний--	0.416 Mb
Человек должен думать, машина - работать

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Кстати я что-то не вижу, где в IPN детальная статистика, наверное лыжи не едут
/ Отчёт/ IP Net/ Детали/ или / Клиенты/ Логины/ Информация/ Сервисы/ IP Net/ Детали/ если у тебя конечно её сбор настроен

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

ran писал(а):
Кстати я что-то не вижу, где в IPN детальная статистика, наверное лыжи не едут
/ Отчёт/ IP Net/ Детали/ или / Клиенты/ Логины/ Информация/ Сервисы/ IP Net/ Детали/ если у тебя конечно её сбор настроен
Видимо в моей версии этого нет, я из портов собирал в январе - 0.37b
Человек должен думать, машина - работать

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

так перелезай на каррент - там много нового и багов много пофикшено... ну и добавлено, не без того :) тем не менее, Асмодеус именно её сопровождает, а на 037 плюнул уже - она ж стабл типа :wink:

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

Перелез - обновился с CVS
Автору за биллинг премного благодарен, наверное как и все, кто им пользуется. Поэтому скажу только о том, что на мой взгляд можно доработать.

Почти везде в коде указаны абсолютные пути (где-то в форуме уже на это жаловались) надо бы в настройки вынести пути, или брать из системных настроек.

Детализация IPN теперь есть, и в общем то это лучше чем никакой, но по ряду параметров она не совсем удобная., потому что:
- не отражается тип протокола, хотя это реализовать вполне можно - в netflow данные есть.
- нельзя агрегировать по типам трафиков из ТП, но это уже сложнее и возможно не настолько актуально.
- база статистики IPN быстро растёт, и для значительного уменьшения размера, предлагаю после определённого срока агрегировать её по дням, месяцам и т.п.
- нельзя агрегировать по отрезкам времени (не выводить кучу записей за отрезок времени, а именно агрегировать в минимальное количество строк)
- обратный резолвинг имён - почти бесполезен, в отличие от моего метода разрешения имён с лога прокси.

По последнему пункту с лога SQUIDа берутся пары FQDN <-> IP
Можно юзать типа такого скриптика, для сбора данных:

Код: Выделить всё

#!/usr/bin/perl

$debug=1;

$proxylog="/var/log/squid/access.log";
$IP2FQDN="/usr/abills/ip2fqdn.cdb";

tie %ip2fqdn, 'DB_File', "$IP2FQDN" or die "Cant open IP2FQDN file: $!\n";

open(LOG,"$proxylog");

while (<LOG>) {

    if (/^\d+\.\d+\s+\S+\s+\S+\s+\S+\s+\d+\s+(CONNECT\s+|\S+\s+\w+tp:\/\/)([\w+\-\.]+)(\/|:\d+\/)\S+\s+\S+\s+DIRECT\/(\d+\.\d+\.\d+\.\d+)\s+\S/) {
         $ip2fqdn{"$4"}  = "$2";
        print STDERR "$4 \t$2\n" if $debug > 0;
    }
}
close LOG;

untie %ip2fqdn;
Человек должен думать, машина - работать

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Tux писал(а):Почти везде в коде указаны абсолютные пути (где-то в форуме уже на это жаловались)
писАл когда-то про это в запросе новых возможностей... однажды меня это достало, я прошерстил все сырцы на предмет путей и понаделал симлинков :wink: пока вроде не беспокоит :)
Детализация IPN теперь есть, и в общем то это лучше чем никакой, но по ряду параметров она не совсем удобная., потому что:
- не отражается тип протокола, хотя это реализовать вполне можно - в netflow данные есть.
тоже грил Асмодеусу. Правишь строчку 513 в Abills/modules/Ipn/traffic2sql на:

Код: Выделить всё

    $DATA{PROTOCOL} = $9;
и строчку 261 в Abills/mysql/Ipn_Collector.pm на

Код: Выделить всё

        PROTOCOL => $DATA->{PROTOCOL} || 0,
и будет тебе щастье :wink:
По последнему пункту с лога SQUIDа берутся пары FQDN <-> IP
Можно юзать типа такого скриптика, для сбора данных:
Зачем? А если сквида нету? Лучше запрос в обратную зону днс делать... тоже грил уже... и ваще... это всё наверно в запрос новых возможностей нада, а не сюда - офтоп аднака

Tux
Сообщения: 27
Зарегистрирован: Чт мар 20, 2008 5:34 am
Контактная информация:

Сообщение Tux »

ran писал(а):
Tux писал(а):По последнему пункту с лога SQUIDа берутся пары FQDN <-> IP
Можно юзать типа такого скриптика, для сбора данных:
Зачем? А если сквида нету? Лучше запрос в обратную зону днс делать... тоже грил уже... и ваще... это всё наверно в запрос новых возможностей нада, а не сюда - офтоп аднака
Может и оффтоп, но я уже объяснял почему запрос в обратную зону днс НЕ ЛУЧШЕ.
Потому что фиг чего ты вразумительного найдёшь в обратной зоне. Нужны подтверждения? Типичный пример:

Код: Выделить всё

# host www.gismeteo.ru
www.gismeteo.ru is an alias for web.gismeteo.ru.
web.gismeteo.ru has address 212.48.138.18
# host 212.48.138.18
Host 18.138.48.212.in-addr.arpa not found: 3(NXDOMAIN)
Конечно если нет логов сквида, то как говорится и на безрыбье...
Но если они есть, и не обязательно на той же машине, где Abills, то предложенный cdb-файлик будет очень кстати.
Человек должен думать, машина - работать

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

Потому что фиг чего ты вразумительного найдёшь в обратной зоне
А это звыняй админы зон должны делать... В моей зоне н6апример прописано всё правильно

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

Ответить