xFlow(NetFlow/sFlow/IPFIX)の基礎知識についてまとめました。
用語だけは聞いたことがあるけれど中身は全く知らない、というかた向けの資料です。
xFlow(NetFlow/sFlow/IPFIX)の基礎知識についてまとめました。
用語だけは聞いたことがあるけれど中身は全く知らない、というかた向けの資料です。
GenieATMに新たなエクスポータの定義を追加したのにスナップショットやレポートでトラフィックが表示されない場合の標準的なご確認項目,切り分け方法をご紹介します。
CLIのEnableモードよりpingコマンドでエクスポータとのネットワーク到達性を確認します。
ATM90 # ping 172.16.2.224 PING 172.16.2.224 (172.16.2.224) 56(84) bytes of data. 64 bytes from 172.16.2.224: icmp_req=1 ttl=64 time=1.53 ms 64 bytes from 172.16.2.224: icmp_req=2 ttl=64 time=0.411 ms 64 bytes from 172.16.2.224: icmp_req=3 ttl=64 time=0.422 ms ^C --- 172.16.2.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.411/0.790/1.538/0.529 ms ATM90 #
(Ctrl+Cで停止します)
CLIのEnableモードよりshow runningコマンドによりaccess group,firewall enableの設定を表示し,エクスポータからフロー受信ポートへのUDPパケットがブロックされていないことを確認します。
ATM90 # show running #### show running configure #### ! ! hostname ATM90 clock timezone JST +9 ip domain-name jp.genie-networks.com ! interface ethernet 0 ip address 172.16.2.90 255.255.255.0 ip address 172.16.2.92 255.255.255.0 secondary ! : (中略) : ip route 0.0.0.0 0.0.0.0 172.16.2.1 0 access group 172.16.0.0 netmask 255.255.0.0 protocol ip permit firewall enable module id collector 3001 : (中略) : ! ATM90 #
flow dumpコマンドをsrc hostにエクスポータのIPアドレスを指定して実行し,フローレコードが届いているかを確認します。
ATM90 (debug)# flow dump Please input nfdump parameters and press return -a "src host 172.16.2.224" Do you want to add "more" command behind the nfdump parameters to prevent terminal session crashed?(Y/N) y nfdump: listening on device eth0 expression: src host 172.16.2.224 11:04:23 172.16.2.224.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 1, len = 224 ----------------------------------------------------------------------- | version | ip_ver | agent_addr | seq_number | | 4 | 1 | 172.16.2.224 | 61884802 | ----------------------------------------------------------------------- | switch_uptime | count | | 1190572734 | 1 | ------------------------------------ flow 1 sample_type 1 seq_number 84086197 sample src_id_type 0 src_index_value 33 sampling_interval 256 sample_pool 51229952 drops 0 input 33 output 0 packet_data_type 1 header_protocol 1 frame_length 1466 length_of_header 128 Destination 29:73:08:0c:34:e3 Source 03:d7:55:2b:21:c0 type 0x8100 priority 0 CFI 0 id 102 type 0x800 version 4 header_length 20 tos 0x0 total_length 1444 id 0x44cc flag 0x0 flag_offset 0x0 time_to_live 254 protocol 0x11 checksum 0x5538 source ip address 10.144.8.2 dest ip address 172.16.2.149 source port number 56488 dst port number 2055 udp_length 1424 udp_checksum 0x5ea5 data 82 bytes n_extended_data 1 extened_data_type 1 src vlan 102 src priority 0 dest vlan 0 dest priority 0 ------------------------------------------------------------------------------------- 11:04:24 172.16.2.224.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 1, len = 216 ----------------------------------------------------------------------- | version | ip_ver | agent_addr | seq_number | | 4 | 1 | 172.16.2.224 | 61884803 | ----------------------------------------------------------------------- | switch_uptime | count | | 1190573744 | 1 | ------------------------------------ flow 1 sample_type 1 seq_number 6101417 sample src_id_type 0 src_index_value 30 sampling_interval 256 sample_pool 1561962752 drops 0 input 30 output 0 packet_data_type 1 ATM90 (debug)#
上記の例ではsFlowバージョン4のフローサンプルレコードが届いていることが分かります。
確認ポイント
GenieATMが受信しているフローレコードを表示します。
書式
flow dump
[-a | -h] [-i <interface>] [-c <count>]"<expr>"
主な追加パラメータ
キーワード | 説明 |
---|---|
-a | -h | -a: すべての属性を表示 -h: フローパケットのヘッダ部分のみ表示 (指定なし): フローパケットの概要のみ表示 |
-i <interface> | フローを受信するインターフェースを指定。省略するとeth0 |
-c <count> | 指定した件数のフローパケットを受信するとコマンドを終了する。省略した場合は停止するまでフローを表示し続ける。 |
"<expr>" | 表示するフローパケットの条件
構造 <expr> := {<expr> and <expr> | <expr> or <expr> | not <expr> | (<expr>)} 表記 <expr> := {{src | dst | [src | dst] host} <ipv4 address> | [src | dst] net <ipv4 prefix> | [src | dst] port <port no> } |
デフォルト設定
なし
コマンドモード
Debug Mode
説明
Please input nfdump parameters and press return
が表示されてから入力します。
注意事項
実行例
# debugmode (debug)# flow dump Please input nfdump parameters and press return "host 172.16.2.24" Do you want to add "more" command behind the nfdump parameters to prevent terminal session crashed?(Y/N) y nfdump: listening on device eth0 expression: host 172.16.2.24 15:42:29 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 2, len = 348 15:42:31 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1200 15:42:31 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 2, len = 424 15:42:32 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 3, len = 568 15:42:33 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 4, len = 748 15:42:34 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1256 15:42:34 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 6, len = 1224 : (中略) : 15:42:35 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1256 15:42:35 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1312 15:42:35 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1256 15:42:35 172.16.2.24.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1256 (debug)#
(debug)# flow dump Please input nfdump parameters and press return -h "src 172.16.2.10" Do you want to add "more" command behind the nfdump parameters to prevent terminal session crashed?(Y/N) y nfdump: listening on device eth0 expression: src 172.16.2.10 15:00:24 172.16.2.10.44080 > 172.16.2.90.9996 : netflow ver = 5, count = 30, len = 1464 ----------------------------------------------------------------------- | version| count | sys_uptime | unix_secs | unix_nsecs | | 5 | 30 | 249804000 | 1450332048 | 303589000 | ----------------------------------------------------------------------- | flow_sequence |type|id |sampling| | 1624560 | 1 | 1 | 0 | ------------------------------------ 15:00:25 172.16.2.10.35074 > 172.16.2.90.9996 : netflow ver = 5, count = 30, len = 1464 ----------------------------------------------------------------------- | version| count | sys_uptime | unix_secs | unix_nsecs | | 5 | 30 | 249804000 | 1450332048 | 352822000 | ----------------------------------------------------------------------- | flow_sequence |type|id |sampling| | 1624500 | 1 | 1 | 0 | ------------------------------------ 15:00:25 172.16.2.10.62301 > 172.16.2.90.9996 : netflow ver = 5, count = 30, len = 1464 ----------------------------------------------------------------------- | version| count | sys_uptime | unix_secs | unix_nsecs | | 5 | 30 | 249804000 | 1450332048 | 372876000 | ----------------------------------------------------------------------- | flow_sequence |type|id |sampling| (debug)#
(debug)# flow dump Please input nfdump parameters and press return -a -c 2 "port 6343" Do you want to add "more" command behind the nfdump parameters to prevent terminal session crashed?(Y/N) n nfdump: listening on device eth0 expression: port 6343 18:03:19 172.16.2.224.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 7, len = 1200 ----------------------------------------------------------------------- | version | ip_ver | agent_addr | seq_number | | 4 | 1 | 172.16.2.224 | 61826628 | ----------------------------------------------------------------------- | switch_uptime | count | | 1129306885 | 7 | ------------------------------------ flow 1 sample_type 1 seq_number 83992247 sample src_id_type 0 src_index_value 33 sampling_interval 256 sample_pool 27178752 drops 0 input 33 output 0 packet_data_type 1 header_protocol 1 frame_length 1518 length_of_header 128 Destination 02:9d:80:9c:73:3a Source 66:27:c8:20:26:b7 type 0x8100 priority 0 CFI 0 id 103 type 0x800 version 4 header_length 20 tos 0x0 total_length 1500 id 0x8d2d flag 0x2 flag_offset 0x0 time_to_live 64 protocol 0x6 checksum 0x492c source ip address 172.16.3.91 dest ip address 172.16.3.71 source port number 57185 dst port number 548 sequence number 3772736637 ack number 4002378524 header length 32 tcp flag -A---- window size 32768 tcp_checksum 0xb867 urgent pointer 0 data 70 bytes n_extended_data 1 extened_data_type 1 src vlan 103 src priority 0 dest vlan 0 dest priority 0 ------------------------------------------------------------------------------------- flow 2 sample_type 1 seq_number 83992248 sample src_id_type 0 src_index_value 33 sampling_interval 256 sample_pool 27179008 drops 0 input 33 output 0 packet_data_type 1 header_protocol 1 frame_length 1518 length_of_header 128 Destination 02:9d:80:9c:73:3a Source 66:27:c8:20:26:b7 type 0x8100 priority 0 CFI 0 id 103 type 0x800 version 4 header_length 20 tos 0x0 total_length 1500 id 0xd6da flag 0x2 flag_offset 0x0 time_to_live 64 protocol 0x6 checksum 0xff7e source ip address 172.16.3.91 dest ip address 172.16.3.71 source port number 57185 dst port number 548 sequence number 3772842717 ack number 4002378524 header length 32 tcp flag -A---- window size 32768 tcp_checksum 0xf32d urgent pointer 0 data 70 bytes n_extended_data 1 extened_data_type 1 src vlan 103 src priority 0 dest vlan 0 dest priority 0 ------------------------------------------------------------------------------------- flow 3 sample_type 1 seq_number 29701300 sample src_id_type 0 src_index_value 32 sampling_interval 256 sample_pool 3308565504 : (中略) : ------------------------------------------------------------------------------------- 18:03:19 172.16.2.224.8888 > 172.16.2.90.6343 : sflow ver = 4, count = 8, len = 1336 ----------------------------------------------------------------------- | version | ip_ver | agent_addr | seq_number | | 4 | 1 | 172.16.2.224 | 61826629 | ----------------------------------------------------------------------- | switch_uptime | count | | 1129307016 | 8 | ------------------------------------ flow 1 sample_type 1 seq_number 29701304 sample src_id_type 0 src_index_value 32 sampling_interval 256 sample_pool 3308566528 drops 0 input 32 output 0 packet_data_type 1 header_protocol 1 frame_length 70 length_of_header 70 Destination 66:27:c8:20:26:b7 Source 02:9d:80:9c:73:3a type 0x8100 priority 0 CFI 0 id 103 type 0x800 version 4 header_length 20 tos 0x0 total_length 52 id 0x45c6 flag 0x2 flag_offset 0x0 time_to_live 64 protocol 0x6 checksum 0x963b source ip address 172.16.3.71 dest ip address 172.16.3.91 source port number 548 dst port number 57185 sequence number 4002378758 ack number 3773996523 header length 32 tcp flag -A---- window size 19450 tcp_checksum 0xe2e0 urgent pointer 0 data 12 bytes n_extended_data 0 ------------------------------------------------------------------------------------- : (後略) (debug)#
ここでは,レポートグラフ作成時にトラフィックを集計する時間範囲についてご説明します。
GenieATMのトラフィックレポートは,主にフローレコードとSNMPで取得したトラフィックが元データになります。
フローレコードはルータから随時送られてきており,コレクタへの到着時刻に基づいて集計されます。30分単位のレポートであれば,0分0秒~29分59秒に届いたフローを集計して0分時点のプロット値を算出し,30分0秒~59分59秒のフローで30分時点のプロット値を算出します。同様に,5分単位のレポートは,例えば13時30分0秒~13時34分59秒のフローを集計して13時30分の値をプロットします。
一方,SNMPベースのレポートは,5分ごとの累積トラフィック値の取得に基づいて算出されます。取得は,毎時1分,6分,…56分に行われ,例えば13時31分に取得した値は,13時26分に取得した値からの増分を取ることで5分間のトラフィックを算出し,13時30分時点のトラフィックとしてプロットします。
このように,フローベースとSNMPベースで同じ時刻のプロットでも集計範囲が異なりますので注意が必要です。
GenieATMでホームネットワークやサブネットワークを定義する際は,通常ネットワーク境界も合わせて定義します。これにより,あるトラフィックが経由した複数のルータがフローを生成した場合に,フローコレクタがそれらのフローレコードを別々のトラフィックとして計上してしまう「ダブルカウント問題」を防ぐことができます。
下図のようにインタネットから4台のルータを経由してトラフィックがサブネットワークに届いた場合,すべてのルータがフローを生成する設定であればコレクタは4つのフローレコードを受け取ることになります。一般的にダブルカウントを避けるには,名寄せにより同一トラフィックを表すフローレコードを特定し,重複分を消し込む必要がありますが,非常に複雑な処理を要します。
しかし,例えばインターネット-ホームネットワーク間のトラフィックのみに着目したレポートを作成するのであれば,ネットワーク境界を定義することでダブルカウントを避けることができます。下図のように2つのルータR1,R2のインターネットに接するインターフェイスを境界と定めると,インターネット-ホームネットワーク間のトラフィックは,これらのインターフェイスを一度だけ通過します。したがって,そのときに発生するフローレコードのみを集計すれば正しいトラフィックレポートを作ることができます。
この例で,計上されるのはR1が生成するフローレコードのみです。トラフィックはR2も通りますが,境界インターフェイスは通過しないためR2のフローレコードは対象となりません。
同様にサブネットワークについても境界を設定することで,インターネットからのトラフィックもサブネットワーク間のトラフィックも正確に算出することができます。以下の例では,真ん中のサブネットワークの境界を定義することにより,他のサブネットワークからのトラフィックも,インターネットからのトラフィックも重複なくカウントすることができます。