この部分の広告を募集しています。詳しくはこちら
- 【PR】「超求人成功法」わずか1,500円で求人応募者激増の魔法 これでエンジニアも集まる!
- 【PR】楽天市場 デスクトップパソコン | ノートパソコン | プレズマテレビ | 液晶テレビ | DVD/HDDレコーダー || デル今週のおすすめ商品
- 【PR】CCNAの勉強なら、『CCNAテキスト』900ページ以上のボリュームでCCNAやネットワークエンジニアとして必要な技術を網羅!
ICMP(Internet Control Message Protocol)その5
カテゴリー:TCP/IP (2002年02月23日)
ICMPリダイレクトメッセージ
コンピュータのデフォルトゲートウェイの設定次第で、目的のネットワークに対する最適な経路を通らないこともあります。そのような場合、ICMPタイプ5のリダイレクトメッセージで、よりよい経路を通知することができます。
ICMPリダイレクトメッセージの動作
では、具体的に次のネットワークを考えてみます。
10.0.0.0/8のネットワークにコンピュータとルータA、ルータBがいます。さらに、ルータAの向こう側には20.0.0.0/8のネットワーク、ルータBの向こう側に30.0.0.0/8のネットワークがあります。30.0.0.0/8のネットワークには、サーバがいて、30.0.0.1のIPアドレスを持っています。10.0.0.0/8のネットワークにいるコンピュータのIPアドレスは、10.0.0.0/8でデフォルトゲートウェイとしてルータAのIPアドレスが設定されています。
ルータA、ルータBにはスタティックルーティングでもダイナミックルーティングでもなんでもいいのですが、きちんとすべてのネットワークを認識しているものだとします。 たとえば、ルータAのルーティングテーブルは次のようになります。

このようなネットワークでクライアントとサーバの通信を考えてみます。サーバはクライアントとは異なるネットワークにいるので、クライアントはまずデフォルトゲートウェイ、つまるルータAにパケットを送ります。 サーバは30.0.0.0/8のネットワークにいるので、本当はルータAよりもルータBに送るほうがいいのですが、クライアントはどのようなネットワーク構成になっているのかよくわかりません。設定されているデフォルトゲートウェイに送ります。
ルータAはやってきたパケットの送信先アドレスを見てルーティングテーブル照合します。そうすると、30.0.0.0/8はネクストホップがルータBでE0インタフェースから出せばいいことがわかります。で、パケットを次にルータBに中継していくわけですね。
こういう最適ではない経路を選んでしまっている場合に、よりよい経路を教えるためにICMPタイプ5リダイレクトメッセージが使われています。
ICMPリダイレクトが出される条件は、パケットが入ってきたインタフェースに再び出力するときです。この例では、ルータAのE0インタフェースにパケットが入ってきました。そして、ルータAがルーティングをしてE0インタフェースを通してルータBに中継しています。同じインタフェースに出力することになってしまったので、効率が悪いルーティングです。そこでクライアントに対して、「30.0.0.1にいくならルータBに送ってね~」ということを通知します。
リダイレクトメッセージを受け取ると
このICMPリダイレクトを受け取ったクライアントは、自分のルーティングテーブルに追加します。これまであまり詳しくお話したことがなかったのですが、コンピュータ自身もルーティングテーブルを持っているんですね。で、次からは30.0.0.1に対してはより効率のいい、ルータBへ送っていくことになります。
ICMPリダイレクトのメッセージの内容が「30.0.0.1」というアドレスなのか、それとも「30.0.0.0/8」というネットワークなのかということは、おそらくルータのICMPの実装によって変わってきているようです。シスコのルータで、実際にこの例のネットワークを構築すると「30.0.0.1」というアドレスで返ってきています。 もしも、違うメッセージの例があるのを見たことがあるという方がいらっしゃればぜひ教えてくださいね。
セキュリティ上の観点から
このようにICMPリダイレクトはより適切な経路を通知するために使われるのですが、セキュリティ上の観点から無効にされることもよくあります。セキュリティを考えると、なるべくネットワークの構成を知られたくないものです。でも、ICMPリダイレクトではルータの存在、ネットワークの存在がわかってしまいます。このようなネットワークの存在、ルータやサーバのIPアドレスなどの情報はクラッカーにとって不正侵入するための情報にもなりかねません・・・



初めまして。ICMPリダイレクトを構成している場合のデータの流れについて質問です。
つまり上の図で、20.0.0.0/8~30.0.0.0/8間で通信がある場合、その内容は10.0.0.0/8でキャプチャ可能ってことでしょうか?
「ひとつのセグメントを、全く関係のないデータがとおり抜けるなんて、まさか!こんなトポロジありえない」と思っていたのですが・・・。