なぜtcpdump-uwでは不十分なのか?
VMware ESXiを日常的に管理しているなら、`tcpdump-uw`には馴染みがあるでしょう。しかし、このツールには致命的な弱点があります。それは、ManagementやvMotionなどのVMkernelインターフェースを通過するトラフィックしかキャプチャできない点です。VM AからVM Bへの通信が通らない理由や、物理スイッチからのパケットが物理NIC(vmnic)を通過した後に「消えてしまう」理由を調査したい時、`tcpdump-uw`では太刀打ちできません。
VMwareはこの問題を解決するために、pktcap-uw(ESXi 5.5以降)を導入しました。このツールを使えば、vSwitchやDistributed Switchから物理アップリンクまで、あらゆるポイントでパケットを「待ち伏せ」できます。それはまるで、仮想ネットワーク内のすべての交差点に監視カメラを設置するようなものです。
60秒で始めるESXiパケットキャプチャ
まず、ESXiホストでSSHを有効にしてログインします。例えば、物理ネットワークカード vmnic0 をトラフィックが実際に通過しているか確認したいとします。最初の10個のパケットをキャプチャしてみましょう。
# vmnic0アップリンクで10個のパケットをキャプチャして直接表示
pktcap-uw --uplink vmnic0 -c 10
不要なトラフィックで画面が埋め尽くされるのを防ぐため、トラブルが発生している仮想マシンのIP(例:192.168.1.50)で正確にフィルタリングしましょう。
# 特定のIPでフィルタリングして範囲を絞り込む
pktcap-uw --uplink vmnic0 --ip 192.168.1.50
注意: 停止するには Ctrl + C を押してください。 -c パラメータを使用しない場合、コマンドは走り続けます。10Gbpsのリンクでは、これがホストのCPUに大きな負荷をかける可能性があります。
主要なパラメータを理解する
pktcap-uw を効果的に使うには、パケットが Physical NIC → vSwitch → Portgroup → Virtual NIC という一連の流れのどこで止まっているのかを理解する必要があります。
1. キャプチャポイント (Capture Points)
--uplink [vmnicX]: 物理ネットワークカードでトラフィックを確認。--vmport [Port ID]: 仮想マシンのポートでトラフィックを確認。正確なPort IDを取得するにはnet-stats -lコマンドを使用します。--vswitch [vSwitch Name]: 仮想スイッチレベルでパケットをキャプチャ。
2. 方向 (Direction)
パケットがキャプチャポイントに対して入っているのか、出ているのかを知る必要があります:
--dir 0: インバウンド(ホストまたはVMに入るパケット)。--dir 1: アウトバウンド(VMまたはホストから出るパケット)。
3. ステージ (Stage)
これは、ESXiのファイアウォールがトラフィックをブロックしているかどうかを確認できる非常に優れた機能です:
--stage 0: 処理前(Pre-check)。--stage 1: フィルタ通過後(Post-check)。
Wiresharkで分析するためのPCAPファイル出力方法
ターミナルでテキストログを読むのは、特に複雑なTCPストリームの場合、非常に骨が折れます。最善の方法は、Wiresharkで詳しく調査できるように .pcap ファイルに出力することです。
# VMのトラフィックをデータストアにpcapファイルとして保存
pktcap-uw --vmport 33554440 -o /vmfs/volumes/DATASTORE_NAME/debug_network.pcap
コマンドを実行した後、VMからpingを実行したりウェブサイトにアクセスしたりしてトラフィックを発生させます。その後、WinSCPなどを使用してファイルをPCにダウンロードします。
ヒント: パケットの内容(ペイロード)は不要で、ヘッダー(IP、Port)だけを確認したい場合は、 -s 128 を追加してください。ログファイルが非常に軽くなり、より長時間のキャプチャが可能になります。
実践アドバイス:よくあるミスを避けるために
多くのシステム復旧現場を経験して得た、4つの鉄則を紹介します:
- ルートパーティションを避ける: pcapファイルを
/tmpや/に保存しないでください。ESXiのこれらのパーティションは非常に小さいです。500MBのキャプチャファイルでホスト全体が即座にフリーズする可能性があります。必ずDatastoreに保存しましょう。 - 常に net-stats を確認する: VMを再起動したり、別のホストにvMotionしたりすると、VMのポートIDは変わります。キャプチャを開始する直前に
net-stats -lを実行して、最新のIDを確認してください。 - プロセスのクリーンアップ:
Ctrl + Cを押してもプロセスがバックグラウンドで残り続けることがあります。ps -c | grep pktcap-uwで確認し、残っている場合はkill -9でCPUを解放してください。 - CPU負荷に注意: 高負荷の25Gbpsカードでキャプチャを行うと、CPU使用率が100%に達することがあります。ポートやIPのフィルタ(filter)を優先的に使用し、システムへの負荷を軽減しましょう。
pktcap-uw をマスターすれば、推測に頼る必要はなくなります。ネットワークチームと議論する代わりに、パケットがどこでドロップしたかを示す証拠としてpcapファイルを提示するだけで済むのです。

