■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 |