|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Denis Shaposhnikov 2:550/5068 11 Jul 2006 16:29:40 To : All Subject : Re: netflow на gif интерфейсе -------------------------------------------------------------------------------- >>>>> "Denis" == Denis Shaposhnikov <dsh@vlink.ru> writes: Denis> netflow:export connect inet/flow_collector_ip:port Denis> SEQ Denis> # ifconfig ng0 inet 192.168.1.1/30 192.168.1.2 mtu 1480 up Denis> В работе еще не попробовал. А вот это уже рабочая конфигурация. Из /boot/loader.conf: ng_ether_load="YES" ng_gif_load="YES" ng_gif_demux_load="YES" ng_iface_load="YES" ng_ksocket_load="YES" ng_netflow_load="YES" ng_socket_load="YES" Из /etc/rc.conf: cloned_interfaces="gif0 vlan303 vlan323" ifconfig_gif0="tunnel 10.0.0.1 10.0.0.2 mtu 1480 up" ng_netflow_enable="YES" === /etc/start_if.gif0 === #! /bin/sh # /usr/sbin/ngctl -f- <<-SEQ mkpeer gif0: gif_demux lower gif name gif0:lower gif0_demux mkpeer gif0_demux: iface inet inet SEQ /sbin/ifconfig ng0 inet 10.0.1.1/30 10.0.1.2 mtu 1480 up ========================== === /usr/local/etc/rc.d/ng_netflow.sh === #!/bin/sh # # PROVIDE: ng_netflow # REQUIRE: DAEMON . /etc/rc.subr name="ng_netflow" rcvar=`set_rcvar` ng_netflow_start() { echo "Starting ${name}." /usr/sbin/ngctl -f- <<-SEQ mkpeer em1: netflow lower iface0 name em1:lower netflow connect em1: netflow: upper out0 connect vlan303: netflow: lower iface1 connect vlan303: netflow: upper out1 connect vlan323: netflow: lower iface2 connect vlan323: netflow: upper out2 connect em2: netflow: lower iface3 connect em2: netflow: upper out3 connect em3: netflow: lower iface4 connect em3: netflow: upper out4 connect fxp0: netflow: lower iface5 connect fxp0: netflow: upper out5 rmhook gif0_demux: inet connect gif0_demux: netflow: inet iface6 connect ng0: netflow: inet out6 msg netflow: setdlt { iface=6 dlt=12 } msg netflow: setifindex { iface=6 index=13 } mkpeer netflow: ksocket export inet/dgram/udp msg netflow:export connect inet/127.0.0.1:4444 SEQ } ng_netflow_stop() { echo "Stopping ${name}." /usr/sbin/ngctl -f- <<-SEQ rmhook gif0_demux: inet connect gif0_demux: ng0: inet inet shutdown netflow: SEQ } start_cmd="ng_netflow_start" stop_cmd="ng_netflow_stop" load_rc_config $name : ${ng_netflow_enable="NO"} run_rc_command "$1" ========================================= Пояснения. Здесь приведён фрагмент конфигурации роутера с несколькими ethernet интерфейсами, vlan'ами и одним gif туннелем между роутером (10.0.0.1) и cisco 1721 (10.0.0.2). Hа всех этих интерфейсах, кроме em0, который является parent interface для vlan'ов, снимается netflow. Так как по организации netflow на ethernet интерфейсах информации уже достаточно, останавливаться не буду. А вот про gif(4) я ничего не нашёл. Оказалось, это не сложно организовать. ng_gif(4) создаёт netgraph узлы для каждого gif(4) интерфейса. В моем случае, для интерфейса gif0 будет создан одноимённый узел. У него есть хук lower, куда поступают данные с gif0 интерфейса. Внимание! Hе содержимое туннеля, а пакеты самого туннеля. Т.е. ip, енкапсулированное в ip. А вот декапсулировать это умеет ng_gif_demux(4), который ожидает то, что ng_gif выводит в lower, на своём хуке gif. Вот этот фрагмент: mkpeer gif0: gif_demux lower gif name gif0:lower gif0_demux создаёт узел типа gif_demux с именем gif0_demux и подключает его хук gif к хуку lower узла gif0. А у ng_gif_demux есть в том числе и хук inet, в который выводятся уже декапсулированные данные туннеля, т.е. то, что в него запихнули на удалённой стороне. И получить эти данные может ng_iface, который ожидает их на своём хуке inet. Этот фрагмент: mkpeer gif0_demux: iface inet inet создает узел типа iface и подключает его хук inet к такому же хуку узла gif0_demux, который был создан выше. Таким образом, в start_if.gif0 получается интерфейс ng0, через который можно туннелировать данные на удаленный роутер. Если бы не необходимость в netflow, это можно было бы все сделать прямо на gif0, без использования netgraph подсистемы. Теперь ng_netflow.sh, который включает сбор статистики на интерфейсах и ее экспорт в коллектор. ng_netflow учитывает трафик, входящий в хук ifaceN и выпускает его через хук outN без изменений (об этом написано в ng_netflow(4)). В обратную сторону трафик проходит без учета. Для сбора статистики с gif, необходимо "врезать" ng_netflow в конструкцию, которая создается в start_if.gif0. Я сделал это между узлами gif0_demux и ng0, которые подключены друг к другу своими хуками inet. Сначала связь между узлами разрывается: rmhook gif0_demux: inet (т.е. отключается то, что подключено к хуку inet узла gif0_demux), а после этого gif0_demux подключается к хуку iface6 (следующему по порядку после подключения ethernet интерфейсов) узла netflow своим хуком inet и ng0 подключается своим inet к out6 этого же netflow: connect gif0_demux: netflow: inet iface6 connect ng0: netflow: inet out6 Таким образом, входящий через туннель трафик начинает учитываться. Я специально разделил создание туннеля и включение netflow на нем, что бы можно было netflow выключить, а туннель продолжил работать. См. ng_netflow_stop, где выполняется обратная процедура. Т.е. netflow изымается из той цепочки, по которой проходят туннельные данные. И напоследок мелкая настройка netflow. Следующий фрагмент: msg netflow: setdlt { iface=6 dlt=12 } говорит ng_netflow, что между iface6 и out6 ходит чистый ip, а не ethernet, как он считает по умолчанию. А msg netflow: setifindex { iface=6 index=13 } необходим для того, что ng_netflow правильно распознавал интерфейс, через который туннелированный трафик входит. Здесь указывается, что он входит через ng0, именно у этого интерфейса index=13. Если это не указать, то будет считаться, что такой трафик входит через интерфейс gif0. Все бы ничего, но в качестве исходящего интерфейса ng_netflow указывает ng0. Вот что бы эту путаницу убрать и используется setifindex. -- DSS5-RIPE DSS-RIPN 2:550/5068@fidonet 2:550/5069@fidonet xmpp:dsh@vlink.ru mailto:dsh@vlink.ru http://neva.vlink.ru/~dsh/ --- Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.19 (berkeley-unix) * Origin: Solar system, Jupiter (2:550/5068@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/77460a71c34a.html, оценка из 5, голосов 10
|