Termshark: Linuxターミナル上でWireshark級のパケット解析を実現する

Network tutorial - IT technology blog
Network tutorial - IT technology blog

SSH経由のネットワークデバッグという悪夢

以前、深夜2時にサービスサーバー群で接続が不安定になるという、泣くに泣けないトラブルに遭遇したことがあります。チームメンバーはファイアウォールの誤遮断か、TLSハンドシェイクの問題を疑っていました。

当時、私に与えられていたのはSSHアクセス権のみでした。手元にあるツールはtcpdumpだけで、画面に流れるデータはまるで文字の迷路のよう。EthernetからHTTPまで各レイヤーを詳細に調査するには、.pcapファイルを保存し、scpでローカルPCにダウンロードしてから Wiresharkで開くしかありませんでした。

このプロセスは非常に時間がかかります。ターミナルとGUIを行ったり来たりしていると集中力が削がれますし、システムが「炎上」しているような緊急事態では、ファイル転送を待つ1分1秒が極めて貴重です。

なぜtcpdumpだけでは不十分なのか?

tcpdumpが伝説的なツールであることに疑いの余地はありません。しかし、パケットの内容を深く掘り下げる必要がある場合、エンジニアを苛立たせるいくつかの弱点が露呈します。

  • 見づらさ: プレーンテキスト形式では、プロトコルヘッダーの判別が困難です。
  • 柔軟性の欠如: 矢印キーでスクロールしたり、各パケットを素早くチェックしたりすることができません。
  • ストリーム追跡(Stream tracking)の難しさ: 複雑なフィルタを暗記していない限り、tcpdumpでTCPストリームを追跡するのは至難の業です。

多くの人はX11 Forwardingを使ってWiresharkのインターフェースをローカルマシンに飛ばそうとしますが、pingが100msを超えると、ラグがひどすぎて操作不能になります。

現在主流の3つのアプローチ

コマンドライン(CLI)環境でネットワーク分析を行う場合、通常は3つの選択肢があります。

  1. 従来の方法: tcpdump.pcapファイルを出力してダウンロードする。遅くて面倒です。
  2. TSharkの使用: WiresharkのCLI版。非常に強力ですが、表示はまだ素っ気ないものです。
  3. Termsharkの使用: これこそが、今回紹介する最適解です。

Termshark:ポケットに入るWireshark

Termsharkは、Go言語で書かれたtshark用のターミナルUI(TUI)です。Wiresharkでおなじみの「パケットリスト」「レイヤー詳細」「ヘキサデータ」の3ペイン構成を完璧に再現しています。SSH越しでもスムーズに動作し、GUI不要でシステムリソースもほとんど消費しません。

Linuxへのクイックインストール

すでにGo環境が整っている場合、インストールは数秒で完了します。

go install github.com/gcla/termshark/v2/cmd/termshark@latest

または、GitHubからビルド済みのバイナリを直接ダウンロードしてすぐに使用することもできます。

curl -LO https://github.com/gcla/termshark/releases/download/v2.4.0/termshark_2.4.0_linux_x64.tar.gz
tar -zxvf termshark_2.4.0_linux_x64.tar.gz
sudo mv termshark_2.4.0_linux_x64/termshark /usr/local/bin/

重要事項: Termsharkはコアエンジンとしてtsharkを利用するため、事前にインストールしておくのを忘れないでください。

sudo apt update && sudo apt install -y tshark

実務での活用シーン

私は主に以下の2つのシナリオでTermsharkを使用しています。

1. リアルタイムでのライブキャプチャ

ネットワークカードeth0のトラフィックを確認するには、次のように入力します。

sudo termshark -i eth0

インターフェースがすぐに立ち上がります。Tabキーでペインを切り替え、/キーでフィルタを入力します。例えば、サーバーへのデータ送信リクエストを探すにはhttp.request.method == "POST"と入力します。

2. 既存のpcapログファイルの解析

同僚からログファイルを受け取った際、ローカルにダウンロードせずにその場で素早く確認できます。

termshark -r debug_capture.pcap

覚えておくべきショートカットキー

プロユーザーのように使いこなすには、以下のキーを覚えておくと便利です。

  • Tab: 3つのペイン間を移動。
  • Enter: パケットレイヤーの詳細を展開、または折り畳む。
  • /: フィルタ検索バーを起動(構文はWiresharkと同一)。
  • f: Follow stream機能。クライアント・サーバー間のやり取りをすべて確認するのに非常に便利。
  • q: プログラムを素早く終了。

実戦経験:MTU問題の解決

以前、MTU(最大転送単位)エラーに関連する難解なトラブルを処理したことがあります。パケットが断片化され、中継ホップでドロップされていました。Termsharkのおかげで、素早くicmpでフィルタリングし、ゲートウェイサーバー上でIPヘッダーのDon't Fragmentフラグを直接確認することができました。

従来の方法なら、ファイルのダウンロードと解析に少なくとも15分はかかっていたでしょう。Termsharkなら3分足らずで完了しました。このツールは非常に軽量で、GUI版Wiresharkが数百MB消費するのに対し、わずか数十MBのRAMしか使いません。

最後に

Termsharkは、特に複雑なグラフ描画が必要な場合など、Wiresharkを完全に置き換えるものではありません。しかし、現場での迅速なデバッグやトラブルシューティングにおいて、これに勝るツールはありません。踏み台サーバー(Jump Host)やステージングサーバーにぜひインストールしてみてください。マウスを使わずにキーボードだけでネットワークを解析する快感に、きっと魅了されるはずです。

Share: