ネットワークの「健康診断」を極める:tcpdumpでパケットの裏側を覗き見よう
皆さん、こんにちは。現場の最前線で深夜の障害対応を数え切れないほどこなしてきた、NOCエンジニアの私です。
ネットワークエンジニアの仕事をしていると、時々「パケットがどこかへ消えてしまった」という不可解な現象に遭遇します。画面上では何一つエラーが出ていないのに、通信だけが繋がらない。そんな時、私たちの頼みの綱となるのが、パケットキャプチャ界の絶対王者『tcpdump』です。
今日は、初心者の方が「真っ黒な画面に謎の文字列が流れてきて怖い!」とならないよう、tcpdumpの基本的なオプションを、私たちの日常に例えながら紐解いていきましょう。
—
パケットキャプチャは「郵便配達の追跡」と同じ
まず、パケットキャプチャを難しく考える必要はありません。これは「郵便局の仕分け現場で、流れてくる手紙の宛先や中身をチラ見する作業」だと思ってください。
通常、tcpdumpをそのまま実行すると、ネットワーク機器は「気を利かせて」情報を翻訳しようとします。しかし、この「気を利かせる」動作が、現場では逆に邪魔になることも多いのです。
なぜ -nn が必須なのか?
デフォルトのtcpdumpは、IPアドレスをわざわざ「ホスト名(例: google.com)」に変換し、ポート番号を「サービス名(例: http)」に変換しようとします。
- 名前解決が発生する: 通信のたびにDNS問い合わせが走ると、解析結果が出るのが遅れます。
- 誤解を招く: 80番ポートが必ずしも
httpとは限らない環境では、表記がミスリードを生みます。
ここで登場するのが -nn オプションです。
-n: ホスト名を解決しない(IPのまま表示)-n: ポート番号を解決しない(数字のまま表示)
これを使うと、余計な辞書引きをせず、パケットの素の姿が見えてきます。「まずは -nn をつける」。これが現場の鉄則です。
# -nを2つ重ねて、名前解決を徹底的にオフにする
sudo tcpdump -i eth0 -nn port 80
—
もっと深く!パケットの中身を覗き見する -v と -X
ただ「誰から誰へ送られたか」を知るだけでは解決できないトラブルもあります。例えば、「アプリ側で送ったデータが途中で文字化けしている」「期待したHTTPヘッダーが含まれていない」といったケースです。
情報を少し増やす -v (verbose)
-v をつけると、パケットのヘッダー情報(TTLやIDなど)が少し詳しく表示されます。「この手紙、どこを経由してきたんだっけ?」を確認したい時に便利です。さらに -vv と増やすと、もっと饒舌になります。
中身を丸裸にする -X
これが今回の本丸です。-X をつけると、パケットのペイロード(手紙の中身)を16進数(HEX)とASCII文字の両方で表示してくれます。
# -nnで数字を出し、-Xで中身を表示する
sudo tcpdump -i eth0 -nn -X port 8080
実行すると、以下のように表示されます。
0x0000: 4500 003c 1c46 4000 4006 b1e6 c0a8 0105 E..<.F@.@.......
0x0010: c0a8 010a 0050 01bb 1234 5678 0000 0000 .....P...45678..
0x0020: a002 7210 5a3a 0000 0204 05b4 0402 080a ..r.Z:..........
右側のASCII列(E..<.F@.@.......など)に注目してください。ここにログインIDやパスワード、リクエストURLなどが隠れていることがあります。これがバイナリダンプの醍醐味です。
—
現場の知恵:-w で保存して後でじっくり攻略する
現場の障害は待ってくれません。流れていくパケットをリアルタイムで見続けるのは至難の業です。そんな時は、-w オプションを使って、一旦「ファイル」として保存しましょう。
# キャプチャ結果をファイルに保存する
sudo tcpdump -i eth0 -nn -w capture_data.pcap
保存したファイルは、後でデスクトップPCにコピーして『Wireshark』というGUIツールで開くのが王道です。黒い画面で必死に追うよりも、Wiresharkで色分けされた画面を見た方が、全体像の把握は何倍も速くなります。
—
まとめ:今日から使えるコマンドセット
これからトラブルシューティングを始める皆さんに、まずはこのコマンドを覚えて帰っていただきたいです。
# 現場でとりあえず叩く「基本のキ」
# -i any: 全インターフェースを監視
# -nn: 名前解決オフ
# -s 0: パケットの全サイズを記録(切り捨てを防ぐ)
# -w: 保存用ファイル名
sudo tcpdump -i any -nn -s 0 -w trouble_shot.pcap
ネットワークトラブルは、パケットという「真実」を追いかける推理小説のようなものです。最初は難しく感じるかもしれませんが、パケットの一つひとつに「宛先」や「送り主」というドラマがあることを忘れないでください。
少しずつ、パケットの言葉が理解できるようになります。その時、皆さんはもう一人前のエンジニアです。一緒に頑張っていきましょう!
コメント