NetFlowとはネットワークの状態を監視サーバに通知するCisco独自のプロトコルです。Ciscoルータでパケットを収集し、NetFlow形式でNMS(Network Management System)に転送する設定をまとめます。
NetFlow 基本設定
基本設定
以下のコマンドでパケットを収集する対象を定義します。
Router(config)# interface <interface> Router(config-if)# ip flow { egress | ingress }
NetFlowのversion, 宛先IPアドレス, 送信元interfaceを指定します。
Router(config)# ip flow-export version { 1 | 5 | 9 } Router(config)# ip flow-export destination <nms_addr> <udp_port> Router(config)# ip flow-export source <interface>
デフォルトで収集される情報に加え、以下の情報も含めて収集する事ができます。なお、BGP関連の情報はNetFlowのバージョンによって取得可能な情報が異なります。
Router(config)# ip flow-export version { 1 | 5 | 9 } [ origin-as | peer-as ] [ bgp-nexthop ] Router(config)# ip flow-capture [ icmp | ip-id | mac-addresses | packet-length | ttl | vlan-id ]
メモリに保存するフロー数やキャッシュに記憶する時間を定義する事ができます。
timeout activeで定義される時間は、active flowがキャッシュ内に保存される時間です。この時間(デフォルト30分)がタイムアウトすると収集した情報をNetFlowを収集するサーバへ通知します。端的に言えば、active flowをサーバに通知する間隔と同じような意味です。23分かかる大きなファイル転送でtimeoutが5分の場合を例に挙げると、5分経過, 10分経過, 15分経過, 20分経過の時点で収集したflowをサーバに転送するという意味になります。
timeout inactiveで定義される時間は、最後のパケットが検出されてからflowが削除される時間です。このパラメータはactiveではないflowを削除する事によって、リソース不足により新しいフローが検出できなくなる事を防止するためのパラメータです。
Router(config)# ip flow-cache entries <num> Router(config)# ip flow-cache timeout active <min> Router(config)# ip flow-cache timeout inactive <sec>
設定確認
以下showコマンドで、NetFlowをどのサーバに転送するのかを確認する事ができます。
R1#show ip flow export Flow export v5 is enabled for main cache Exporting flows to 192.168.1.254 (9999) Exporting using source IP address 192.168.1.1 Version 5 flow records, origin-as 34 flows exported in 20 udp datagrams 0 flows failed due to lack of export packet 19 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 R1#
以下showコマンドでメモリ内にキャッシュされたNetFlowに関する情報を表示させる事ができます。
R1#show ip cache flow IP packet size distribution (27147 total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .000 .003 .002 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608 .993 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 IP Flow Switching Cache, 278544 bytes 2 active, 4094 inactive, 86 added 1267 ager polls, 0 flow alloc failures Active flows timeout in 1 minutes Inactive flows timeout in 10 seconds IP Sub Flow Cache, 21640 bytes 4 active, 1020 inactive, 145 added, 75 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 TCP-Telnet 3 0.0 31 41 0.0 12.6 10.8 UDP-other 75 0.0 1 72 0.0 0.0 11.6 ICMP 6 0.0 4495 500 10.1 42.0 5.3 Total: 84 0.0 323 497 10.1 3.4 11.1 SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Et0/0 192.168.12.2 Null 224.0.0.9 11 0208 0208 1 Et0/0 192.168.12.2 Local 10.1.1.1 06 7B75 0017 3 R1#
showコマンドの読み方がやや複雑なので、詳しく説明します。”packet size distribution”はパケットサイズの分散と表します。例えば以下の出力ならば、96byteから127byteの範囲のパケットが全体の0.2%である事を表します。
IP packet size distribution (27147 total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .000 .003 .002 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000 512 544 576 1024 1536 2048 2560 3072 3584 4096 4608 .993 .000 .000 .000 .000 .000 .000 .000 .000 .000 .000
以下の部分からactive flows timeoutとinactive flows timeoutを確認する事ができます。
IP Flow Switching Cache, 278544 bytes 2 active, 4094 inactive, 86 added 1267 ager polls, 0 flow alloc failures Active flows timeout in 1 minutes Inactive flows timeout in 10 seconds
flowの統計情報が以下の部分から読み取れます。
last clearing of statistics never Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec) -------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow TCP-Telnet 3 0.0 31 41 0.0 12.6 10.8 UDP-other 75 0.0 1 72 0.0 0.0 11.6 ICMP 6 0.0 4495 500 10.1 42.0 5.3 Total: 84 0.0 323 497 10.1 3.4 11.1
現在、キャッシュ上に保存されているflowを読み取る事ができます。実践的ではありませんが、inactive timeoutを長めに設定すると、キャッシュ上のflowを確認しやすくなります。
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Et0/0 192.168.12.2 Null 224.0.0.9 11 0208 0208 1 Et0/0 192.168.12.2 Local 10.1.1.1 06 7B75 0017 3
NetFlow Top Talkers
基本設定
NetFlow Top Talkersとはflowを大きい順に並び変える機能です。”ip flow egress”などのコマンドで収集対象を定義した後に、以下のようなコマンドを入力する事でTop Talkersを使用する事ができます。
Router(config)# interface <interface> Router(config-if)# ip flow { egress | ingress } Router(config)# ip flow-top-talkers Router(config-flow-top-talkers)# top <num> Router(config-flow-top-talkers)# sort-by { bytes | packets } Router(config-flow-top-talkers)# match protocol { <protocol_number> | tcp | udp } Router(config-flow-top-talkers)# match source address <addr>/<mask> Router(config-flow-top-talkers)# cache-timeout <milisec>
設定確認
集計結果を確認するには以下のようなコマンドを使用します。実践的ではありませんが、cache-timeoutを大きめの値に設定すると、動作確認しやすくなります。
R2#show ip flow top-talkers SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts Et0/0 10.3.3.3 Et0/1 10.11.11.11 01 0000 0800 10 Et0/0 10.33.33.33 Et0/1 10.11.11.11 01 0000 0800 10 Et0/1 10.11.11.11 Et0/0* 10.3.3.3 01 0000 0000 10 Et0/1 10.11.11.11 Et0/0* 10.33.33.33 01 0000 0000 10 Et0/0 192.168.23.3 Et0/1 10.11.11.11 01 0000 0800 10 Et0/1 10.11.11.11 Et0/0* 192.168.23.3 01 0000 0000 10 6 of 10 top talkers shown. 6 flows processed. R2#
現時点(2012/04/08)では、以下のようなprotocol numberの指定は機能しないようです。pingの通信を発生させても、top-talkerの対象として集計させませんでした。
Router(config)# ip flow-top-talkers Router(config-flow-top-talkers)# top 10 Router(config-flow-top-talkers)# match protocol 1
NetFlow Aggregation Cache
基本設定
通常のNetFlowは送信元IPアドレスと宛先IPアドレスの組でflowを集計します。一方、Aggregation Cacheという機能は、送信元IPアドレスまたは宛先IPアドレスをある程度集約して集計する機能です。NetFlowによる分析結果が細かすぎて使いづらい場合は、Aggregation Cacheを使用する事でマクロな視点の分析が可能になります。
“ip flow egress”などのコマンドで収集対象を定義した後に、以下のようなコマンドを入力する事でAggregation Cacheを使用する事ができます。なお、“enable”を入力しないとこの機能が有効にならない事に注意して下さい。
Router(config)# ip flow-aggregation cache {source-prefix | destination-prefix } Router(config-flow-cache)# cache entries <num> Router(config-flow-cache)# cache timeout active <sec> Router(config-flow-cache)# cache timeout inactive <sec> Router(config-flow-cache)# export version { 8 | 9 } Router(config-flow-cache)# export destination <addr> Router(config-flow-cache)# mask { source | destination } minimum 8 Router(config-flow-cache)# enable
設定確認
集計結果を確認するには以下のようなコマンドを使用します。
R2#show ip cache flow aggregation destination-prefix IP Flow Switching Cache, 69636 bytes 2 active, 1022 inactive, 9 added 1209 ager polls, 0 flow alloc failures Active flows timeout in 30 minutes Inactive flows timeout in 10 seconds IP Sub Flow Cache, 5896 bytes 2 active, 254 inactive, 9 added, 9 added to flow 0 alloc failures, 0 force free 1 chunk, 1 chunk added Minimum destination mask is configured to /30 Dst If Dst Prefix Msk AS Flows Pkts B/Pk Active Et0/1 192.168.12.0 /30 0 1 6 48 2.2 Et0/0 10.3.3.3 /32 0 1 9 43 2.2 R2#
IPv6 NetFlow
基本設定
IPv6もNetFlowを使用する事ができます。以下設定例のように、コマンドライン体系はIPv4と殆ど同じです。
ipv6 cef ! interface Ethernet0/0 ipv6 flow ingress ipv6 flow egress ! ipv6 flow-export version 9 origin-as ipv6 flow-export destination 10.1.1.1 9999
デフォルトで無効化されているIPv6 CEFの有効化が必要である事に注意して下さい。ちなみに、CEFの無効化を忘れた場合は、以下のような親切なエラーメッセージが表示されます。
R2(config-if)#ipv6 flow egress % IPv6 cef is not enabled R2(config-if)#
設定確認
確認コマンドもIPv4と同じです。
R2#show ipv6 flow cache IP packet size distribution (2884 total packets): 1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480 .000 .000 .000 .998 .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, 475168 bytes 3 active, 4093 inactive, 6 added 87 ager polls, 0 flow alloc failures Active flows timeout in 30 minutes Inactive flows timeout in 15 seconds IP Sub Flow Cache, 33928 bytes 3 active, 1021 inactive, 6 added, 6 added to flow 0 alloc failures, 0 force free 1 chunk, 1 chunk added SrcAddress InpIf DstAddress OutIf Prot SrcPrt DstPrt Packets FE80::3 Et0/0 FF02::9 Local 0x11 0x0209 0x0209 1 2001:0:0:23::3 Et0/0 2001:1:1:1::1 Et0/1 0x3A 0x0000 0x8000 1441 2001:1:1:1::1 Et0/1 2001:0:0:23::3 Et0/0 0x3A 0x0000 0x8100 1440 R2#