UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Cisco - NetFlowの設定



■NetFlowとは?


NetFlowとは1996年にCiscoによって開発されたIPトラフィックのフローを収集するためのプロトコルです。


ここで取り上げるNetFlowのバージョンは5であり、正式名称はTraditional NetFlow ( TNF ) と呼ばれます。


民間企業や大学、自治体などでこのNetFlowを有効にして運用しているのは見たことがありません。主にBGPを使ってフルルート運用をしているISP などで利用される技術だと思っています。ただ、ある程度大規模なネットワークとなれば市場を問わず、これを利用すればどのプロトコル、どの送信元がどの程度ネットワークを使っているのか、などを可視化することができますので設定して損はないと思います。


ルータやスイッチを流れるトラフィックの流量などを可視化するにはCactiなどを用いてSNMP経由で可能なのですが、そのトラフィックが何のトラ フィックであるのかというところまでは把握することができません。Traditional NetFlowは以下の7つの項目を用いてトラフィックのフローを識別することができます。


○ 宛先IPアドレス
○ 送信元IPアドレス
○ 宛先ポート番号
○ 送信元ポート番号
○ L3プロトコル
○ ToS
○ 入力インターフェイス


これら7つの項目は固定です。不要な項目があったとしても削ることはできません。また、この7つが全て合致するものが同一のフローと見なされます。一つでも異なるものがあればそれは別フローにみなされます。そしてこれらの情報をルータ内部にキャッシュ情報として保存し、それを外部にサーバなどに吐き出すという動作になります。従ってメモリの使用率やCPU使用率なども設定しない場合に比較して上昇はするのですが、爆発的に上がるというのは今のところ見たことはありませんのでリソース面はさほど心配することではないように思います。


■NetFlowの設定


Traditional NetFlowの設定例です。まずNetFlowを有効にするインターフェイスで以下のコマンドを実施します。

(config)# interface FastEthernet0/0
(config-if)# ip flow ingress
(config-if)# ip flow egress


NetFlowのデータの出力先をdestinationで指定します。IPアドレスの後ろの数字はポート番号であり、NetFlowコレクタと一致している必要があります。合わせて送信元インターフェイス、バージョンの指定も行なっています。

(config)# ip flow-export source FastEthernet0/0
(config)# ip flow-export version 5
(config)# ip flow-export destination 1.1.1.1 9996


NetFlowを有効にしたインターフェイスでトラフィックの多い順に表示することが可能です。下記ではバイト数が多い順に20表示するよう設定しています。


(config)# ip flow-top-talkers
(config-flow-top-talkers)# top 20
(config-flow-top-talkers)# sort-by bytes


タイマー関連の設定です。NetFlowのデータを外部に出力する際に、フローの有無に関係なくエクスポートするのがactiveタイマーでデフォルトが30分、フローがなくなってからエクスポートするのがinactiveタイマーでデフォルトが15秒です。activeタイマーがデフォルトだと長すぎるのでこれを1分に、inactiveを20秒に変更しておきます。


(config)# ip flow-cache timeout active 1
(config)# ip flow-cache timeout inactive 20

ルータ内部に保存できるキャッシュのエントリ数を以下で変更できます。デフォルトは64536ですが、1024-524288の間で任意に指定可能です。このコマンドを実施した際にはルータ自体を再起動かけるかまたはNetFlowを一旦オフにする必要があります。


(config)# ip flow-cache timeout entries 100000

デフォルトでは全てのパケットをキャッシュとして保存しますが、Xパケット中1パケットをサンプルとして収集するという設定も可能です。設定可能な範囲は1-65535です。小中規模環境であれば全てのフローを採取したほうが、より正確な状態を把握することが可能なのですが、例えば10GBインターフェイスが必須となるような大規模環境においては100パケットまたは1000パケットに1パケットを採取するのが一般的です。但しリソースが許容するようであれば全パケットを採取するのに越したことはありません。以下がその設定例で100パケットに1パケットを採取する例です。

(config)# flow-sampler-map SAMPLE
(config-sampler)# mode random one-out-of 100

(config)# interface FastEthernet0/0
(config-if)# flow-sampler SAMPLE


外部にキャッシュデータをエクスポートしている状況を確認するのが以下のコマンドです。


# show ip flow export
Flow export v5 is enabled for main cache
  Export source and destination details :
  VRF ID : Default
    Source(1)       192.168.0.1 (FastEthernet0/0)
    Destination(1)  1.1.1.1 (9996)
  Version 5 flow records
  2 flows exported in 2 udp datagrams
  0 flows failed due to lack of export packet
  2 export packets were sent up to process level
  0 export packets were dropped due to no fib
  0 export packets were dropped due to adjacency issues
  0 export packets were dropped due to fragmentation failures
  0 export packets were dropped due to encapsulation fixup failures

ルータ内部のキャッシュ情報を表示するのが以下のコマンドです。


# show ip cache flow
IP packet size distribution (1004 total packets):
   1-32   64   96  128  160  192  224  256  288  320  352  384  416  448  480
   .000 .000 .000 1.00 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000

    512  544  576 1024 1536 2048 2560 3072 3584 4096 4608
   .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 278544 bytes
  0 active, 4096 inactive, 2 added
  54 ager polls, 0 flow alloc failures
  Active flows timeout in 1 minutes
  Inactive flows timeout in 20 seconds
IP Sub Flow Cache, 25800 bytes
  0 active, 1024 inactive, 2 added, 2 added to flow
  0 alloc failures, 0 force free
  1 chunk, 1 chunk added
  last clearing of statistics never
Protocol         Total    Flows   Packets Bytes  Packets Active(Sec) Idle(Sec)
--------         Flows     /Sec     /Flow  /Pkt     /Sec     /Flow     /Flow
ICMP                 2      0.0       502   100      0.3      10.9      15.5
Total:               2      0.0       502   100      0.3      10.9      15.5

SrcIf         SrcIPaddress    DstIf         DstIPaddress    Pr SrcP DstP  Pkts

これらコマンドベースでフロー情報などを確認することが可能ですが日常的な運用の中でこれらを不定期に確認するというのも非現実的です。そこでこれらのキャッシュ情報を外部にエクスポートした先でグラフ化などを行うのが一般的で、それ用の有償製品なども発売されていますが、下記でフリーソフトであるflow-toolsを使用した手順を紹介しています。

http://www.unix-power.net/linux/flow-tools.html
http://www.unix-power.net/linux/FlowViewer.html



 関連情報
 NetFlowの設定
 Flexible NetFlowの設定
 flow-toolsのインストール
 FlowViewerのインストール
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.