Pingコマンドが「嘘」をつくとき
Webサイトにはスムーズにアクセスできるのに、サーバーへのpingは「Request timeout」ばかり。そんな状況に遭遇したことはありませんか?私は以前、スタートアップ企業のデータセンター管理をしていた頃、この問題に頭を抱えたことがあります。システムのファイアウォールが、ネットワークスキャンから身を隠すために、すべてのICMPパケットをブロックするように設定されていたのです。
このような時、pingやtracerouteだけに頼っていると混乱するばかりです。効率的なネットワーク遅延の原因究明には、より高度なツールが必要になります。だからこそ、私は常にhping3をツールキットに忍ばせています。これは単なる接続確認ツールではなく、非常に強力な「パケット作成ツール(packet crafter)」です。あらゆる種類のトラフィックをシミュレートして、システムが実際にどのように反応するかを確認できます。
hping3:ネットワーク界の万能ナイフ
nmapがポートスキャンに優れ、tcpdumpがパケットキャプチャに長けているなら、hping3はその中間に位置します。SYN、ACK、FIN、RSTなどのフラグをカスタマイズして、TCP、UDP、またはICMPパケットを自分の手で作り上げることができます。
hping3の最大の価値は、ファイアウォールを極めて詳細に「調査」できる点にあります。ICMPが禁止されている環境でも、ポート80にSYNパケットを送信してアクセス権限を確認できます。私にとって hping3は、新しいファイアウォールルールが「過剰にブロック」していないかを検証する最も手っ取り早い方法です。
30秒でできるhping3のインストール
ほとんどのLinuxディストリビューションのリポジトリで利用可能です。お使いの環境に合わせて以下のコマンドを実行してください:
# Debian, Ubuntu, Kali Linux の場合
sudo apt update && sudo apt install hping3 -y
# RHEL, CentOS, Fedora の場合
sudo yum install hping3
注意:hping3は生のソケット(raw socket)を作成するためにネットワーク層に深く干渉するため、実行にはsudo権限が必須です。これは、高度なLinuxネットワーク管理を行う際に共通する特徴です。
実戦で役立つ5つのhping3テクニック
1. TCP Ping:ICMPの壁を貫通する
従来のPingがブロックされている場合は、TCP Pingを使用します。ICMPの代わりに、開いているポート(ポート80や443など)にTCP SYNパケットを送信します。応答があれば、回線は正常であると判断できます。
sudo hping3 -S -p 80 1.1.1.1
-S: SYNフラグを送信。-p 80: ポート80をターゲットにする。
結果の中のflags=SA (SYN-ACK) という行に注目してください。これはポートが開いており、接続の準備ができていることを示しています。
2. ステルス形式のポートスキャン (Stealth Scan)
nmapも一般的ですが、hping3はまた違った細やかさを提供します。ファイアウォールが未知のパケットをどのように処理するかを確認できます。例えば、ポート80から100の範囲をSYNパケットでスキャンするには:
sudo hping3 -8 80-100 -S 192.168.1.10
もしflags=RA (RST-ACK) が返ってくれば、そのポートは閉じているものの、ファイアウォールは通過を許可しています。もし何の反応もなければ(タイムアウト)、ファイアウォールがパケットを密かに「ドロップ (drop)」していることは間違いありません。
3. 実際のサービスの遅延(Latency)を測定する
データセンターでは、ICMPパケットは優先度が低く設定されることが多く、その結果Pingの数値が正確でない場合があります。不安定なネットワークの遅延を24時間365日監視・診断する方法を確立する前に、私はよくhping3を使って、実際のサービスポートの遅延を測定します:
sudo hping3 -c 10 -S -p 443 google.com
結果のrtt(ラウンドトリップタイム)は、ユーザーがHTTPS(ポート443)接続を確立する際に実際に待機する時間となります。
4. TCP SYNによるTraceroute
tracerouteを実行して* * *ばかり表示されたことはありませんか?それは途中のホップがUDPやICMPをブロックしているからです。TCP SYNを使って、それらを「見通して」みましょう:
sudo hping3 --traceroute -V -S -p 80 8.8.8.8
この方法により、経路上のどのルーターがボトルネックになっているかを正確に特定できます。
5. 負荷耐性テスト (Stress Test)
これは強力ですが、取り扱いには注意が必要な機能です。私は自社のDDoS防御システムの感度をテストするためにこれを使用します。警告:このコマンドは、自分が所有するシステムに対してのみ実行してください。
sudo hping3 -S -p 80 --flood 192.168.1.10
--floodパラメータは、応答を待たずに可能な限り速くパケットを送りつけます。このコマンドは、攻撃を受けた際にファイアウォールのSYN Cookies機能が有効になり、10,000件以上の同時接続を処理するためのスタック設定が正しく機能するかを確認するのに役立ちます。
返されるフラグの読み解き方
hping3を実行する際、注目すべきはflags列だけです:
- SA (SYN-ACK): ポートは開いています。どうぞお入りください.
- RA (RST-ACK): ポートは閉じていますが、ホストからの応答はあります。
- A (ACK): ステートフルファイアウォールの調査時によく見られます。
- 応答なし: パケットはファイアウォールによって「ゴミ箱に捨てられた(Dropped)」状態です。
実録:厄介なMTUエラー
ある会計サーバーのデバッグをしていた時のことです。Pingは通るのにWebサイトの表示が極端に遅く、不安定でした。hping3を使って異なるサイズのパケットを送信したところ(フラグ -d)、1400バイトを超えるパケットの処理に失敗する古いスイッチがあることが判明しました。デフォルトのPingだけを使っていたら、無実のLANケーブルを全部交換するのに1週間は費やしていたでしょう。
おわりに
hping3は毎日使うようなツールではありません. しかし、ネットワークで複雑なトラブルが発生した際、インフラ担当者とやり取りするための「決定的な証拠」になります。ぜひラボ環境で触ってみてください。どんな理論書よりも深くネットワークプロトコルを理解できるはずです。

