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コレクタの設定は次回以降にします。