【入門編】 パケットキャプチャツール(tcpdump)の基本構文とBPF(Berkeley Packet Filter)の文法 – トラブルシューティング&ネットワーク運用監視実践ガイド

夜中のトラブルシューティングで迷子にならないために:tcpdumpとBPFの「魔法のフィルター」を使いこなそう

深夜2時、アラートが鳴り響く。監視画面は真っ赤。原因不明の通信断。
こんな時、私たちNOCエンジニアにとって最後の頼みの綱となるのが、CLIのパケットキャプチャツール tcpdump です。

「パケットキャプチャ? なんだか難しそう」と感じるかもしれません。でも大丈夫。まずはネットワークを「郵便配達」に例えてみましょう。

データセンターを行き交う膨大なパケットは、まるで巨大な郵便局を飛び交う何億通もの手紙です。tcpdump を使うということは、その中から特定の宛先や内容の手紙だけを抜き出して中身を確認する作業に他なりません。

今回は、この「抜き出す」作業を極めるための強力な武器、BPF(Berkeley Packet Filter)の基礎を紐解いていきましょう。

—

なぜ「フィルター」が必要なのか?

もし、ネットワークを流れる全てのパケットを無差別に表示してしまったらどうなるでしょう。画面は文字の洪水に飲み込まれ、肝心の「原因となっているパケット」を見つける前に目が回ってしまいます。

ここで登場するのがBPFです。「特定の誰かからの手紙だけを見たい」「この宛先に送られたものだけを追いたい」という要望を叶えるのが、このBPFという仕組みです。

—

基本のキ:tcpdumpの構文を分解しよう

まずは、最もシンプルなコマンドから見ていきましょう。

# インターフェース eth0 を流れるパケットをキャプチャする
sudo tcpdump -i eth0

これだけでもパケットは流れてきますが、これでは「情報過多」です。ここでフィルターを足していきます。

1. 特定の「宛先」に絞る(ホスト名・IP指定)

特定のサーバー(例えば 192.168.1.10)とのやり取りだけを見たい場合、host キーワードを使います。

# 192.168.1.10 に出入りするパケットだけを表示
sudo tcpdump -i eth0 host 192.168.1.10

これで、他のサーバーに関係するパケットは無視され、調査対象との会話だけが見えるようになります。

2. 特定の「窓口」に絞る(ポート指定)

ウェブサーバーなら 80 や 443、SSHなら 22 という「ポート番号」がありますよね。これは郵便でいう「宛先の部署名」のようなものです。

# HTTP通信(80番ポート)だけをキャプチャ
sudo tcpdump -i eth0 port 80

—

現場で差がつく!BPFの組み合わせ術

現場のトラブルシューティングでは、単一の条件だけでは足りないことがほとんどです。ここで論理演算子(AND, OR, NOT)を使いこなせると、一気にプロの仕事になります。

組み合わせのサンプル

例えば、「192.168.1.10 というサーバーの、80番ポート宛の通信だけを詳しく見たい」という場面。

# host と port を AND でつなぐ(&& または and)
sudo tcpdump -i eth0 host 192.168.1.10 and port 80

逆に、「このサーバー以外からのSSH通信をチェックしたい」という時は、not を使います。

# host 192.168.1.10 を除外して、ポート22(SSH)だけを見る
sudo tcpdump -i eth0 port 22 and not host 192.168.1.10

—

さらに深く知るための「プラスアルファ」

コマンドを打つ時、以下のオプションを添えると、現場での解析がグッと楽になります。

  • -n : IPアドレスやポートを名前解決(DNS)しない。これだけで表示が爆速になります。
  • -v / -vv : 表示情報を詳細にする。パケットの細かいヘッダー情報が見たくなったらこれを足しましょう。
  • -X : パケットの中身を16進数とASCII文字で表示する。アプリレベルのデータを確認したい時に必須です。

実践的なコマンド例

# 192.168.1.10 宛の通信を、詳細表示かつ名前解決なしでキャプチャ
sudo tcpdump -ni eth0 host 192.168.1.10 -vv

—

まとめ:恐れずにコマンドを叩こう

ネットワークトラブルの現場では、正確な情報を掴むことこそが、復旧への最短ルートです。tcpdump と BPF は、最初は複雑な呪文のように見えるかもしれませんが、慣れてしまえば「ネットワークの健康診断」には欠かせない相棒になります。

まずは、自分の環境で host や port を指定して、どんなパケットが流れているのか覗いてみてください。最初は ping を打った時のパケットが見えるだけでも、感動しますよ。

インフラの世界へようこそ。一緒にトラブルシューティングを楽しんでいきましょう!

コメント

タイトルとURLをコピーしました