knqyf263's blog

自分のためのメモとして残しておくためのブログ。

Open vSwitchでNetFlow設定

前回はOpen vSwitchでsFlowの設定を行ったので、今回はNetFlowを取得するための設定を行いたいと思います。 基本的にsFlowの時と同じ考え方でやっています。 NetFlowの説明を以下に引用します。

NetFlowは、米シスコシステムズが開発したトラフィック管理用技術です。主にシスコ製のルーターやLANスイッチにソフトウエア機能(IOS拡張機能)として実装されていますが、ほかのベンダーのネットワーク機器でもサポートしている製品があります。NetFlowは、ネットワーク機器上で「フロー」(TCP、UDPやICMPのあて先、送信元のIPアドレスとポート番号の組み合わせで識別するセッション)単位でパケット数やバイト数を集計し、集計データをUDPベースのNetFlowパケットで管理ステーション(NetFlowでも「コレクタ」と呼ぶ)に送信します
引用元:ネットワーク管理者のためのトラフィック管理入門 - 第3章 トラフィック管理技術とその比較:ITpro

今回はNetFlowエージェントがOpen vSwitchで、NetFlowコレクタは別にサーバを用意した環境を想定しています。 この記事ではNetFlowエージェント側の設定について説明します。 僕が用意した環境は以下のようになっています。

環境

NetFlowエージェント
Open vSwitch:1.4.2
インタフェース:ovsbr0
IPアドレス:192.168.122.1

NetFlowコレクタ
OS:Ubuntu 13.10
IPアドレス:192.168.122.22

NetFlowエージェントの設定

NetFlowの設定作成

本環境では以下の様な設定となります。

COLLECTOR_IP=192.168.122.22  
COLLECTOR_PORT=5566  
ACTIVE_TIMEOUT=30  

COLLECTOR_IPはコレクタのIPアドレスで、192.168.122.22、COLLECTOR_PORTはコレクタに送る際の送信先ポート番号で、5566番としています。 上記の値を反映するためのコマンドは以下になります。

#  ovs-vsctl -- set Bridge ovsbr0 netflow=@nf -- --id=@nf  
create NetFlow target=\"192.168.122.22:5566\" active-timeout=30 

NetFlowの設定確認

NetFlowの設定が正しく入っているかを確認します。

# ovs-vsctl list netflow
_uuid               : f7eebd0b-6a8f-4d86-911a-b61c5246273a
active_timeout      : 30
add_id_to_interface : false
engine_id           : []
engine_type         : []
external_ids        : {}
targets             : ["192.168.122.22:5566"]

次に、正しくパケットが流れているかを確認します。

# tcpdump -ni ovsbr0 udp port 5566
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ovsbr0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:46:27.870141 IP 192.168.122.1.40117 > 192.168.122.22.5566: UDP, length 72
15:46:30.873135 IP 192.168.122.1.40117 > 192.168.122.22.5566: UDP, length 120
15:46:35.878141 IP 192.168.122.1.40117 > 192.168.122.22.5566: UDP, length 72

NetFlowエージェントのIPアドレス192.168.122.1からNetFlowコレクタのIPアドレス192.168.122.22のポート番号の5566番に対してUDPパケットが送信されているのが確認できます。

NetFlowの設定削除

NetFlowの設定を削除したくなった場合、以下のコマンドで削除することができます。

$ ovs-vsctl remove bridge ovsbr0 netflow $NETFLOWUUID 

$NETFLOWUUIDは、上の設定確認で表示されている_uuidなので、今回は

$ ovs-vsctl remove bridge ovsbr0 netflow f7eebd0b-6a8f-4d86-911a-b61c5246273a

で削除できる。
また、NetFlowの設定全てを削除する場合は、removeでなくclearを使っても良い。

$ ovs-vsctl clear Bridge ovsbr0 netflow

NetFlowコレクタの設定は次回以降にします。