サーバにはGUIがありません。CLIでパケットを捕まえる tcpdump は、障害調査で頼れる相棒です。基本の使い方をまとめます。
tcpdumpとは
コマンドラインで動くパケットキャプチャツールです。Linuxサーバ上で「実際に何が届いて、何が出ているか」を確認できます。GUIが使えないサーバでの切り分けに必須です。
基本の使い方
tcpdump -i eth0 … eth0を流れる通信を表示
tcpdump -i eth0 -n … 名前解決せずIPのまま表示(速い)
tcpdump -i eth0 -nn … ポートも番号のまま
-n を付けると、逆引きで止まらず快適です。
フィルタで絞る
大量に流れるので、条件で絞ります。
tcpdump -i eth0 host 192.168.1.10 … 特定ホストとの通信
tcpdump -i eth0 port 443 … 443番だけ
tcpdump -i eth0 src 10.0.0.5 … 送信元が特定IP
tcpdump -i eth0 tcp port 22 and host 10.0.0.5 … 組み合わせ
よく使う切り分けパターン
- 「サーバにパケットが届いているか」を確認
tcpdump -i eth0 -nn host <相手IP> and port <ポート>
相手からのパケットが表示されれば、少なくともそこまでは届いています。何も出なければ、手前(経路やFW)で止まっている可能性が高い、と切り分けられます。
- SYNだけ見て、接続の試みが来ているか確認
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'
ファイルに保存してWiresharkで見る
CLIで捕まえて、後でGUIでじっくり分析、が定番です。
tcpdump -i eth0 -w capture.pcap host 10.0.0.5
-w でpcapファイルに保存し、それをWiresharkで開けば、詳細に解析できます。サーバで捕獲、手元で分析、という分業ができます。
注意点
- 本番で全通信を捕ると負荷になる。フィルタで絞り、必要な分だけ。
- 通信内容が含まれるので、取り扱いは慎重に。
- root権限が必要なことが多い。
まとめ
tcpdumpは、CLIしかないサーバでパケットを確認できる強力なツールです。「サーバにパケットが届いているか」を確かめられるので、障害の切り分けが一段深くなります。まずは tcpdump -i eth0 -nn host <IP> で、狙った通信を絞って見るところから。捕まえて -w で保存し、Wiresharkで分析する合わせ技も覚えておくと便利です。