NetFlowは、1996年頃にCiscoルータに導入された機能で、インターフェースに出入りするIPネットワークトラフィックを収集する機能です。NetFlowによって提供されるデータを分析することで、ネットワーク管理者は送信元トラフィックと宛先トラフィック、サービスクラス、輻輳の原因などを特定できます。NetFlowを使用した典型的なフロー監視設定は、主に3つのコンポーネントで構成されます。[ 1 ]
NetFlow をサポートするルータとスイッチは、NetFlow が有効になっているすべてのインターフェイスでIPトラフィック統計を収集し、後でそれらの統計を NetFlow レコードとして少なくとも 1 つの NetFlow コレクター (通常は実際のトラフィック分析を実行するサーバー) にエクスポートできます。
シスコ標準のNetFlowバージョン5では、フローを、フローの一意のキーを定義する7つの値を共有するパケットの単方向シーケンスとして定義しています。[ 2 ]
出力インターフェース、IP ネクストホップ、または BGP ネクストホップはキーの一部ではないため、フローの有効期限が切れる前にルートが変更された場合、または負荷分散がパケットごとに行われる場合、正確ではない可能性があることに注意してください。
このフロー定義は IPv6 でも使用され、MPLSおよびイーサネットフローでも同様の定義が使用されます。
Cisco Flexible NetFlow などの高度な NetFlow または IPFIX 実装では、ユーザー定義のフロー キーが許可されます。
保存されたフローを印刷するときのNetFlow コマンドライン ツール (nfdumpこの場合) の一般的な出力は次のようになります。
フロー開始日 期間 プロトコル 送信元IPアドレス:ポート 送信先IPアドレス:ポート パケット バイト フロー 2010-09-01 00:00:00.459 0.000 UDP 127.0.0.1:24920 -> 192.168.0.1:22126 1 46 1 2010-09-01 00:00:00.363 0.000 UDP 192.168.0.1:22126 -> 127.0.0.1:24920 1 80 1
ルータは、フローが終了したと判断すると、フローレコードを出力します。これはフローエージングによって行われます。ルータは、既存のフローに新しいトラフィックが検出されると、エージングカウンタをリセットします。また、 TCPフロー内のTCPセッションが終了すると、ルータはフローを期限切れにします。フローがまだ進行中であっても、一定の間隔でフローレコードを出力するようにルータを設定することもできます。
NetFlowレコードは、従来、ユーザーデータグラムプロトコル(UDP)を使用してエクスポートされ、NetFlowコレクターを使用して収集されます。NetFlowコレクターのIPアドレスと宛先UDPポートは、送信側ルーターに設定する必要があります。一般的な値はUDPポート2055ですが、9555、9995、9025、9026などの他の値も使用できます。
効率性上の理由から、ルータは従来、既にエクスポートされたフローレコードを追跡しません。そのため、ネットワークの輻輳やパケット破損によってNetFlowパケットがドロップされると、含まれているすべてのレコードが永久に失われます。UDPプロトコルは、ルータに損失を通知しないため、ルータはパケットを再送信できません。これは、特に多数のパケットやフローを単一のレコードに集約できるNetFlow v8またはv9では深刻な問題となる可能性があります。単一のUDPパケット損失が、一部のフローの統計情報に大きな影響を与える可能性があります。
そのため、NetFlowの最近の実装では、パケット損失に対する保護をある程度提供するために、ストリーム制御伝送プロトコル(SCTP)を使用してパケットをエクスポートし、関連レコードをエクスポートする前にNetFlow v9テンプレートを確実に受信するようにしています。ただし、パケットの厳密な順序付けは過剰なバッファリングと遅延を引き起こすため、TCPはNetFlowには適していません。
SCTPの問題点は、各NetFlowコレクタとNetFlowをエクスポートする各ルータ間のやり取りが必要になることです。ルータが多数のNetFlowコレクタを扱わなければならない場合、またNetFlowコレクタが多数のルータを扱わなければならない場合、特に一部のルータが故障やメンテナンスのために利用できない場合、パフォーマンスが制限される可能性があります。
NetFlowを複数の独立したコレクター(中にはいつダウンするかわからないテストサーバーも含まれる)にエクスポートする必要がある場合、SCTPは効率的ではない可能性があります。UDPは、ネットワークタップやL2/L3ミラーリングを使用してNetFlowパケットを簡単に複製できます。また、シンプルなステートレス機器は、必要に応じてNetFlow UDPパケットのフィルタリングや宛先アドレスの変更も可能です。NetFlowエクスポートはネットワークバックボーンリンクのみを使用するため、パケットロスはほとんどの場合無視できます。パケットロスが発生した場合でも、ネットワークとNetFlowコレクター間のリンクで発生することがほとんどです。
すべての NetFlow パケットはバージョン依存のヘッダーで始まり、少なくとも次のフィールドが含まれます。
NetFlow レコードには、特定のフロー内のトラフィックに関するさまざまな情報が含まれます。
NetFlow バージョン 5 (最も一般的に使用されるバージョンの 1 つで、次にバージョン 9 が続く) には次のものが含まれています。
ICMPフローの場合、送信元ポートは 0 で、宛先ポート番号フィールドは ICMP メッセージ タイプとコードをコード化します (ポート = ICMP タイプ * 256 + ICMP コード)。
送信元および宛先の自律システム(AS)番号フィールドは、ルータの設定に応じて、宛先AS(AS-Pathの最後のAS)または直近の隣接AS(AS-Pathの最初のAS)を報告できます。ただし、この機能がサポートされていない場合、経路が不明またはBGPによってアナウンスされていない場合、またはASがローカルASである場合は、AS番号は0になります。これらのケースを明示的に区別する方法はありません。
NetFlowバージョン9はこれらすべてのフィールドを含むことができ、オプションでマルチプロトコルラベルスイッチング(MPLS)ラベルやIPv6アドレスとポートなどの追加情報も含めることができます。
フローデータを分析することで、ネットワーク内のトラフィックフローとトラフィック量の全体像を把握できます。NetFlowレコード形式は時間の経過とともに進化しており、バージョン番号が追加されました。シスコは、異なるバージョン番号と各バージョンのパケットレイアウトの詳細を管理しています。
NetFlow は通常、NetFlow に関係するルータ コンポーネントの負荷を制限したり、エクスポートされる NetFlow レコードの量を制限したりするために、インターフェイスごとに有効になります。
NetFlow は通常、入力 IP インターフェイスによって受信されたすべてのパケットをキャプチャしますが、一部の NetFlow 実装では IP フィルターを使用して、パケットが NetFlow によって監視できるかどうかを決定します。
一部の NetFlow 実装では、出力 IP インターフェイス上のパケットの監視も許可されますが、これは注意して使用する必要があります。NetFlow が有効になっている任意の入力インターフェイスから NetFlow が有効になっている任意のインターフェイスへのすべてのフローが 2 回カウントされる可能性があります。
標準的なNetFlowは、インターフェース上のすべてのIPパケットを処理するように設計されています。しかし、インターネットバックボーンなどの一部の環境では、パケットごとに追加の処理が必要になり、同時に多数のフローが発生するため、コストがかかりすぎます。
そこでシスコは、Cisco 12000にサンプリングされた NetFlow を導入し、現在では NetFlow を実装するすべてのハイエンド ルータでそれが使用されています。
n 個のパケットのうち 1 個だけが処理されます。ここで、サンプリング レート nはルーターの構成によって決まります。
正確な選択プロセスは実装によって異なります。
一部の実装では、Cisco Catalyst でのフローごとのサンプリングなど、パケットをサンプリングするためのより複雑な方法があります。
サンプリングレートは通常、すべてのインターフェースで同じですが、一部のルーターではインターフェースごとに調整できます。Sampled NetFlowを使用する場合、サンプリングの影響を考慮してNetFlowレコードを調整する必要があります。特にトラフィック量は、実際に測定されたフロー量ではなく推定値になります。
サンプリングレートは、NetFlowバージョン5のヘッダーフィールド(すべてのインターフェースで同じサンプリングレート)またはNetFlowバージョン9のオプションレコード(インターフェースごとのサンプリングレート)で示されます。
| バージョン | コメント |
|---|---|
| v1 | 最初の実装ですが、現在は廃止されており、IPv4 ( IP マスクとAS 番号なし) に制限されています。 |
| v2 | Cisco 社内バージョン。リリースされません。 |
| v3 | Cisco 社内バージョン。リリースされません。 |
| v4 | Cisco 社内バージョン。リリースされません。 |
| v5 | 最も一般的なバージョン。さまざまなブランドの多くのルーターで使用可能です (2009 年現在)。ただし、IPv4フローに制限されています。 |
| v6 | Cisco によるサポートは終了しました。カプセル化情報 (?)。 |
| v7 | バージョン5にソースルータフィールドを追加したもの。Cisco Catalystスイッチでのみ使用される。 |
| v8 | いくつかの集約形式がありますが、バージョン 5 のレコードにすでに存在する情報のみを対象としています。 |
| v9 | テンプレートベース。2009年現在、一部の最新ルーターで利用可能です。主に、IPv6、MPLS、あるいはBGPネクストホップを含むIPv4などのフローを報告するために使用されます。 |
| v10 | IPFIXを識別するために使用されます。IPFIX は NetFlow に大きく依存していますが、v10 は NetFlow とは一切関係ありません。 |
NetFlowは当初Ciscoによって実装され、標準化過程には含まれていなかった「情報提供」文書であるRFC 3954(Cisco Systems NetFlow Services Export Version 9)で説明されていました。NetFlowプロトコル自体は、Internet Protocol Flow Information eXport(IPFIX)に置き換えられました。NetFlow Version 9の実装に基づくIPFIXは、2008年に公開されたRFC 5101(RFC 7011により廃止)、RFC 5102(RFC 7012により廃止)などとともにIETF標準化過程に含まれています。
Cisco以外にも、同様のネットワークフロー監視技術を提供しているベンダーは数多く存在します。Cisco はネットワーク業界で圧倒的な市場シェアを誇っているため、NetFlowはフロー監視分野で広く知られている名称かもしれません。NetFlowはCiscoの商標であると考えられていますが(2012年3月現在、Ciscoの商標一覧[ 3 ]には記載されていません)。
また、フローツールソフトウェアコレクション[ 5 ]を使用すると、CiscoおよびJuniperルータからのNetFlowエクスポートを処理および管理できます。[ 6 ]
| ベンダーとタイプ | モデル | NetFlow バージョン | 実装 | コメント |
|---|---|---|---|---|
| Cisco IOS-XRルータ | CRS、ASR9000旧12000 | v5、v8、v9 | ラインカードCPU上で実行されるソフトウェア | IPv6とMPLSの包括的なサポート |
| Cisco IOSルータ | 10000、7200、旧7500 | v5、v8、v9 | ルートプロセッサ上で実行されるソフトウェア | IPv6またはMPLSのサポートには、最新のモデルとIOSが必要です。 |
| Cisco Catalyst スイッチ | 7600、6500、4500 | v5、v8、v9 | 専用のハードウェア TCAM。ACL にも使用されます。 | ハイエンドモデルRSP720およびSup720ではIPv6がサポートされていますが、PCFカードあたり最大128Kまたは256Kのフローがサポートされています。[ 7 ] |
| Cisco Nexus スイッチ | 5600、7000、7700 | v5、v9 | 専用のハードウェアTCAM(ACLにも使用)。最大512Kフロー。IPv4/IPv6/L2をサポート。 | MPLSはサポートされていません |
| ジュニパーのレガシールーター | Mシリーズ、Tシリーズ、MXシリーズ( DPC搭載) | v5、v8 | ルーティングエンジン上で実行されるソフトウェア(ソフトウェア jflowと呼ばれる) | IPv6とMPLSはサポートされていません |
| ジュニパーのレガシールーター | Mシリーズ、Tシリーズ、MXシリーズ( DPC搭載) | v5、v8、v9 | サービスPIC上で実行されるソフトウェア(ハードウェアJflowまたはサンプリングと呼ばれる) | MS-DPC、MultiService-PIC、AS-PIC2 で IPv6 または MPLS がサポートされています |
| ジュニパールーター | MXシリーズ( MPC-3D、T4000用FPC5搭載) | v5、IPFIX | ハードウェア(トリオチップセット)、インラインjflowと呼ばれる | IPv6にはJUNOS 11.4R2(バックポートターゲット)が必要、MPLSサポートは不明、MPC3Eは12.3まで除外、開始時間フィールドが正しくないためデータスループット結果が正しくない[ 8 ] |
| ノキアルーター | 7750SR | v5、v8、v9、v10 IPFIX | 中央プロセッサモジュール上で実行されるソフトウェア | IOM3 ライン カード以上を使用した IPv6 または MPLS |
| Huaweiルーター | NE5000E NE40E/X NE80E | v5、v9 | サービスカード上で実行されるソフトウェア | IPv6またはMPLSのサポートは不明です |
| Enterasysスイッチ | Sシリーズ[ 9 ] とNシリーズ[ 10 ] | v5、v9 | 専用ハードウェア | IPv6のサポートは不明です |
| Flowmonプローブ | フローモンプローブ 1000、2000、4000、6000、10000、20000、40000、80000、100000 | v5、v9、IPFIX | ソフトウェアまたはハードウェアアクセラレーション | IPv6とMPLSの包括的なサポート、ワイヤースピード |
| ノーテルスイッチ | イーサネット ルーティング スイッチ 5500 シリーズ (ERS5510、5520、5530) および 8600 (シャーシベース) | v5、v9、IPFIX | ラインカードCPU上で実行されるソフトウェア | IPv6の包括的なサポート |
| PCとサーバー | Linux FreeBSD NetBSD OpenBSD | v5、v9、IPFIX | fprobe、[ 11 ] ipt-netflow、[ 12 ] pflow、[ 13 ] flowd、[ 14 ] Netgraph ng_netflow [ 15 ]またはsoftflowd などのソフトウェア | IPv6のサポートは使用するソフトウェアによって異なります |
| VMwareサーバー | vSphere 5.x [ 16 ] | v5、IPFIX(>5.1)[ 17 ] | ソフトウェア | IPv6のサポートは不明です |
| Mikrotik ルーターOS | RouterOS 3.x、4.x、5.x、6.x [ 18 ] | v1、v5、v9、IPFIX (>6.36RC3) | ソフトウェアとルーターボードのハードウェア | IPv6はv9でサポートされます。現在、RouterOSにはBGP AS番号は含まれていません。 |
Cisco ASA 5580製品の発売と同時に導入されたNetFlowセキュリティイベントロギングは、NetFlow v9のフィールドとテンプレートを活用し、高パフォーマンス環境においてセキュリティテレメトリを効率的に提供します。NetFlowセキュリティイベントロギングは、Syslogと同等の詳細度と粒度でイベントをログに記録しながら、 Syslogよりも優れた拡張性を備えています。

スタンドアロンのNetFlowプローブを用いたNetFlow収集は、ルータやスイッチからのフロー収集の代替手段です。このアプローチは、ルータベースのNetFlowモニタリングにおけるいくつかの制限を克服できます。プローブは、アプライアンスのTAPポートまたはSPANポートを介して、パッシブアプライアンスとして監視対象リンクに透過的に接続されます。
歴史的に、NetFlowモニタリングはルーターよりも専用プローブに実装する方が簡単です。しかし、このアプローチにはいくつかの欠点もあります。
上記の欠点に対処する最も簡単な方法は、ルータの手前にパケットキャプチャアプライアンスをインラインで設置し、ルータからのすべてのNetFlow出力をキャプチャすることです。この方法により、大量のNetFlowデータ(通常は数年分)を保存でき、ネットワークの再構成も不要になります。
専用プローブからの NetFlow 収集は重要なリンクの観察に適していますが、ルータ上の NetFlow は、容量計画、アカウンティング、パフォーマンス監視、およびセキュリティに使用できるネットワーク全体のトラフィックのビューを提供します。
NetFlowは、もともとCiscoルータ向けのパケットスイッチング技術であり、 1996年頃にIOS 11.xに実装されました。当初はCisco 7000、7200、7500向けのソフトウェア実装であり[ 19 ] 、当時のCisco Fast Switchingの改良版と考えられていました。NetFlowは、CiscoのDarren KerrとBarry Bruinによって発明されました[ 20 ](米国特許番号6,243,667)。
フローの最初のパケットがNetFlowスイッチングレコードを作成するという考え方です。このレコードは、フローの有効期限が切れるまで、同じフローの後続のすべてのパケットに使用されます。フローの最初のパケットのみが、ルートテーブルを調べて最も適切なルートを見つける必要があります。これは、ソフトウェア実装、特に転送情報ベース(FIB)のない古い実装では、コストのかかる処理です。NetFlowスイッチングレコードは実際には一種のルートキャッシュレコードであり、古いバージョンのIOSでは、NetFlowキャッシュは依然としてip route-cacheと呼ばれています。
この技術はローカルネットワークに有利でした。特に、一部のトラフィックをACLでフィルタリングする必要がある場合、フローの最初のパケットのみをACLで評価すればよかったのです。[ 21 ]
NetFlow スイッチングは、大規模なルータ、特にインターネット バックボーン ルータには適さないことがすぐに判明しました。インターネット バックボーン ルータでは、同時フローの数がローカル ネットワーク上のフローの数よりもはるかに重要であり、一部のトラフィックによって、ドメイン ネーム システム要求 (セキュリティ上の理由から送信元ポートはランダム) などの短命フローが多数発生するからです。
スイッチング技術としてのNetFlowは、1995年頃にCisco Express Forwardingに置き換えられました。これはCisco 12000ルータで初めて導入され、後にCisco 7200およびCisco 7500の高度なIOSでNetFlowスイッチングに取って代わりました。
2012年現在、NetFlowスイッチングに類似した技術は、ほとんどのファイアウォールやソフトウェアベースのIPルーターで依然として使用されています。例えば、Linuxで使用されているNetfilterフレームワークのconntrack機能などが挙げられます。