NetFlowとIPFIX:Linux上でnfdumpとnfsenを使いネットワーク帯域を「診断」する方法

Network tutorial - IT technology blog
Network tutorial - IT technology blog

深夜にネットワーク帯域が「謎の消失」を遂げたとき

午前2時、Zabbixのアラートが鳴り響く。Uplinkポートのトラフィックは95%に達し、レイテンシは数百ミリ秒に跳ね上がっている。眠い目をこすりながらサーバーにSSHでログインしたとき、この状況でtcpdumpを使うのは自殺行為だとすぐに悟った。わずか10秒でpcapファイルは数GBに膨れ上がり、システムをフリーズさせてしまうからだ。

当時、私は50人規模のオフィスと小規模なサーバークラスターを管理していた。トラブルが発生した際、最も重要な問いは「パケットの内容は何か」ではなく、「誰が帯域を占有しているのか? 宛先はどこか? そしてどのプロトコルを使っているのか?」ということだった。

NetFlowとIPFIXは、このような状況での「救世主」だ. 個々のパケットを精査する代わりに、データフロー(Flow)を分析する。今回は、無機質なログを視覚的なグラフに変換し、トラブルを「一瞬」で解決できるようにするnfdumpnfsenの組み合わせの構築方法を紹介する。

パケットキャプチャとフローを混同してはいけない

設定に取り掛かる前に、目的を誤らないよう、これら2つの概念を明確に区別しておく必要がある。

NetFlowとIPFIXとは何か?

NetFlowを電話の通話明細に例えてみよう。通話の内容はわからないが、誰が誰に、いつ、どのくらいの時間電話したかは正確に把握できる。技術的に言えば、「フロー(Flow)」は5タプル送信元/送信先IP、送信元/送信先ポート、プロトコル)によって定義される。

  • NetFlow: Ciscoが開発したプロトコルで、非常に普及している。現在はv9がエンタープライズ機器の標準となっている。
  • IPFIX: NetFlow v9の「後継」とみなされるオープン規格(IETF)である。MikroTik、Juniper、Ubiquitiなどの機器を使用している場合、通常はIPFIXがデフォルトの選択肢となる。

最大の利点は、非常に軽量であることだ。ルーターはコレクター(Collector)にメタデータのみを送信するため, SPAN/ミラーリングポートを運用する場合のようにCPUリソースを消費することはない。

nfdumpの導入 – 堅牢なデータ収集ツール

フローを収集するために、私はnfdumpを選択した。これは、NetFlowデータの受信、保存、フィルタリングを高いパフォーマンスで行う強力なコマンドラインツールセットだ。

nfdumpのインストール

UbuntuやDebianでは、インストールは数秒で完了する:

sudo apt update
sudo apt install nfdump -y

インストール後、システムにはnfcapdデーモンが用意される。これは「基地局」のような役割を果たし、ポート(デフォルトは9995)で待機してルーターから送られてくるデータを受信する。

フローを受信するためのリスナー設定

ルーター(192.168.1.1)がLinuxサーバー(192.168.1.10)にフローを送信すると仮定する。接続を確認するために以下のコマンドを実行する:

# 保存用ディレクトリの作成(50ユーザーで1日約500MBを消費)
sudo mkdir -p /var/netflow/router_office

# nfcapdをデーモンモードで実行
sudo nfcapd -w -D -l /var/netflow/router_office -p 9995

オプションの解説:

  • -w: 5分ごとにデータをファイルに書き出す。
  • -D: バックグラウンドで実行(デーモン)。
  • -l: ログを保存するディレクトリ。
  • -p: 待受ポート。

ファイアウォールのUDPポートを開放することを忘れないように。さもないと、ルーターがいくらデータを送ってもサーバーは何も受信できない。

nfsenによる視覚化 – ネットワークの「大食い」を即座に特定

コマンド操作は早いが、上司に報告したり週次での成長トレンドを追跡したりするには、視覚的なインターフェースが必要だ。nfsenのUIは少し「レトロ」だが、非常に安定しており正確だ。

nfsenのインストールはPerlベースであるため、少し手間がかかる。ApacheとPHPの環境を事前に準備しておく必要がある:

sudo apt install apache2 php libapache2-mod-php rrdtool librrd-dev -y

nfsen.confファイルを設定すると、ドラッグ&ドロップやトラフィックのスパイク(急上昇)へのズームが可能なダッシュボードが利用可能になる。それを見れば、すぐに原因を特定できる。「IP .25の人が個人のアカウントでGoogleドライブに20GBのデータをアップロードしているな」といった具合だ。

nfdumpコマンドラインによる実践的なトラブルシューティング

午前2時の対応に戻ろう。ネットワークが重いとき、私はnfsenがグラフを描くのを待たず、すぐにnfdumpを使って直接クエリを実行する。これが犯人を見つける最速の方法だ。

最も帯域を消費しているIPトップ10を検索する:

nfdump -R /var/netflow/router_office -s ip/bytes -n 10

統計結果が明確に表示される:

Top 10 IP Addr sorted by bytes:
Date first seen          Duration Proto           IP Addr    Flows(%)     Packets(%)       Bytes(%)
2023-10-25 02:05:01.123     300.5 ANY      192.168.1.105      450(1.2)      1.2M(45.6)      1.8G(82.4)
...

Bytes(%)カラムを見ると、IP 192.168.1.105が帯域の82.4%(5分間で1.8GBに相当)を占有していることがわかる。一目瞭然だ。

そのIPがどのサービスを利用しているか確認する:

nfdump -R /var/netflow/router_office 'host 192.168.1.105' -s port/bytes

ポート443 (HTTPS) が表示されれば、YouTubeの4K視聴や大容量ファイルのダウンロードの可能性がある。もし30000以上の見慣れないポートが表示された場合は、マルウェアやDDoS攻撃を警戒すべきだ。

技術チームからの結びの言葉

私の苦い経験から言えることは、「泥棒を見て縄をなう」ような事態を避けることだ。システム構築時にすぐにNetFlowを導入しよう。深夜2時の対応から救ってくれるだけでなく、実際の数値に基づいて帯域幅のアップグレード予算を上司に承認させるための「動かぬ証拠」にもなる。

深いクエリが可能なnfdumpと、全体を俯瞰できるnfsenの組み合わせは、すべてのLinux管理者が持っておくべき「安くて良い」最強のコンボだ。この記事が、皆さんのネットワークインフラ管理をより快適にする助けになれば幸いである。

Share: