ネットワークの通信障害が発生したとき、「パケットが実際にサーバーまで届いているのか」「意図した通りに応答が返っているのか」分からずに困った経験はないでしょうか。GUIGUI [ジーユーアイ / グーイ]Graphical User Interface。グラフィカルな操作画面の解析ツールが使えないヘッドレスなLinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境において、広く利用されている代表的なパケットキャプチャツールである tcpdump コマンドの知識は、インフラエンジニアにとって重要なスキルです。
この記事を読むことで、tcpdump の基本的な使い方から、特定のIPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコルやポートに絞ったフィルタリング、さらにはファイルへの保存と後からの解析手法まで一通りマスターできるようになります。迅速なトラブルシューティングの初手として、ぜひ参考にしてください。
確認した環境
本記事の検証およびコマンド実行は、以下の環境を前提としています。
- OSOS [オーエス]Operating System。基本ソフトウェア: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 22.04 LTS / AlmaLinux 9
- ツール: tcpdump(未インストールの場合はパッケージマネージャーから導入)
- 実行権限: root ユーザー(または sudosudo [スードゥー / スーデュー]Superuser doの略。一時的に他のユーザー(主に管理者特権)の権限でコマンドを実行する 権限を持つユーザー)
tcpdumpコマンドとは?
tcpdumpの基本的な役割とメリット
tcpdump は、ネットワークインターフェースを通過するパケットをリアルタイムでキャプチャし、その内容を表示・保存するためのコマンドラインツールです。
WiresharkなどのGUIツールとは異なり、コマンドライン(CLICLI [シーエルアイ]Command Line Interface。コマンドで操作するインターフェース)で操作できるため、SSHSSH [エスエスエイチ]Secure Shell。暗号化されたリモート接続プロトコルで接続したクラウド上のLinuxサーバーや、適切な権限が与えられたコンテナ環境でも利用できるというメリットがあります。ネットワークの疎通確認や、アプリケーションが送受信しているリクエスト・レスポンスの内容を確認したい場面で役立ちます。
インストール方法(Ubuntu / AlmaLinux)
環境によっては tcpdump が最初からインストールされていない場合があります。その際は、各ディストリビューションのパッケージマネージャーを使用してインストールしてください。
Ubuntu / DebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューション系の場合:
sudo apt updatesudo apt install tcpdumpAlmaLinux / RHEL系の場合:
sudo dnf install tcpdumpインストール完了後、バージョンを確認して正しく導入されていることを確かめます。
tcpdump --versiontcpdumpの基本構文とオプション
tcpdump の基本構文は以下の通りです。
sudo tcpdump [オプション] [フィルター式]実務でよく使われる重要なオプションをいくつか見ていきましょう。
ネットワークインターフェースを指定する (-i)
サーバーには通常、複数のネットワークインターフェース(eth0, ens33, lo など)が存在します。-i オプションを指定しない場合、tcpdumpは通常、設定済みでUP状態になっているインターフェースのうち、最も番号の小さいインターフェースを選択します(ループバックインターフェースは除外されます)。意図した通信を正確に捉えるために明示的に指定することを推奨します。
sudo tcpdump -i eth0Linuxでは any という特殊なインターフェースを指定することで、全インターフェースのパケットをキャプチャすることも可能です(ただしプロミスキャスモードにならないなどの違いがあります)。
sudo tcpdump -nn -i anyまた、-D オプションを使うと、キャプチャ可能なインターフェースの一覧を確認でき、「eth0なのかens160なのか分からない」といった場合に非常に役立ちます。
sudo tcpdump -Dキャプチャするパケット数を制限する (-c)
オプションなしで tcpdump を実行すると、手動で停止(Ctrl + C)するまで無限にパケットをキャプチャし続け、流れるログの量に圧倒されてしまいます。-c オプションを使うことで、指定したパケット数に達した時点で自動的にキャプチャを終了させることができます。
sudo tcpdump -c 10ホスト名やポート番号を名前解決しない (-nn)
デフォルトの tcpdump は、IPアドレスをホスト名に、ポート番号をサービス名(例: 80 -> httpHTTP [エイチティーティーピー]HyperText Transfer Protocol。Webでのデータ転送プロトコル)に逆引き変換しようとします。名前解決が発生すると表示に時間がかかったり、調査対象とは関係のない名前解決処理が発生したりする可能性があります。
そのため、ネットワーク障害の調査では、名前解決による遅延を避ける目的で、名前解決を無効にする -nn を付けることが一般的です。
sudo tcpdump -nn実践!よく使うキャプチャパターン
基本オプションを覚えたら、次は特定の通信だけを効率よく捉えるためのフィルタリング方法を実践します。
特定ポートの通信をキャプチャする
特定のポート(例えばWebサーバーの 80ポート や SSHの 22ポート など)に絞るには、port フィルタを使用します。
sudo tcpdump -nn -i eth0 port 80送信元、または宛先のどちらかに指定のポートが含まれるパケットがキャプチャされます。TCPTCP [ティーシーピー]Transmission Control Protocol。信頼性の高い通信プロトコル通信のみに限定したい場合は tcp port 80 のようにプロトコルを指定することもできます。
sudo tcpdump -nn -i eth0 tcp port 80特定IPアドレスの通信を監視する
特定のサーバーやクライアントとの通信だけを調査したい場合は、host フィルタを使用します。
sudo tcpdump -nn -i eth0 host 192.168.1.50特定のIPからの通信、あるいは特定のIP宛ての通信のみに絞り込むことができます。また、送信元(srcsrc [ソース / エスアールシー]sourceの略。画像やスクリプトなどの読み込み元ファイルパスを指定する属性)や宛先(dst)をさらに厳密に指定することも可能です。
# 送信元が 192.168.1.50 のパケットのみsudo tcpdump -nn -i eth0 src host 192.168.1.50平文HTTP通信の内容を確認する
Webアプリケーションのトラブルシューティングでは、HTTPのやり取りを確認したいケースが多くあります。-A オプションを使用すると、リンク層ヘッダーを除いたパケットデータをASCII形式で表示できます。HTTPなどの平文プロトコルの内容を確認するときに便利です。
sudo tcpdump -nn -i eth0 -A port 80注意点として、HTTPSHTTPS [エイチティーティーピーエス]HTTP Secure。暗号化されたHTTPではTLSTLS [ティーエルエス]Transport Layer Security。SSLの後継となる安全性の高い暗号化通信プロトコルによってHTTPの内容が暗号化されているため、tcpdumpでキャプチャしただけでは、通常、HTTPのリクエストやレスポンス本文をそのまま読むことはできません。一方、接続先IPアドレスやポート番号、TCP/TLSのハンドシェイクなど、暗号化されていない情報や解析可能なメタデータは確認できます。
ファイルへの保存と読み込み方法
本番環境で発生している単発の不具合や、リアルタイムに画面を見ている余裕がない状況では、キャプチャデータを一度ファイルに保存し、後からじっくり解析するのが定石です。
キャプチャ結果をファイルに保存する (-w)
-w オプションを使用すると、パケットデータを人間が読めるテキストではなく、バイナリ形式のpcapファイルとして保存できます。
sudo tcpdump -nn -i eth0 -w capture_result.pcap port 80このコマンドを実行し、対象の通信が発生したら Ctrl + C で停止します。
保存したファイルを読み込んで解析する (-r)
保存した pcap ファイルは、後から -r オプションを使って何度でも読み込み、表示・再フィルタリングを行うことができます。
sudo tcpdump -nn -r capture_result.pcapさらに、保存済みのファイルに対して後から追加のフィルターを適用することも可能です。
sudo tcpdump -nn -r capture_result.pcap host 192.168.1.10これにより、本番環境への負荷やリアルタイムの流速を気にせず、手元や検証環境でじっくりとパケット解析を進めることができます。
まとめ:ネットワーク調査の初手として使いこなそう
今回は、Linuxにおけるネットワークトラブル調査で重要なコマンドである tcpdump の使い方について解説しました。
記事のポイントをまとめます:
- 基本構文とオプション:
-iでインターフェースを、-cで件数を、-nnで名前解決無効化を指定する。 - フィルタリング:
portやhostを活用することで、ノイズを排除して目的の通信だけに絞り込める。 - ファイル保存・読み込み:
-wで pcap ファイルに保存し、-rで後からオフライン解析を行える。
ネットワーク障害や通信不良に直面した際、迷わず tcpdump を使ってパケットの流れる様子を確認できるよう、日頃からコマンドの組み合わせに慣れておきましょう。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。