Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 netflow на gif интерфейсе   Denis Shaposhnikov   10 Jul 2006 13:57:45 
 Re: netflow на gif интерфейсе   Denis Shaposhnikov   10 Jul 2006 17:22:14 
 Re: netflow на gif интерфейсе   Denis Shaposhnikov   11 Jul 2006 16:29:40 
Архивное /ru.unix.bsd/77460a71c34a.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional