The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

NG_NETFLOW - Руководство по интерфейсам ядра FreeBSD (netflow traffic freebsd netgraph)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: netflow, traffic, freebsd, netgraph,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-12 10:38:44 Subject: NG_NETFLOW - Руководство по интерфейсам ядра FreeBSD

Имя

ng_netflow -- реализация протокола Cisco NetFlow

Применение

    
         #include <sys/types.h>
         #include <netinet/in.h>
         #include <netgraph/netflow/ng_netflow.h>
    
    

Описание

Нода ng_netflow реализует протокол Cisco NetFlow на маршрутизаторах, работающих под управлением FreeBSD. Нода ng_netflow прослушивает входящий трафик и идентифицирует в нем уникальные потоки. Потоки идентифицируются по IP адресам конечных точек, портам TCP/UDP, ToS и индексу входного интерфейса. Потоки экспортируются из ноды в формате NetFlow version 5. Причиной экспорта могут быть следущие события:
  • RST или FIN TCP пакет
  • Таймаут активного потока. Потоки не могут жить больше чем указанный период времени. Значение по умолчанию - 1800 секунд (30 минут).
  • Таймаут неактивного потока. Поток был неактивен в течение указанного периода времени. Значение по умолчанию - 15 секунд.

Крючки (HOOKS)

Эта нода поддерживает максимальное число крючков, равное NG_NETFLOW_MAXIFACES. Они обозначаются iface0, iface1 и т.д. В добавок существует еще один крючок, называемый export. Нода читает данные из крючков iface* и посылает данные на крючок export. Крючок export подсоединяется к крючкам inet/dgram/udp ng_ksocket(4).

Управляющие сообщения

Нода поддерживает стандартные управляющие сообщения. Дополнительные команды:

NGM_NETFLOW_INFO

Возвращает статистику работы ноды и значения таймаутов в struct ng_netflow_info.

NGM_NETFLOW_IFINFO

Возвращает информацию о крючке ifaceN. В качестве аргумента принимает номер крючка.

NGM_NETFLOW_SETDLT

Устанавливает тип данных на крючке ifaceN. В настоящее время поддерживаются raw IP datagrams и Ethernet. В качестве аргумента используется struct ng_netflow_setdlt:
    
    struct ng_netflow_setdlt {
    			 uint16_t iface;	 /* which iface to operate on */
    			 uint8_t  dlt;		 /* DLT_XXX from bpf.h */
    			 };
    
    
Запрашиваемый крючок ifaceN должен быть присоединен, в противном случае возвращается сообщение об ошибке.

NGM_NETFLOW_SETIFINDEX

В некоторых случаях ng_netflow не способен определить входящий интерфейс пакета. Это может случиться, если трафик попадает в ноду ng_netflow перед тем, как попасть в очередь интерфейса. Для примера, это может случиться при отслеживании трафика между синхронной линией и ng_iface(4). В этом случае, входящий индекс связывается с этим крючком. Индекс интерфейса может быть определен через if_nametoindex(3) из пользовательского окружения. В качестве аргумента принимается struct ng_netflow_setifindex:
    
    struct ng_netflow_setdlt {
    			 uint16_t iface;	 /* which iface to operate on */
    			 uint8_t  dlt;		 /* DLT_XXX from bpf.h */
    		 };
    
    
Запрашиваемый крючок ifaceN должен быть присоединен, в противном случае возвращается сообщение об ошибке.

NGM_NETFLOW_SETTIMEOUTS

Устанавливает значение таймаутов в секундах. В качестве аргумента требует struct ng_netflow_settimeouts :
    
    struct ng_netflow_settimeouts {
    			 uint32_t	 inactive_timeout;
    			 uint32_t	 active_timeout;
    		 };
    
    

NGM_NETFLOW_SHOW

Это управляющее сообщение указывает ноде сформировать дамп записей кэша потока. Оно вызывается из flowctl(8), в отличии от остальных, вызываемых из ngctl(8).

Управляющие сообщения ASCII

У бинарных управляющих сообщений есть ASCII аналоги. Поддерживаемыми ASCII командами являются:
    
    NGM_NETFLOW_INFO	      "info"
    NGM_NETFLOW_IFINFO       "ifinfo %u"
    NGM_NETFLOW_SETDLT       "setdlt { iface = %u dlt = %u }"
    NGM_NETFLOW_SETIFINDEX   "setifindex { iface = %u index = %u }"
    NGM_NETFLOW_SETTIMEOUTS  "settimeouts { inactive = %u active = %u }"
    
    

Отключение

Ноду можно отключить, послав управляющее сообщение NGM_SHUTDOWN. Отключение так же происходит при отсутствии подключенных крючков(hook).

Примеры

Самая простая из возможных - конфигурация с одним интерфейсом Ethernet, где и осуществляется прослушивание потока.
    
    /usr/sbin/ngctl -f- <<-SEQ
       mkpeer fxp0: tee lower right
       connect fxp0: fxp0:lower upper left
       mkpeer fxp0:lower netflow right2left iface0
       name fxp0:lower.right2left netflow
       mkpeer netflow: ksocket export inet/dgram/udp
       msg netflow:export connect inet/10.0.0.1:4444
    SEQ
    
    
Рассмотрим более сложный пример. Маршрутизатор с двумя интерфейсами: fxp0 и ng0, на которых включена поддержка NetFlow. Обратите внимание, что нода ng0, в этом примере, подсоединена к ng_tee(4).
    
    /usr/sbin/ngctl -f- <<-SEQ
       # connect ng0's tee to iface0 hook
       mkpeer ng0:inet netflow right2left iface0
       name ng0:inet.right2left netflow
       # set DLT to raw mode
       msg netflow: setdlt { iface=0 dlt=12 }
       # set interface index (5 in this example)
       msg netflow: setifindex { iface=0 index=5 }
    
       # Create tee on fxp0, and connect it to iface1 hook
       mkpeer fxp0: tee lower right
       connect fxp0: fxp0:lower upper left
       name fxp0:lower fxp0_tee
       connect fxp0_tee: netflow: right2left iface1
    
       # Create ksocket node on export hook, and configure it
       # to send exports to proper destination
       mkpeer netflow: ksocket export inet/dgram/udp
       msg netflow:export connect inet/10.0.0.1:4444
    SEQ
    
    

Смотри также

netgraph(4), ng_ksocket(4), ng_tee(4), ngctl(8), http://www.cisco.com/warp/public/cc/pd/iosw/ioft/neflct/tech/napps_wp.htm.

Авторы

Нода ng_netflow была написана Глебом Смирновым <glebius@FreeBSD.org> , и базируется на ng_ipacct Романа Палагина <romanp@unshadow.net> .

Ошибки

Нода ng_netflow не показывает информацию о номере AS. Это происходит из-за недостатка информации в таблице маршрутизации ядра. Однако, эта информация может быть введена в ядро от демона маршрутизации типа GNU Zebra. Возможно, эти функциональные возможности будут доступны в следующих релизах.

Перевод: Сгибнев Михаил

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor