ICMPリダイレクトの仕組みについて説明します。
ICMPリダイレクトとは
ICMPリダイレクトとは、ルーター等のL3機器が、自身よりも適切なゲートウェイが存在すると判断したときに、ICMP(Type:5 Redirect)を利用して送信元に通知する機能です。ICMPリダイレクトメッセージを受け取った送信元の機器は、ルーティングテーブルに一時的に経路を追加し、以降は通知されたゲートウェイを利用して通信を行います。
ICMPのタイプとコードの説明については、下記を参照してください。
ICMPリダイレクトの仕組み
ICMPリダイレクトにより、経路が変更される仕組みを説明します。
ネットワーク構成
ネットワーク環境は下記の通りです。
- Desktop1/Router1/Router2/L2Switchが、同一セグメント(10.0.0.0/24)に接続されています。
- Desktop2は、Router2のGi0/0に別セグメント(192.168.1.0/24)で接続されています。
- Dektop1のデフォルトゲートウェイは、Router1(10.0.0.1)に設定されています。
- Router1には、別セグメント(192.168.1.0/24)へのネクストホップして、Router2(10.0.0.2)が設定されています。
通常時の経路(ICMPリダイレクト機能が利用されない場合)
ICMPリダイレクト機能が利用されない場合、Desktop1からDesktop2への経路は下記の通りです。
Desktop1でtracerouteを実行します。
traceroute 192.168.1.100
Desktop1:~$ traceroute 192.168.1.100
traceroute to 192.168.1.100 (192.168.1.100), 30 hops max, 46 byte packets
1 10.0.0.1 (10.0.0.1) 6.884 ms 6.811 ms 6.067 ms
2 10.0.0.2 (10.0.0.2) 17.731 ms 16.961 ms 9.244 ms
3 192.168.1.100 (192.168.1.100) 9.294 ms 13.611 ms 15.268 ms
Router1→Router2→Desktop3を経由して通信していることがわかります。
Desktop1でルーティングテーブルを確認します。
ip route
Desktop1:~$ ip route
default via 10.0.0.1 dev eth0
ルーティングテーブルには、デフォルトゲートウェイ(10.0.0.1)のみが設定されています。
ICMPリダイレクトによる通信経路変更のフロー
ICMPリダイレクトによる通信経路変更のフローについて説明します。
Router1は、Dekstop1からパケットを受け取ると、Router2へパケットをルーティングすると同時に、Dekstop1へICMPリダイレクトメッセージを送信します。ICMPリダイレクトメッセージには「効率的にネットワークを利用するために、ゲートウェイをRouter2にするように」という情報が含まれています。
パケットキャプチャを確認すると、Type5/Code0のICMPメッセージが送られていることがわかります。
パケットキャプチャ抜粋
Internet Control Message Protocol
Type: 5 (Redirect)
Code: 0 (Redirect for network)
Checksum: 0xa7da [correct]
Gateway address: 10.0.0.2
ICMPリダイレクトを送信する条件
ルーター等のL3機器は、転送パケットの受信インターフェースと送信インターフェースが同じときに、効率的な経路があると判断します。
ICMPリダイレクトメッセージを受け取ったDesktop1は、自身のルーティングテーブルに「宛先:192.168.1.100、ネクストホップ:10.0.0.2」という情報を追加します。
Dekstop1のルーティングテーブルを確認します。
ip route
Desktop1:~$ ip route
default via 10.0.0.1 dev eth0
192.168.1.100 via 10.0.0.2 dev eth0
ルーティングテーブルに、「宛先:192.168.1.100、ネクストホップ:10.0.0.2」という情報が追加されています。
ICMPリダイレクトメッセージにより追加されたルーティング情報は、一定時間が経過すると自動的に削除されます。
以降は、Router1を経由せずに、直接Router2へパケットを送信し通信が行われます。
Desktop1からDekstop2へ連続pingを実施した際のパケットキャプチャを確認すると、2回目のICMPエコー要求から、宛先MACアドレスがRouter2に変わっていることがわかります。
パケットキャプチャ抜粋
1 0.000000 10.0.0.100 → 192.168.1.100 ICMP 98 Echo (ping) request id=0x0004, seq=0/0, ttl=64
Destination: RealtekU_0c:0f:06 (52:54:00:0c:0f:06) <--- Router1 Gi0/1のMACアドレス
Source: RealtekU_1b:4b:2a (52:54:00:1b:4b:2a)
4 1.000543 10.0.0.100 → 192.168.1.100 ICMP 98 Echo (ping) request id=0x0004, seq=1/256, ttl=64
Destination: RealtekU_19:24:80 (52:54:00:19:24:80) <--- Router2 Gi0/1のMACアドレス
Source: RealtekU_1b:4b:2a (52:54:00:1b:4b:2a)
ICMPリダイレクトの問題点・無効化
ICMPリダイレクトは、ネットワーク経路を効率的に利用するために便利な仕組みですが、悪用される可能性や管理上の問題点もあります。
ICMPリダイレクトを悪用する例
ルーティングテーブルを書き換えることで通信を不能にする。
ルーティングテーブルを肥大化させることで処理能力を超過させ、通信を不能にする。
経路を変更し、悪意のある行為(盗聴やデータ改竄)を行う。
管理上の問題
ICMPリダイレクトにより、管理者が意図しないルーティングで、偶然通信が成立してしまうことがあります。この場合、不要と思われた機器を撤去することで、通信に影響を与えてしまうことがあります。
HSRP利用時の注意点
Cisco機器でHSRPを利用している場合、ICMPリダイレクト機能が動作すると、想定通りに冗長化できない場合があります。そのため、HSRPを有効にしているインターフェースでは、ICMPリダイレクトメッセージの送信が停止されます。
ICMPリダイレクトの無効化
上述の理由から、ICMPリダイレクト機能は無効化することが推奨される場合が多いです。
- ホスト端末では、ICMPリダイレクトを受け入れないように設定する。
- ルーター等のL3機器では、ICMPリダイレクトを送信しないように設定する。
- Firewall等では、ICMPリダイレクトの通貨を許可しないように設定する。
以上で、ICMPリダイレクトの仕組みの説明は完了です!