深夜にネットワーク帯域が「謎の消失」を遂げたとき
午前2時、Zabbixのアラートが鳴り響く。Uplinkポートのトラフィックは95%に達し、レイテンシは数百ミリ秒に跳ね上がっている。眠い目をこすりながらサーバーにSSHでログインしたとき、この状況でtcpdumpを使うのは自殺行為だとすぐに悟った。わずか10秒でpcapファイルは数GBに膨れ上がり、システムをフリーズさせてしまうからだ。
当時、私は50人規模のオフィスと小規模なサーバークラスターを管理していた。トラブルが発生した際、最も重要な問いは「パケットの内容は何か」ではなく、「誰が帯域を占有しているのか? 宛先はどこか? そしてどのプロトコルを使っているのか?」ということだった。
NetFlowとIPFIXは、このような状況での「救世主」だ. 個々のパケットを精査する代わりに、データフロー(Flow)を分析する。今回は、無機質なログを視覚的なグラフに変換し、トラブルを「一瞬」で解決できるようにするnfdumpとnfsenの組み合わせの構築方法を紹介する。
パケットキャプチャとフローを混同してはいけない
設定に取り掛かる前に、目的を誤らないよう、これら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管理者が持っておくべき「安くて良い」最強のコンボだ。この記事が、皆さんのネットワークインフラ管理をより快適にする助けになれば幸いである。

