【入門編】 ICMP(Type 3)の到達不能通知とトラブルシューティング – ネットワーク基礎とWebセキュリティ実践ガイド

「宛先不明」の正体を知る!ICMP Type 3 が教えてくれるネットワークの真実

こんにちは!ネットワークの世界へようこそ。

インフラエンジニアの現場にいると、必ずと言っていいほど直面するのが「なぜか繋がらない」というトラブルです。そんな時、私たちの頼れる相棒となるのが「ICMP」というプロトコル。特に、今日解説する ICMP Type 3 は、ネットワークの「迷子」を見つけるための非常に重要なヒントを運んできてくれるメッセンジャーです。

難解なビット列の話は一旦置いておいて、まずは郵便配達に例えて、この仕組みを紐解いていきましょう。

—

1. 郵便配達で考える「ICMP Type 3」の役割

あなたが友人に手紙を出したと想像してください。しかし、数日経っても返事がない。「あれ、届いてないのかな?」と不安になりますよね。

そんな時、郵便局員さんから「残念ながら、その住所の建物はもう存在しませんでした」とか、「その部屋番号の住人は引っ越しました」という通知が届いたらどうでしょう?

ネットワークの世界における ICMP Type 3(Destination Unreachable:宛先到達不能)は、まさにこの「郵便局員さんからの報告書」なんです。

  • ネットワーク到達不能 (Code 0): 「その町(ネットワーク)自体が見当たりません」
  • ホスト到達不能 (Code 1): 「町はあるけれど、その家(ホスト)に辿り着けません」
  • ポート到達不能 (Code 3): 「家には着いたけれど、その部屋(ポート)は鍵がかかっていて誰もいません」

このように、ICMP Type 3 は単に「ダメです」と突き放すのではなく、「なぜダメなのか」という理由を丁寧に教えてくれる、とっても親切なメッセージなんですね。

—

2. なぜ私たちは「ICMP Type 3」を気にするのか?

トラブルシューティングの現場では、このメッセージが「ファイアウォールによって意図的にブロックされているのか」、それとも「経路の途中で本当に消滅しているのか」を判断する判断材料になります。

もし、あなたがサーバーを構築していて、本来開いているはずの 80 番ポートにアクセスしたのに「ポート到達不能」が返ってきたら?それは「サーバー側のサービスが起動していない」という決定的な証拠になります。逆に、何も返ってこない(タイムアウトする)場合は、途中のファイアウォールがパケットを無言で破棄している可能性が高い、と推測できるわけです。

—

3. 実践!コマンドで「宛先不明」を覗いてみる

実際に、皆さんの手元にあるPCのターミナルを使って、この挙動を観察してみましょう。

例えば、LinuxやmacOSで traceroute(Windowsなら tracert)を打つと、経路の途中でどうなっているかが分かります。

# google.com までの経路を確認するコマンド
# 途中でパケットがどう反応するかを観察します
traceroute google.com

もし、特定の環境で「あえてポートを指定して」到達不能を確認したい場合、nmap というツールを使うと非常に分かりやすいです。

# 192.168.1.10 の 12345 番ポートへスキャンを投げる
# もしポートが閉じていれば、ICMP Type 3 (Code 3) が返ってきます
nmap -p 12345 192.168.1.10

nmap の実行結果で closed と表示されるのは、ターゲットから「ポート到達不能」の ICMP が返ってきたことを意味しています。

—

4. セキュリティスペシャリストからのアドバイス:全部返せばいいの?

ここで一つ、ゼロトラストの視点から重要な話をします。
「親切なエラーメッセージ」は便利ですが、セキュリティ的には「情報を与えすぎ」という側面もあります。

攻撃者にとって、ポートが「閉じている」ことが分かると、そこにはサービスが存在しないことが即座にバレてしまいます。そのため、ファイアウォールの設定では、あえて ICMP を返さず、パケットを「ドロップ(無視)」する設定にすることも一般的です。

# 現場でよく見る iptables の設定例
# ポート到達不能を返さず、無言でパケットを捨てる設定
iptables -A INPUT -p tcp --dport 12345 -j DROP

—

まとめ:ネットワークは「対話」である

ICMP Type 3 は、ネットワークという広大な海の中で、パケットが迷子になった際に届く「SOS」や「状況報告書」です。

  • Type 3 が来たら、「なぜ届かなかったのか」のコード(理由)を確認する。
  • 何も返ってこない なら、ファイアウォールによる隠蔽(ドロップ)を疑う。

この二つを意識するだけで、トラブルシューティングの景色はガラリと変わります。ネットワークは、単なるデータの通り道ではなく、デバイス同士が「届いたよ!」「いや、そこは行けないよ」と会話を交わしている場所なんですね。

まずは、身近なサーバーやPCに対して、あえて「存在しないポート」にアクセスして、どんな返事が返ってくるのかを観察してみてください。その小さな実験が、あなたのエンジニアとしての直感を、劇的に鋭くしてくれるはずです!

それでは、また次回の深掘りでお会いしましょう。ハッピー・ネットワーキング!

コメント

タイトルとURLをコピーしました