ICMP 機能
ICMP(Internet Control Message Protocol)機能を使用して、ネットワークの問題を診断し、デバイスの到達可能性を確認します。
プロトコルリダイレクトメッセージ
ICMP リダイレクトは、プロトコル リダイレクトとも呼ばれ、スイッチとルーターがルーティング情報をホストに伝達するために使用するメカニズムです。デバイスは、プロトコルリダイレクトメッセージを使用して、同じデータリンク上のホストに、特定の宛先で利用可能な最適なルートをホストに通知します。
プロトコルリダイレクトメッセージについて
プロトコルリダイレクトメッセージは、ホストにルーティング情報を更新し、代替ルート上のパケットを送信するように通知します。ホストがスイッチS1を介してデータパケットを送信しようとし、S1がデータパケットを別のスイッチS2に送信するとします。また、ホストから S2 への直接パスが利用可能(つまり、ホストと S2 が同じイーサネット セグメント上にある)とします。その後、S1 はプロトコル リダイレクト メッセージを送信し、宛先に最適なルートが S2 への直接ルートであることをホストに通知します。その後、ホストはパケットを S1 経由で送信するのではなく、S2 に直接送信する必要があります。S2 は、S1 から受信した元のパケットを意図した宛先に送信します。
プロトコルリダイレクトの詳細については、 RFC-1122 および RFC-4861 を参照してください。
-
データ パケットにルーティング情報が含まれている場合、スイッチはプロトコル リダイレクト メッセージを送信しません。
-
すべてのEXシリーズスイッチは、IPv4とIPv6の両方のトラフィックに対するプロトコルリダイレクトメッセージの送信をサポートしています。
プロトコルリダイレクトメッセージを無効にする
デフォルトでは、デバイスはIPv4とIPv6の両方のトラフィックに対してプロトコルリダイレクトメッセージを送信します。セキュリティ上の理由から、デバイスがプロトコルリダイレクトメッセージの送信を無効にしたい場合があります。
デバイス全体のプロトコルリダイレクトメッセージを無効にするには、 階層レベルで または no-redirects-ipv6
ステートメントを[edit system]
含 no-redirects
めます。
-
IPv4 トラフィックの場合:
[edit system] user@host# set no-redirects
-
IPv6 トラフィックの場合:
[edit system] user@host# set no-redirects-ipv6
デバイスでリダイレクトメッセージの送信を再び有効にするには、設定からステートメント(IPv4トラフィックの場合)または no-redirects-ipv6
ステートメント(IPv6トラフィック用)を削除no-redirects
します。
プロトコルリダイレクトメッセージをインターフェイス単位で無効にするには、 階層レベルに no-redirects
ステートメントを [edit interfaces interface-name unit logical-unit-number family family]
含めます。
-
IPv4 トラフィックの場合:
[edit interfaces interface-name unit logical-unit-number] user@host# set family inet no-redirects
-
IPv6 トラフィックの場合:
[edit interfaces interface-name unit logical-unit-number] user@host# set family inet6 no-redirects
Ping
Ping は ICMP を使用します。pingが成功するのは、デバイスがICMPエコー要求をターゲットに送信し、ターゲットがICMPエコー応答を返すときです。ただし、デバイスが ping リクエストに応答しないようにする状況がある場合があります。
マルチキャスト Ping パケットに対するルーティング エンジン応答を無効にする
デフォルトでは、ルーティング エンジンはマルチキャスト グループ アドレスに送信された ICMP エコー要求に応答します。ルーティング エンジンがマルチキャスト ping パケットを無視するように設定することで、権限のない人がネットワーク内の PE(プロバイダ エッジ)デバイスのリストを検出しないようにできます。
ルーティング エンジンがこれらの ICMP エコー要求への応答を無効にするには、 階層レベルに no-multicast-echo
ステートメントを [edit system]
含めます。
[edit system] user@host# set no-multicast-echo
Ping 応答の IP アドレスとタイムスタンプのレポートを無効にする
オプション付きで record-route
コマンドをping
発行すると、ルーティングエンジンは、ICMPエコー要求パケットのパスと、ICMPエコー応答のタイムスタンプをデフォルトで表示します。および no-ping-timestamp
オプションをno-ping-record-route
設定することで、権限のない人物がプロバイダ エッジ(PE)デバイスとそのループバック アドレスに関する情報を検出するのを防ぐことができます。
ルーティングエンジンを設定して、pingリクエストパケットの record-route
IPヘッダーで オプションの設定を無効にすることができます。オプションを record-route
無効にすると、ルーティング エンジンが応答で ICMP エコー要求パケットのパスを記録して表示できなくなります。
オプションの設定を無効にするようにルーティングエンジンをrecord route
設定するには、 階層レベルで ステートメントを[edit system]
含 no-ping-record-route
めます。
[edit system] user@host# set no-ping-record-route
ICMP エコー応答でタイムスタンプのレポートを無効にするには、 階層レベルに オプションを[edit system]
含 no-ping-time-stamp
めます。
[edit system] user@host# set no-ping-time-stamp
ソースクエンチメッセージ
デバイスが受信するデータグラムが多すぎる、または望ましくないデータグラムである場合、送信元のクエンチ メッセージを送信元デバイスに送信できます。送信元クエンチメッセージは、送信するトラフィック量を減らすために送信元デバイスに信号を送ります。
デフォルトでは、デバイスはICMPソースクエンチメッセージに反応します。ICMP ソースクエンチメッセージを無視するには、 階層レベルに ステートメントを[edit system internet-options]
含めますno-source-quench
。
[edit system internet-options] no-source-quench;
ICMP ソースクエンチメッセージの無視を停止するには、 ステートメントを source-quench
使用します。
[edit system internet-options] source-quench;
TTL(Time-to-Live)の有効期限
パケットヘッダーのTTL(Time-to-live)値は、パケットがネットワークを通過する時間を決定します。TTL値は、パケットが通過する各デバイス(またはホップ)でデクリメントを行います。TTL値が0のパケットを受信すると、デバイスはパケットを破棄します。TTL 有効期限切れメッセージは、ICMP を使用して送信されます。
デバイスが、ICMP TTL(有効期限)の有効期限切れエラー メッセージの送信元アドレスとして IPv4 アドレスを使用するように設定できます。これは、ICMPエラーパケットに応答して、ループバックアドレスを送信元アドレスとして設定できることを意味します。これは、ネットワークに IPv4 アドレスが重複しているため、traceroute 目的でデバイス アドレスを使用できない場合に便利です。
送信元アドレスはIPv4アドレスである必要があります。送信元アドレスを指定するには、 階層レベルで オプションを[edit system icmp (System)]
使用ttl-expired-source-address source-address
します。
[edit system icmp] user@host# set ttl-expired-source-address source-address
この設定は、ICMP TTL 有効期限メッセージにのみ適用されます。他の ICMP エラー応答メッセージでは、イングレス インターフェイスのアドレスが送信元アドレスとして引き続き使用されます。
レート制限 ICMP トラフィック
ルーティング エンジンによって ICMPv4 または ICMPv6 メッセージを生成し、ルーティング エンジンに送信できるレートを制限するには、 階層レベルに適切なレート制限ステートメントを [edit system internet-options]
含めます。
-
IPv4 の場合:
[edit system internet-options] icmpv4-rate-limit bucket-size bucket-size packet-rate packet-rate
-
IPv6 の場合:
[edit system internet-options] icmpv6-rate-limit bucket-size bucket-size packet-rate packet-rate
レート制限 ICMP エラー メッセージ
デフォルトでは、TTLが期限切れではないIPv4およびIPv6パケットのICMPエラーメッセージは、1パケット/秒(pps)の速度で生成されます。このレートは、ネットワークの輻輳を引き起こさずに、ネットワークに十分な情報を提供すると判断した値に調整できます。
TTL期限切れのIPv4またはIPv6パケットの場合、ICMPエラーメッセージのレートは設定できません。500 ppsで固定されています。
ICMPv4およびICMPv6のエラーメッセージをレート制限する理由
レート制限を調整するユースケースの例として、Webサービスを提供するデータセンターがあります。このデータセンターには、インターネット上のホストと通信する際に、MTUが9100バイトのジャンボフレームを使用する多くのサーバーがネットワーク上にあるとします。これらの他のホストでは、1500 バイトの MTU が必要です。接続の両側に最大セグメント サイズ(MSS)が適用されない限り、サーバーは、データ センターのエッジ ルーターに到達したときにフラグメント化されることなく、インターネットを介して送信するには非常に大きいパケットで応答することがあります。
多くの場合、TCP/IP 実装では、ビットが 1 に設定されたパス MTU 検出がデフォルトで dont-fragment
有効になっているため、トランジット デバイスはフラグメント化するのではなく、大きすぎるパケットをドロップします。パケットが大きすぎたため、宛先に到達できませんでしたを示す ICMP エラー メッセージがデバイスから返されます。このメッセージは、エラーが発生した場合に必要なMTUも提供します。送信ホストは、その接続に対する送信MSSを調整し、フラグメント化の問題を回避するために、より小さなパケットサイズでデータを再送信する必要があります。
高いコア インターフェイス速度では、このサービスを必要とするネットワーク内のホストの数が多い場合、エラー メッセージのデフォルトレート制限の 1 pps では、すべてのホストに通知するには不十分な場合があります。その結果、アウトバウンド パケットは通知なく破棄されます。このアクションは、データセンターエッジルーターがコアに面する各インターフェイスで処理するリクエストの量に応じて、追加の再送信またはバックオフ動作をトリガーできます。
このような場合、レート制限を増やして、送信ホストに到達するオーバーサイズのパケットの量を増やすことができます。(コアに面したインターフェイスを追加することも、問題の解決に役立ちます。
ICMPv4およびICMPv6のエラーメッセージをレート制限する方法
階層レベルでレート制限を [edit chassis]
設定しても、シャーシ全体の制限ではありません。代わりに、レート制限はインターフェイスファミリーごとに適用されます。これは、例えば、 で family inet
設定された複数の物理インターフェイスが、設定されたレートで同時にICMPエラーメッセージを生成できることを意味します。
このレート制限は、10 秒以上続くトラフィックに対してのみ有効です。レート制限は、5秒や9秒などの短い時間のトラフィックには適用されません。
-
ICMPv4 のレート制限を設定するには、 ステートメントを
icmp
使用します。[edit chassis] user@host# set icmp rate-limit rate-limit
Junos OS リリース 19.1R1 以降、最大レートは 50 pps から 1000 pps に増加しました。
-
ICMPv6 のレート制限を設定するには、 ステートメントを
icmp6
使用します。[edit chassis] user@host# set icmp6 rate-limit rate-limit
また、レート制限値が DDoS 攻撃防御設定とやり取りされる可能性も考慮する必要があります。MTU を超える例外パケットのデフォルト帯域幅値は 250 pps です。パケット数がその値を超えた場合、DDoS防御フラグは違反をフラグ付けします。レート制限を現在 mtu-exceeded
の帯域幅値よりも高く設定した場合、レート制限に一致するように帯域幅値を設定する必要があります。
例えば、ICMP レート制限を 300 pps に設定するとします。
user@host# set chassis icmp rate-limit 300
その値に一致するようにDDoS保護 mtu-exceeded bandwidth
を設定する必要があります。
user@host# set system ddos-protection protocols exceptions mtu-exceeded bandwidth 300
選択的エラー メッセージ用の ICMP 拡張オプション
IPデバイスは、ICMPプロトコルを使用してネットワーク通信の問題を診断し、特にデータグラムが意図した宛先にタイムリーに到着しているかどうかを判断します。データグラムが意図した宛先に到着しない場合、ICMP は、発生した IP デバイスに適切なエラー メッセージを報告します。
ネットワークの問題がIPパケット配信を妨げる場合、ネットワークデバイスはICMPを使用して、送信元IPアドレスにエラーメッセージを生成します。ICMPv4 および ICMPv6 は、選択的エラー メッセージの拡張オプションを提供します。
ICMP 拡張のメリット
ICMP 拡張は、次のようにインターフェイスやその他の情報を識別するのに役立ちます。
-
ICMPv4 および ICMPv6 メッセージは、番号なしインターフェイスで処理できないデータグラムのインターフェイスを識別できませんでした。
-
ICMP メッセージは、受信インターフェイスの送信元アドレスを決定し、発信元デバイスにパケットを送信することで作成されます。ただし、発信元デバイスは、ICMP メッセージの送信元を知る方法はありません。
ICMP 拡張機能により、以下の情報を含む ICMP メッセージに応答するネットワーク デバイスを識別できます。
-
IP インターフェイスを介して受信したデータグラム。
-
データグラムがIPインターフェイスのサブIPコンポーネントに到着しました。
-
データグラムが転送される IP インターフェイス。
-
転送されたネクストホップIPアドレス。
RFC5837を実装して、追加のフィールドを追加して、番号付きおよび番号なし集約型イーサネットインターフェイスの両方に対してICMP(IPv4およびIPv6)メッセージを選択できるようにしました。
- ICMPv4 時間超過
- ICMPv4 宛先到達不能
- ICMPv6 時間超過
- ICMPv6 宛先到達不能
ICMPv6 拡張は、番号付きインターフェイスでのみサポートされています。
ICMP 拡張を有効にする方法
ICMPv4 拡張を有効にするには:
[edit chassis] user@host# set system allow-icmp4-extension
ICMPv4 拡張を無効にするには、設定を削除します。
[edit chassis] user@host# delete system allow-icmp4-extension
ICMPv6 拡張を有効にするには:
[edit chassis] user@host# set system allow-icmp6-extension
ICMPv6 拡張を無効にするには、設定を削除します。
[edit chassis] user@host# delete system allow-icmp6-extension