用語辞典・IPv6・接続方式

ICMPv6

ICMPv6とは

ICMPv6は、IPv6通信のエラー通知、診断、近隣探索などを運ぶ不可欠な制御用プロトコルです。正式名称はInternet Control Message Protocol for IPv6(インターネット・コントロール・メッセージ・プロトコル・フォー・アイピーブイシックス)です。

送れなかった理由を送信元へ返すエラーメッセージと、問い合わせ・応答などの情報メッセージがあります。IPv6ヘッダーのNext Header値では58で識別されます。

ICMPv6はpingだけの通信ではありません。すべて遮断すると、大きすぎるパケットの調整や近隣探索が働かず、IPv6通信そのものが壊れます。

パケットを届けられない理由を、途中の機器や宛先が送り返す必要な制御メッセージを選択的に通し、一律遮断を避ける
IPv6パケットに対して到達不能、Packet Too Big、時間超過、パラメーター問題、Echo応答が返り、NDPやグループ管理にもICMPv6が使われることと一律遮断の問題を示す図解
図1エラーは多くの場合、問題が起きたパケットの送信元へ返ります。受信側は引用された元パケットを手掛かりに、どの通信で問題が起きたか判断します。

エラーと情報メッセージを分けて読む

Typeの上位区分で、エラーか情報かを判断するエラーの中でも、原因に応じて送信側の対応が異なる
1Destination Unreachable

経路、管理ポリシー、宛先ポートなどの理由で届けられない

2Packet Too Big

次のリンクで転送できる最大MTUを送信元へ知らせる

3Time Exceeded

Hop Limitが尽きた、または断片の再構成が時間切れになった

4Parameter Problem

IPv6ヘッダーや拡張ヘッダーの処理できない位置を示す

128 / 129Echo 要求 / 応答

到達確認と往復時間測定に使う情報メッセージ

図2ICMPv6メッセージはType、Code、Checksumと種類別フィールドから成ります。チェックサムにはIPv6疑似ヘッダーも含めます。

Packet Too Bigは、IPv6の経路MTU調整に欠かせない

IPv6ルーターは転送途中でパケットを断片化しません。次のリンクのMTUより大きいパケットを受けると破棄し、Packet Too BigへそのリンクのMTUを入れて送信元へ返します。

送信元は通知を基に送信サイズを小さくするか、必要なら送信元でFragment拡張ヘッダーを使います。この通知がファイアウォールで失われると、小さい通信は通るのに大きいWeb応答やVPNだけ止まる、という症状が起き得ます。

エラーを返してはいけない場面もある

エラーメッセージへさらにエラーを返すと無限連鎖になるため、ICMPv6エラーに対して原則として別のICMPv6エラーを生成しません。マルチキャスト宛てパケットへのエラーにも制限がありますが、Packet Too Bigなど例外があります。

受信したエラーを無条件に信じて通信状態を変更すると攻撃に利用されます。実装は、引用された元パケットが実際の通信に対応するかを確認し、到達不能通知などの処理範囲を制限します。

NDPとMLDも、ICMPv6のメッセージ形式を使う

NDPのRS・RA・NS・NA・RedirectはICMPv6のType 133〜137です。IPv6マルチキャストの参加状態を管理するMLD(Multicast Listener Discovery/マルチキャスト・リスナー・ディスカバリー)もICMPv6メッセージとして定義されます。

したがってファイアウォールでは「ICMPだから不要」とまとめて拒否せず、RFC 4890などを基に、境界・端末・ルーターの役割ごとに必要なTypeとCodeを許可します。Echo 要求を拒否する判断と、Packet Too BigやNDPを拒否する判断は分けます。

仕様の確認資料:RFC 4443「Internet Control Message Protocol for IPv6」RFC 8200「Internet Protocol, Version 6 Specification」RFC 4890「Recommendations for Filtering ICMPv6 Messages in Firewalls」

関連用語