Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】tcpdump and dig Examples You'll Actually Paste Into a Runbook

2026年10月20日に「Dev.to」が公開したITニュース「tcpdump and dig Examples You'll Actually Paste Into a Runbook」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

ネットワークトラブルシューティングに役立つ`tcpdump`と`dig`コマンドの実用的な使い方を解説。TLS通信やDNSSEC検証の失敗時など、公式マニュアルにはない具体的なフィルターやオプションが、問題の原因特定に貢献する。現場で役立つコマンド例が多数掲載されている。

ITニュース解説

システムエンジニアとしてネットワークやシステムのトラブルシューティングを行う際、強力な味方となるツールにtcpdumpとdigがある。これらはネットワークの動きやDNSの仕組みを深く理解し、目に見えない問題を解明するために不可欠なコマンドだ。これらのツールを使いこなすことで、複雑なネットワークの問題も効率的に診断し、解決に導くことができる。

まず、tcpdumpについて解説する。tcpdumpはネットワークインターフェースを流れるパケットをキャプチャし、その内容を表示するコマンドラインツールである。ネットワーク上で何が起こっているのかを直接観察できるため、通信の問題やセキュリティに関する調査に非常に役立つ。

例えば、ネットワーク接続の確立や切断の様子だけを確認したい場合、データパケットに埋もれることなく、重要な制御情報だけを抽出できるフィルタリングが有効だ。具体的には、「tcpdump -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0"」というコマンドを使用する。ここで-i eth0はeth0という名前のネットワークインターフェースを監視対象に指定している。"tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0"の部分は、TCPヘッダ内のフラグフィールドを読み取り、SYN(接続確立要求)、FIN(接続終了)、RST(接続リセット)のいずれかのフラグが立っているパケットのみを表示するという意味だ。これにより、接続がどのように始まり、どのように終わるのか、あるいは途中で何らかの問題が発生していないかといった、重要な接続状態の変化を把握できる。

また、TLS(Transport Layer Security)ハンドシェイクの問題を調査する際には、SNI(Server Name Indication)という情報が重要になることがある。SNIは、一つのIPアドレスで複数のSSL/TLS証明書を使用するウェブサーバーにおいて、クライアントがどのホスト名に接続したいかをサーバーに伝える仕組みだ。これをtcpdumpで抽出するには、「tcpdump -i eth0 -s 0 -A "tcp port 443 and (tcp[((tcp[12] & 0xf0) >> 2):1] = 0x16)"」というコマンドが使える。-s 0はパケット全体をキャプチャするオプションで、デフォルトでパケットの一部が切り詰められるのを防ぐ。-Aはパケットの内容をASCII形式で表示する。"tcp port 443 and (tcp[((tcp[12] & 0xf0) >> 2):1] = 0x16)"は、TCPポート443(HTTPSの標準ポート)を流れるパケットのうち、TLSのClientHelloメッセージ(レコードタイプが0x16)であるものをフィルタリングしている。このコマンドを実行すると生のパケットデータが表示されるため、その中からホスト名を探してSNI情報を確認できる。これは専門的な内容だが、TLSの接続障害時にどのサーバーに接続しようとしているかを確認する際の手がかりとなる。

さらに、特定の通信を詳細に調査したい場合、その通信全体をファイルに保存しておき、後でじっくり解析することも可能だ。「tcpdump -i eth0 -s 0 -w capture.pcap host 10.0.1.5 and port 443」というコマンドを使うと、eth0インターフェースを介して、IPアドレスが10.0.1.5でポート番号が443のホストとの間で交わされるすべてのパケットを、capture.pcapというファイルに書き出すことができる。.pcapファイルは、Wiresharkのような高機能なパケットアナライザで開いて、グラフィカルにパケットの詳細を解析できるため、トラブルシューティングの強力な武器となる。

次に、digコマンドについて解説する。digはDNS(Domain Name System)に関する情報を問い合わせるためのツールで、ウェブサイトのドメイン名からIPアドレスを調べたり、DNSサーバーの設定を確認したりする際に利用される。DNSはインターネットの「電話帳」のようなもので、ドメイン名とIPアドレスの変換を行う重要な役割を担っている。

DNSのセキュリティ拡張であるDNSSECの検証失敗は、ウェブサイトへのアクセス障害につながることがある。この問題をデバッグするには、「dig +dnssec +multi +noall +answer +authority +additional example.com」というコマンドが役立つ。+dnssecはDNSSEC関連のレコードを表示させ、+multiは結果を読みやすいマルチライン形式で表示する。このコマンドを実行すると、RRSIG、DNSKEY、DSといったDNSSECに関する特殊なレコードが確認できる。DNSSECの検証が失敗した場合、親ゾーン(上位のDNSサーバー)に登録されているDSレコードと、子ゾーン(対象ドメインのDNSサーバー)が公開しているDNSKEYレコードを比較することで、不整合を見つけ出すことができる。

システムを自動化するスクリプトなどでDNS問い合わせの結果を利用したい場合、デフォルトのテキスト形式では解析しにくいことがある。そのような場合には、「dig +yaml example.com A」というコマンドが便利だ。+yamlオプションを付けると、問い合わせ結果がYAML形式という構造化されたデータ形式で出力される。YAMLはスクリプトでプログラム的に解析しやすいため、自動化されたシステムや継続的インテグレーション(CI)環境での利用に適している。

DNSの解決が特定の環境でのみ失敗するような場合、「dig +trace +additional example.com」というコマンドを使って、DNSの委任チェーン全体をトレースすることで問題の原因を特定できる。このコマンドは、インターネットのルートDNSサーバーから始まり、対象のドメインの権威DNSサーバーに至るまでの、すべてのDNSサーバーの委任パスと、各段階で提供されるグルーレコードやCNAMEレコードといった詳細な情報を表示する。これにより、DNSの解決プロセスがどの段階で中断されているのか、あるいは誤った情報が渡されているのかを特定することが可能となる。

さらに、自分の利用しているDNSリゾルバー(プロバイダのDNSサーバーなど)のキャッシュの影響を受けずに、特定のネームサーバーが実際に何を返しているかを確認したい場合がある。その際には、「dig @ns1.example.com example.com A +noall +answer」というコマンドを使用する。@ns1.example.comのように@の後にネームサーバーを指定することで、そのネームサーバーに対して直接問い合わせを行うことができる。これにより、キャッシュされた古い情報ではなく、権威DNSサーバーが現在提供している最新の情報が確認でき、DNSの「どこでも解決するのに、ここだけ解決しない」といった状況の原因究明に役立つ。

これらのtcpdumpやdigのコマンドは、単なる機能紹介ではなく、実際にシステムエンジニアが直面するトラブルシューティングの場面で役立つ実践的な例ばかりだ。TLSハンドシェイクの失敗でクライアントが何を送っているかを知りたいとき、DNSSECの検証が壊れたときにDSとDNSKEYを比較したいとき、あるいは自動化スクリプトで機械が読み取りやすいDNS出力が必要なときなど、具体的な課題を解決するための強力な手段となる。これらのコマンドを日々の業務に活かすことで、システムの安定稼働を支え、問題解決能力を大きく向上させることができるだろう。

関連コンテンツ

関連IT用語

関連ITニュース