運用を妨げない可視化
本番環境のトラフィック監視は、非常に慎重な判断が求められるバランス調整です。私は、ジュニア管理者がプロキシを通信経路に直接配置したことで、誤って 200ミリ秒の遅延スパイクを引き起こすのを目の当たりにしてきました。セキュリティ監査のためにパケットを検査したり、Suricata 7.0 のような侵入検知システム(IDS)にデータを供給したりする場合、ライブフローに影響を与えることは許されません。データの「ゴーストコピー」が必要なのです。
本番環境において、これは譲れないスキルです。ソースからトラフィックを複製し、モニタリングポートに送信するために、ポートミラーリング(しばしば SPAN:Switched Port Analyzer と呼ばれます)を使用します。Linux にはいくつかの方法がありますが、現代的な仮想化スタックにおいて最も信頼できる選択肢は Open vSwitch (OVS) です。標準的なブリッジが苦戦するような高スループット環境でも、OVS は安定して動作します。
アプローチの比較:Linux Bridge vs. Open vSwitch
適切なツールの選択は、規模によって異なります。データセンターにおいて、なぜ OVS が選ばれることが多いのかを見ていきましょう。
標準の Linux Bridge (brctl/ip link)
ネイティブの Linux Bridge は軽量でカーネルに組み込まれています。しかし、ネイティブの「ミラー」コマンドがありません。トラフィックを複製するには、tc (Traffic Control) と action mirred ルールを使用する必要があります。このアプローチは脆弱です。複数のミラーを管理することは設定の悪夢となり、その構文は障害発生時のデバッグが非常に困難であることで知られています。
Open vSwitch (OVS)
OVS はソフトウェア定義ネットワーク (SDN) のために構築されました。ミラーリングを後付けの機能ではなく、コア機能として扱います。ミラーオブジェクトを定義し、イングレス/エグレスポートを指定し、送信先を設定するだけです。構成はクリーンで、Proxmox、OpenStack、Nutanix といったプラットフォーム間でスケールします。1Gbps 以上のトラフィックを管理する場合、OVS がプロフェッショナルの標準です。
OVS ポートミラーリングのメリットとデメリット
メリット
- 分離: IDS やスニッファーがクラッシュしても、本番環境のトラフィックは中断されることなく流れます。
- きめ細かな制御: 特定の VLAN タグをミラーリングしたり、高負荷な単一の VM からのトラフィックのみを分離したりできます。
- 永続性: OVS は設定を
ovsdbに保存します。ミラーリング設定は、カスタムシェルスクリプトを必要とせず、再起動後も維持されます。
デメリット
- リソース消費: OVS デーモンの実行は、単純なカーネルブリッジよりも多くのメモリを消費します。
- CPU オーバーヘッド: 10Gbps 以上のトラフィックをミラーリングすると、3〜5% の CPU 負荷が加わることがあります。システムバスに、倍増した内部トラフィックを処理できる帯域幅があることを確認する必要があります。
推奨されるセットアップ
多くの管理者は「Many-to-One(多対一)」構成を使用します。eth1 に Web サーバー、eth2 にデータベースがあると仮定してください。これらのトラフィックを集約し、eth3 にある専用の分析サーバーに送信したいとします。このガイドでは、br-ext という名前のブリッジを使用して、本番アプリからスニッファーポートにトラフィックを複製します。
実装ガイド:OVS ミラーリングの設定
1. Open vSwitch のインストール
システムで OVS デーモンを起動します。Ubuntu または Debian の場合は、以下のコマンドを使用します。
sudo apt update
sudo apt install openvswitch-switch -y
sudo systemctl enable --now openvswitch-switch
2. ブリッジの作成とポートの追加
クリーンなブリッジから開始します。リモートサーバーで作業している場合は、締め出されないように、まず管理用インターフェースを確認してください。
# 論理ブリッジを作成
sudo ovs-vsctl add-br br-ext
# 本番環境のソースポートを追加
sudo ovs-vsctl add-port br-ext eth1
# モニタリング用の送信先ポートを追加
sudo ovs-vsctl add-port br-ext eth2
3. ミラーリングルールの定義
このコマンドでトラフィックフローをマッピングします。span0 という名前のミラーを作成します。eth1 に出入りするすべてのパケットをキャプチャし、そのコピーを eth2 に転送します。
sudo ovs-vsctl -- set bridge br-ext mirrors=@m \
-- --id=@eth1 get port eth1 \
-- --id=@eth2 get port eth2 \
-- --id=@m create mirror name=span0 select_dst_port=@eth1 select_src_port=@eth1 output_port=@eth2
ロジックの解説:
select_dst_port: すべての受信パケットを取得します。select_src_port: すべての送信パケットを取得します。output_port: トラフィックの転送先を指定します。
4. 設定の確認
OVS データベースに問い合わせて、ミラーがアクティブであることを確認します。次のコマンドを実行してください。
sudo ovs-vsctl list mirror
出力には、span0 と各ポートの特定の UUID が表示されるはずです。
5. tcpdump によるテスト
モニタリング用インターフェースに切り替えます。eth2 はクローンを受信するだけなので、IP アドレスは不要です。管理状態で「UP」になっているだけで十分です。
sudo ip link set eth2 up
sudo tcpdump -i eth2 -n -c 50
ターミナルが eth1 からのトラフィックで埋め尽くされれば、SPAN ポートは稼働しています。
ミラーリングの管理と削除
ミラーリングを無期限に有効にしたままにすることは、よくある間違いです。これは内部のスイッチング負荷を倍増させ、時間の経過とともにパフォーマンスを低下させる可能性があります。デバッグセッションが終了したら、必ずミラーを削除してください。
ブリッジからすべてのミラーを消去するには、以下を使用します:
sudo ovs-vsctl clear bridge br-ext mirrors
プロのヒント:プロミスキャスモード
スニッファーにパケットが表示されない場合は、インターフェースモードを確認してください。Wireshark などのツールは通常、自動的にプロミスキャスモードを有効にします。ただし、NIC が自身の MAC アドレス宛てではないパケットも受け入れるように、手動で強制設定することもできます。
sudo ip link set eth2 promisc on
最後に
Open vSwitch は、ネットワークテレメトリのためのプロフェッショナルグレードのツールキットを提供します。本番環境の安定性を維持しながら、データの 1:1 レプリカを取得できます。セキュリティ侵害の追跡であれ、データベース接続断の診断であれ、OVS ミラーリングはネットワーク上で何が起きているかを正確に把握するための、最も信頼できるネットワークの可視化方法です。

