Прошу помощи по организации сбора статы по трафику

Технические вопросы по UTM 5.0
Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

JAO писал(а):alexus, я понял, что всё, что идет из инета в сеть с серой адресацией, проходит и шлюз и роутер, причем роутер ближе к клиенту, чем шлюз. Так? тогда достаточно на роутере обсчитывать интерфейсы клиентских сетей, оставляя без внимания тот интерфейс, который идет к шлюзу. На шлюзе нужен трафик, который идет на его реальный адрес? если да, то внутренний интерфейс можно не считать, потому что роутер это поймает, а считать только внешний. Я все правильно понял?
Ты правильно меня понял.
Именно так я нетфлоу и хочу настроить.
На шлюзе будет браться стата с внешнего интерфейса с реальный айпи. И правила на этот шлюз будут считаться с параметром to me in
Оодно пока для меня не уточнено. То что идёт на НАТ и на проксик прозрачный, эти пакеты не считаются как in to me?

Джао, прописал у себя свой крипт.
Косяк, трафик считается дважды, то не удивительно.
В подклассе пытаюсь указать с какого интерфейса брать, а не получается. Говорит что формат не тот.

что там надо писать?
в документации не нашёл информации

Да, и к стати. Можно ведь считать только входящий трафик на каждом интерфейсе, так ? То бишь исходящий от интерфейсов роутера в сеть.
Этим мы уменьши базу данных по трафику, которая сливается по нетфлоу.
ПОтому что для пользователя на его его интерфейсе (роутера) на него трафик будет входящий, ана остальных интерфейсах от него трафик будет считатьсяисхоядщим.
По такой логике можно настроить правильно подклассы, классы. и мы сможем так же считать и входящий трафик и исходящий.
в таком случае как прописать в правило файеровла одной строкой? Просто в одной строке на все интерфейсы не получается написать.

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

А вы правило ngtee 10 all from any to any поставили? в вашем случае гораздо лучше будет привязаться к интерфейсам, причем не в биллинге, а в правилах ipfw. Потому что без in и out ngtee два раза завернет один и тот же пакет в netflow ноду. А без указания интерфейса примерно то же веселье и будет, да еще и трафик с lo0 туда пойти может. Оно вам надо?

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

а в классах можно указать с какого интерфейса роутера брать трафик?
Я имя интерфейса пишу в классе, а он говорит формат не тот.
Иначе он буедт всё равно считать трафик с двух интерфейсов потока между двумя хостами в разных сетях.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

Джао, я предлагаю такое решение:
Полностью без изменений берём твой скрипт
Но в правилах ipfw пишем:
${fwcmd} add ngtee 10 all from any to any out xmit dc0
${fwcmd} add ngtee 10 all from any to any out xmit sk0
${fwcmd} add ngtee 10 all from any to any out xmit msk0
${fwcmd} add ngtee 10 all from any to any out xmit msk1

То есть мы снимаем данные по входящему трафику на интерфейсы роутера.
И получается, то что если на одном интерф трафик входящий на абонента, то на другом -исходящий. Логично? логично.
И нет гемора с дублированием. И база данных по трафику меньше.
Проверил у себя, отлично работает.
И не надо в классах указывать интерфейсы.

Джао, что скажешь?
аська есть?

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Что я скажу? Я скажу, что на месте виднее кому что лучше. Я только поделился готовым рабочим решением, работающим у меня второй год без всяких нареканий. Как вы его примените - вам решать.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

JAO писал(а):Что я скажу? Я скажу, что на месте виднее кому что лучше. Я только поделился готовым рабочим решением, работающим у меня второй год без всяких нареканий. Как вы его примените - вам решать.
Джао, я бы хотел узнать более объективное мнение о моём варианте. Может есть какие то подводные камни, с которыми я столкнуть и мне придётся перейти на вариант подсчёта двух стороннего трафика на каждом интерфейсе.
И как ты решил проблему с двойным подсчётом трафика?
Я так понял. что в классах можно задать интерфейс роутера, с которого нам надо считать трафик. Но чтобы я там не писал, мне система говорит что формат неправильный.А в документациии подробного описания нет :shock:
Подскажи.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

Для того, чтобы ещё собирать учитывать входящий трафик на шлюз, я установил там нетфлоу, в правилах указал чтобы собирать трафик входящий на внешний айпи внешнего интерфейса.
Но трафик он по любому будет входящим на шлюз, поэтмоу стата, которая льётся в сеть, льётся в стату на шлюз (не вся).
А как мне отделить только тот интернет входящий трафик, который идёт на сам хост-шлюз, от того, который идёт через него в сеть ?

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Считать после того как входящие на внешний интерфейс пакеты прошли через NAT и получили свои серые адреса. Затем что надо завертываем в ngtee 10.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

JAO писал(а):Считать после того как входящие на внешний интерфейс пакеты прошли через NAT и получили свои серые адреса. Затем что надо завертываем в ngtee 10.
Я сделал вот так:

case ${natd_enable} in
[Yy][Ee][Ss])
if [ -n "${natd_interface}" ]; then
${fwcmd} add divert natd all from any to any via ${natd_interface}
fi
;;
esac
##netflow
${fwcmd} add ngtee 10 all from any to me in recv ${oif}
${fwcmd} add ngtee 10 all from me to any out xmit ${oif}

Вроде и правильно, но почему то считает лишнего.

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

Всё равно трафик льётся на шлюз, идущий в сеть.
:(

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

Мне так и не удалось разделить трафик на шлюза от трафика в сеть.
Есть у ког окакие мысли по решению этой задачи?

slash
Сообщения: 33
Зарегистрирован: Пн янв 25, 2010 17:02

Сообщение slash »

JAO писал(а):Правильно, в одну сторону и будет считаться. Потому что одна нода воткнута между upper и lower. Такое решение у меня прожило с полчаса. Потом было другое, с двумя нодами, с задачей справлялось, но было корявым. В итоге сделал вот так:

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

#!/bin/sh

ngctl="/usr/sbin/ngctl"

billing_ip="4.3.2.1"

# Setting up Netflow export

$&#123;ngctl&#125; -f- <<-SEQ
    mkpeer ipfw&#58; netflow 10 iface0
    name ipfw&#58;10 nfg
    msg nfg&#58; setdlt &#123; iface=0 dlt=12 &#125;
    msg nfg&#58; settimeouts &#123; inactive=30 active=30 &#125;
    mkpeer nfg&#58; ksocket export inet/dgram/udp
    name nfg&#58;export nfxs
    msg nfxs&#58; connect inet/$&#123;billing_ip&#125;&#58;9996
SEQ
Подсчет трафика реализуется вставкой в ipfw правил

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

ngtee 10 all from any to any in
ngtee 10 all from any to any out
для подсчета на всех интерфейсах разом (нехороший вариант) либо вот такой парочки

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

ngtee 10 all from any to any in recv xl0
ngtee 10 all from any to any out xmit xl0
xl0 замените на нужный вам интерфейс, а 4.3.2.1 на адрес вашего биллинга.
settimeouts - это таймауты сессий netflow, значение в секундах, чем меньше - тем меньше у клиента минус при завершении большой закачки по tcp и тем больше данных сливается по netflow и ест хранилище детальной статистики биллинга.
Попробовал запустить ваш скрипт, но при запуске пишется вот такая вот ошибка

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

ngctl&#58; send msg&#58; No such file or directory
ngctl&#58; line 1&#58; error in file
На что он ругается? чего он не может найти?

Аватара пользователя
alexus
Сообщения: 448
Зарегистрирован: Сб окт 11, 2008 10:31

Сообщение alexus »

up

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

лень вам думать и гуглить =) держите вот :

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



#!/bin/sh
. /etc/rc.subr

# 1. Name of start script used in rc.conf
name=flow_export
rcvar=`set_rcvar`

# 2. Functions of script &#40;start/stop&#41;
start_cmd="nfsensor_start"
stop_cmd="nfsensor_stop"

# 3. Read configuration from rc.conf & setting defaults
# 3.1 Collectors&#58; new collector used by default.
load_rc_config $name

&#58; $&#123;flow_export_enable="NO"&#125;
&#58; $&#123;flow_export_interfaces=""&#125;
&#58; $&#123;flow_export_collectors=""&#125;

# 3.2 Executables
# 3.2.1 Netgraph executable
ngctl=/usr/sbin/ngctl
# 3.2.2 Kldstat executable
kldstat=/sbin/kldstat
# 3.2.3 Number of netflow hooks nodes
num_iface=0
# 3.2.4 Number of virtual hub ports connected to collectors
num_port=1
# 3.2.5 List of modules
module_list="ng_ether ng_ksocket ng_netflow ng_hub"

# 4. Functions
nfsensor_start&#40;&#41; &#123;
# Sanity check
echo "Starting flow_export netgraph structure."
# Checking if "export" interface specified.
    if &#91; -z "$flow_export_interfaces" &#93;
        then
        echo "&#91;ERR&#93;&#58; You must specify at least one iface."
        exit
    fi

# Checking if require modules are loaded
    for module in $module_list; do
        check=`$kldstat -v |grep $&#123;module&#125;`
        if &#91; -z "$check" &#93;
            then
            echo "&#91;ERR&#93;&#58; Module $&#123;module&#125; is not loaded."
            exit
        fi
    done

# Creating node
for iface in $flow_export_interfaces; do
# Checkng if netflow node is created
if &#91; $num_iface -eq 0 &#93;
then
# Creating neflow node for given iface
$ngctl mkpeer $iface&#58; netflow lower iface$&#123;num_iface&#125;
$ngctl name $iface&#58;lower nfsr-node
$ngctl connect $iface&#58; nfsr-node&#58; upper out$&#123;num_iface&#125;
# Configuring current netflow node
$ngctl msg nfsr-node&#58; setdlt &#123; iface=$&#123;num_iface&#125; dlt=1 &#125;
$ngctl msg nfsr-node&#58; settimeouts &#123; inactive=10 active=10 &#125;
# Collecting ingress & egress flows &#40;require FreeBSD 7.2 and above&#41;
$ngctl msg nfsr-node&#58; setconfig &#123; iface=$&#123;num_iface&#125; conf=7 &#125;
else
# Connecting given iface to netflow node
$ngctl connect $iface&#58; nfsr-node&#58; lower iface$&#123;num_iface&#125;
$ngctl connect $iface&#58; nfsr-node&#58; upper out$&#123;num_iface&#125;
# Collecting ingress & egress flows &#40;require FreeBSD 7.2 and above&#41;
$ngctl msg nfsr-node&#58; setconfig &#123; iface=$&#123;num_iface&#125; conf=7 &#125;
fi
# Using next iface
num_iface=`expr $num_iface + 1`
done
# Connecting export hook of netflow node to virtual hub
$ngctl mkpeer nfsr-node&#58; hub export hubtmp
$ngctl name nfsr-node&#58;export nfex-hub

# Connecting export flows to collectors to hub ports
num_port=1
for collector in $flow_export_collectors; do
$ngctl mkpeer nfex-hub&#58; ksocket p$&#123;num_port&#125; inet/dgram/udp
$ngctl name nfex-hub&#58;p$&#123;num_port&#125; nfex-hub-p$&#123;num_port&#125; 
$ngctl msg nfex-hub&#58;p$&#123;num_port&#125; connect inet/$collector
num_port=`expr $num_port + 1`
done
&#125;

nfsensor_stop&#40;&#41;
&#123;
echo "Stoping flow_export netgraph structure."
# Killing virtual hub node 
$ngctl shutdown nfex-hub&#58; > /dev/null 2>&1
# Killing netflow node 
$ngctl shutdown nfsr-node&#58; > /dev/null 2>&1
&#125;

run_rc_command "$1"


не забудем в rc.conf добавить


flow_export_enable="YES"
flow_export_interfaces="vlan1010 vlan1038" <<< интерфейсы, на которых собирать
flow_export_collectors="127.0.0.1:9996" <<< IP и порт, куда сливать нетфлоу


копирайт не мой, куски кода - копипаста из инетных примеров и чтения документации по нетграфу

ЗЫ - это реально работает на нескольких площадках и запускается без проблем на адекватно настроенных системах

Ответить