Перейти к содержимому
Калькуляторы

Сбор статистики NetFlow Сбор статистики через ng_netflow при vlan per user

Всем доброго времени суток!

 

Возникла проблема сбора статистики через ng_netflow.

Топология:

L3 сеть <-> em0:Router:em1 <-> DGS-3100-24TG <-> ВОЛС <-> DES-3526 <-> Абонент по vlan per user.

 

Операционка FreeBSD 7.2. Cобираюсь считать трафик через ng_netflow, прикрепляя его к ng_ether который от em1:

ngctl mkpeer em1: netflow lower iface0

ngctl name em1:lower netflow

ngctl connect em1: netflow: upper out0

ngctl msg netflow: setconfig { iface = 0 conf = 3 } <- тут учитываем проходящие в обе стороны пакеты

ngctl mkpeer netflow: ksocket export inet/dgram/udp

ngctl msg netflow:export connect inet/xxx.xxx.147.26:1670

 

По каким-то причинам трафик считается только в одну сторону - только пакеты, приходящие из em1

 

Знает ли кто способ сбора статистики таким образом? Очень не хочется прикручивать к netgraph ipfw и заворачивать трафик через ngtee.

P.S. снимать статистику с внешнего интерфейса em0 не удастся, ибо на нем висит pfnat.

 

Всем заранее спасибо :)

 

Поделиться сообщением


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

У меня сделано так:

 
        mkpeer vlan5: netflow lower iface0
        name vlan5:lower netflow
        connect vlan5: netflow: upper iface1
        connect netflow: netflow: out0 out1

        msg netflow: settimeouts { inactive=150 active=3600 }

все обсчитывается в обе стороны.

Поделиться сообщением


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

У меня сделано так:

 
        mkpeer vlan5: netflow lower iface0
        name vlan5:lower netflow
        connect vlan5: netflow: upper iface1
        connect netflow: netflow: out0 out1

        msg netflow: settimeouts { inactive=150 active=3600 }

все обсчитывается в обе стороны.

На 7.2 такой огород можно не городить, а задать конигурацию iface-ов и все будет считаться в обе стороны:

У меня работает вот так:

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

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

# 2. Functions of script (start/stop)
start_cmd="nfsensor_start"
stop_cmd="nfsensor_stop"

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

: ${flow_export_enable="NO"}
: ${flow_export_interfaces=""}
: ${flow_export_collectors="192.168.26.58:9995"}

# 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() {
        # Sanity check
        echo "Starting flow_export netgraph structure."
        # Checking if "export" interface specified.
        if [ -z "$flow_export_interfaces" ]
        then
                echo "[ERR]: 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 ${module}`
           if [ -z "$check" ]
           then
                   echo "[ERR]: Module ${module} is not loaded."
                   exit
           fi

        done
        # Creating nodes
        for iface in $flow_export_interfaces; do
           # Checkng if netflow node is created
           if [ $num_iface -eq 0 ]
           then
                   # Creating neflow node for given iface
            $ngctl mkpeer $iface: netflow lower iface${num_iface}
            $ngctl name $iface:lower nfsr-node
            $ngctl connect $iface: nfsr-node: upper out${num_iface}
            # Configuring current netflow node
            $ngctl msg nfsr-node: setdlt { iface=${num_iface} dlt=1 }
            $ngctl msg nfsr-node: settimeouts { inactive=10 active=30 }
            # Collecting ingress & egress flows (require FreeBSD 7.2 and above)
            $ngctl msg nfsr-node: setconfig { iface=${num_iface} conf=11 }
       else
           # Connecting given iface to netflow node
            $ngctl connect $iface: nfsr-node: lower iface${num_iface}
            $ngctl connect $iface: nfsr-node: upper out${num_iface}
            # Collecting ingress & egress flows (require FreeBSD 7.2 and above)
            $ngctl msg nfsr-node: setconfig { iface=${num_iface} conf=11 }
       fi
       # Using next node
       num_iface=`expr $num_iface + 1`
       done
    # Connecting export hook of netflow node to virtual hub
    $ngctl mkpeer nfsr-node: hub export hubtmp
        $ngctl name nfsr-node: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: ksocket p${num_port} inet/dgram/udp
        $ngctl name nfex-hub:p${num_port} nfex-hub-p${num_port} 
        $ngctl msg nfex-hub:p${num_port} connect inet/$collector
        num_port=`expr $num_port + 1`
    done
}

nfsensor_stop()
{
    echo "Stoping flow_export netgraph structure."
       # Killing virtual hub node 
       $ngctl shutdown nfex-hub: > /dev/null 2>&1
       # Killing netflow node 
       $ngctl shutdown nfsr-node: > /dev/null 2>&1
}

run_rc_command "$1"

Поделиться сообщением


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

У меня сделано так:

 
        mkpeer vlan5: netflow lower iface0
        name vlan5:lower netflow
        connect vlan5: netflow: upper iface1
        connect netflow: netflow: out0 out1

        msg netflow: settimeouts { inactive=150 active=3600 }

все обсчитывается в обе стороны.

На 7.2 такой огород можно не городить, а задать конигурацию iface-ов и все будет считаться в обе стороны:

У меня работает вот так:

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

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

# 2. Functions of script (start/stop)
start_cmd="nfsensor_start"
stop_cmd="nfsensor_stop"

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

: ${flow_export_enable="NO"}
: ${flow_export_interfaces=""}
: ${flow_export_collectors="192.168.26.58:9995"}

# 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() {
        # Sanity check
        echo "Starting flow_export netgraph structure."
        # Checking if "export" interface specified.
        if [ -z "$flow_export_interfaces" ]
        then
                echo "[ERR]: 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 ${module}`
           if [ -z "$check" ]
           then
                   echo "[ERR]: Module ${module} is not loaded."
                   exit
           fi

        done
        # Creating nodes
        for iface in $flow_export_interfaces; do
           # Checkng if netflow node is created
           if [ $num_iface -eq 0 ]
           then
                   # Creating neflow node for given iface
            $ngctl mkpeer $iface: netflow lower iface${num_iface}
            $ngctl name $iface:lower nfsr-node
            $ngctl connect $iface: nfsr-node: upper out${num_iface}
            # Configuring current netflow node
            $ngctl msg nfsr-node: setdlt { iface=${num_iface} dlt=1 }
            $ngctl msg nfsr-node: settimeouts { inactive=10 active=30 }
            # Collecting ingress & egress flows (require FreeBSD 7.2 and above)
            $ngctl msg nfsr-node: setconfig { iface=${num_iface} conf=11 }
       else
           # Connecting given iface to netflow node
            $ngctl connect $iface: nfsr-node: lower iface${num_iface}
            $ngctl connect $iface: nfsr-node: upper out${num_iface}
            # Collecting ingress & egress flows (require FreeBSD 7.2 and above)
            $ngctl msg nfsr-node: setconfig { iface=${num_iface} conf=11 }
       fi
       # Using next node
       num_iface=`expr $num_iface + 1`
       done
    # Connecting export hook of netflow node to virtual hub
    $ngctl mkpeer nfsr-node: hub export hubtmp
        $ngctl name nfsr-node: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: ksocket p${num_port} inet/dgram/udp
        $ngctl name nfex-hub:p${num_port} nfex-hub-p${num_port} 
        $ngctl msg nfex-hub:p${num_port} connect inet/$collector
        num_port=`expr $num_port + 1`
    done
}

nfsensor_stop()
{
    echo "Stoping flow_export netgraph structure."
       # Killing virtual hub node 
       $ngctl shutdown nfex-hub: > /dev/null 2>&1
       # Killing netflow node 
       $ngctl shutdown nfsr-node: > /dev/null 2>&1
}

run_rc_command "$1"

Ну собсно аналогичный вашему скриптовый костыль быль прикручен перед созданием темы на форуме =)

Только не с 11, а с 3 конфигом для ng_netflow.

 

Надеялся просто, как всегда сделать проще, да видать не судьба =)

 

Dm1try, у вас судя по скрипту создаётся по ноде ng_netflow для каждого vlan? Позвольте спросить: а зачем? Можно же обойтись всего одной :)

Или я просто немного не разобрался в принципе функционирования вашего скрипта?

Поделиться сообщением


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

Ну собсно аналогичный вашему скриптовый костыль быль прикручен перед созданием темы на форуме =)

Только не с 11, а с 3 конфигом для ng_netflow.

Насколько я помню у вас считается только в одном направлении, у меня в и входящий и исходящий через vlan.

 

Dm1try, у вас судя по скрипту создаётся по ноде ng_netflow для каждого vlan? Позвольте спросить: а зачем? Можно же обойтись всего одной :)

Или я просто немного не разобрался в принципе функционирования вашего скрипта?

Не разобрались - нода (сенсор) одна, к ней подключено соответ. число ifaceX и outX, по паре на один vlan.

 

 

Поделиться сообщением


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

Да, все конечно здорово, но кто-нибудь льет netflow c потока 1Gbit/s (суммарно и входящий и исходящий) или только я один такой идиот, и нужно менять схему учета?

Поделиться сообщением


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

Ну собсно аналогичный вашему скриптовый костыль быль прикручен перед созданием темы на форуме =)

Только не с 11, а с 3 конфигом для ng_netflow.

Насколько я помню у вас считается только в одном направлении, у меня в и входящий и исходящий через vlan.

На vlan считает оба направления с 3 конфигом.

 

Да, все конечно здорово, но кто-нибудь льет netflow c потока 1Gbit/s (суммарно и входящий и исходящий) или только я один такой идиот, и нужно менять схему учета?
На данный момент 3000 абонентов генерируют 950 Мбит суммарно вход/выход, uplink и downlink. Но на той машине схема другая немного - em0 вход/em1 выход без всяких vlan и т.п.

На нём поднят шейп, нат, netflow - роутер на 30% нагружен. Оптимизировать схему всё руки никак не дойдут.

 

Поделиться сообщением


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

На данный момент 3000 абонентов генерируют 950 Мбит суммарно вход/выход, uplink и downlink. Но на той машине схема другая немного - em0 вход/em1 выход без всяких vlan и т.п.

На нём поднят шейп, нат, netflow - роутер на 30% нагружен. Оптимизировать схему всё руки никак не дойдут.

Т.о. ng_netflow у Вас привязана в физическим интерфейсам без какой-либо хитрой конфигурации (сливаюся только входящие потоки на интерфейс), я правильно понимаю?

Поделиться сообщением


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

На данный момент 3000 абонентов генерируют 950 Мбит суммарно вход/выход, uplink и downlink. Но на той машине схема другая немного - em0 вход/em1 выход без всяких vlan и т.п.

На нём поднят шейп, нат, netflow - роутер на 30% нагружен. Оптимизировать схему всё руки никак не дойдут.

Т.о. ng_netflow у Вас привязана в физическим интерфейсам без какой-либо хитрой конфигурации (сливаюся только входящие потоки на интерфейс), я правильно понимаю?

В схеме с vlan per user так сделать не получилось (считался только исходящий), и сделал как вы - по iface с 3 конфигом ng_netflow на каждый vlan - считается и входящий и исходящий.

А в схеме em0/em1 - вход/выход - сделано именно так - iface0 тупо к em1 - также считаются оба направления трафика.

 

Поделиться сообщением


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

В схеме с vlan per user так сделать не получилось (считался только исходящий), и сделал как вы - по iface с 3 конфигом ng_netflow на каждый vlan - считается и входящий и исходящий.

А в схеме em0/em1 - вход/выход - сделано именно так - iface0 тупо к em1 - также считаются оба направления трафика.

А мне что-то тяжко сливать:

last pid: 78727;  load averages:  1.61,  1.74,  1.80                                                                                                                                    up 60+02:25:12  23:44:04
93 processes:  8 running, 71 sleeping, 14 waiting
CPU:  0.0% user,  0.0% nice, 48.3% system,  3.5% interrupt, 48.3% idle
Mem: 443M Active, 422M Inact, 547M Wired, 160K Cache, 399M Buf, 2503M Free
Swap: 1024M Total, 1024M Free

  PID USERNAME  PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
   31 root      -68    -     0K    16K CPU2   2 479.4H 77.78% em2 taskq
   11 root      171 ki31     0K    16K RUN    3 1239.0 76.95% idle: cpu3
   13 root      171 ki31     0K    16K RUN    1 1216.9 71.39% idle: cpu1
   14 root      171 ki31     0K    16K RUN    0 1196.3 57.47% idle: cpu0
   33 root      -68    -     0K    16K CPU0   0 228.3H 47.46% em4 taskq
   34 root      -68    -     0K    16K CPU1   1 209.9H 32.76% em5 taskq
   12 root      171 ki31     0K    16K RUN    2 954.1H 22.75% idle: cpu2
   32 root      -68    -     0K    16K -      3 182.4H 19.97% em3 taskq
   15 root      -32    -     0K    16K WAIT   3  23.2H  2.39% swi4: clock sio

 

По em2 - идут два vlan-на на uplink-и, по всем остальным абоненты.

Ну и как-то так:

# netstat -w 1 
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
    348380     0  226868136     349787     0  228639090     0
    353217     0  227152554     353569     0  228314190     0
    349740     0  224858322     350983     0  226352456     0
    353370     0  227282344     354927     0  229131842     0
    357198     0  231921978     357971     0  233142260     0
    340989     0  219560880     341816     0  221137332     0
    366781     0  236841500     367752     0  238151876     0
    343344     0  221757348     343249     0  221490814     0
    351631     0  227192944     352004     0  228304120     0
    347605     0  220009330     349385     0  222528814     0
    346344     0  222624166     347474     0  224249284     0
    352724     0  227594854     353103     0  228484070     0
    356246     0  229826106     357192     0  231372864     0
    350573     0  227996614     351992     0  229736574     0
    359184     0  231357154     359887     0  232571486     0
    347838     0  224533924     349080     0  226132868     0

 

Ладно понял, надо разделять uplink-и по разным физическим интерфесам.

Кстати значениями timeout-ов не поделитесь?

Поделиться сообщением


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

Кстати значениями timeout-ов не поделитесь?
Для ng_netflow таймауты стандартные.

Но трафика мне кажется у вас ощутимо больше, чем у меня.

Поделиться сообщением


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

кстати да такая же схема подключения и не хотелось бы вешать пачки нод на каждый инетрфес

особенно в связи с этим: http://www.slashtmp.ru/2009/05/06/tag-ng_netflow/

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.