ICMPの機能
概要 インターネット制御メッセージプロトコル(ICMP)機能を使用して、ネットワークの問題を診断し、デバイスの到達可能性を確認します。
機能エクスプローラーを使用して、特定の機能のプラットフォームとリリースのサポートを確認します。
プロトコルリダイレクトメッセージ
ICMPリダイレクトは、プロトコルリダイレクトとも呼ばれ、ルーティング情報をホストに伝えるためにスイッチとルーターが使用するメカニズムです。デバイスは、プロトコルリダイレクトメッセージを使用して、同じデータリンク上のホストに、特定の宛先で利用可能な最善のルートを通知します。
プロトコルリダイレクトメッセージについて
プロトコルリダイレクトメッセージは、ルーティング情報を更新し、代替ルートでパケットを送信するようにホストに通知します。ホストがスイッチS1を介してデータパケットを送信しようとし、S1がそのデータパケットを別のスイッチS2に送信するとします。また、ホストから S2 への直接パスが使用可能である (つまり、ホストと S2 が同じイーサネット セグメント上にある) とします。次に、S1 はプロトコルリダイレクトメッセージを送信して、宛先の最適なルートが S2 への直接ルートであることをホストに通知します。ホストは、パケットを S1 経由で送信するのではなく、S2 に直接送信する必要があります。S2 は、S1 から受信した元のパケットを目的の宛先に送信します。
プロトコルのリダイレクトの詳細については、 RFC-1122 および RFC-4861 を参照してください。
-
データパケットにルーティング情報が含まれている場合、スイッチはプロトコルリダイレクトメッセージを送信しません。
-
すべてのEXシリーズスイッチは、IPv4とIPv6の両方のトラフィックに対してプロトコルリダイレクトメッセージの送信をサポートしています。
プロトコルリダイレクトメッセージの無効化
デフォルトでは、デバイスは IPv4 と IPv6 の両方のトラフィックに対してプロトコルリダイレクトメッセージを送信します。セキュリティ上の理由から、デバイスがプロトコルリダイレクトメッセージを送信できないようにすることができます。
デバイス全体のプロトコルリダイレクトメッセージを無効にするには、[edit system]
階層レベルで no-redirects
または no-redirects-ipv6
ステートメントを含めます。
-
IPv4トラフィックの場合:
[edit system] user@host# set no-redirects
-
IPv6トラフィックの場合:
[edit system] user@host# set no-redirects-ipv6
デバイス上でリダイレクトメッセージの送信を再び有効にするには、設定から no-redirects
ステートメント(IPv4トラフィックの場合)または no-redirects-ipv6
ステートメント(IPv6トラフィックの場合)を削除します。
インターフェイスごとにプロトコルリダイレクトメッセージを無効にするには、[edit interfaces interface-name unit logical-unit-number family family]
階層レベルで no-redirects
ステートメントを含めます。
-
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 は ICMP を使用します。ping の成功は、デバイスがターゲットに ICMP エコー要求を送信し、ターゲットが ICMP エコー応答で応答した場合です。ただし、デバイスが ping 要求に応答しないようにする場合があります。
マルチキャスト Ping パケットへのルーティング エンジンの応答を無効にする
デフォルトでは、ルーティング エンジンはマルチキャスト グループ アドレスに送信された ICMP エコー要求に応答します。マルチキャスト ping パケットを無視するようにルーティング エンジンを設定することで、権限のない人物がネットワーク内の PE(プロバイダ エッジ)デバイスの一覧を発見するのを防ぐことができます。
ルーティング エンジンがこれらの ICMP エコー要求に応答しないようにするには、[edit system]
階層レベルに no-multicast-echo
ステートメントを含めます。
[edit system] user@host# set no-multicast-echo
Ping 応答のレポート IP アドレスとタイムスタンプの無効化
record-route
オプションを付けて ping
コマンドを発行すると、ルーティング エンジンはデフォルトで ICMP エコー要求パケットのパスと ICMP エコー応答のタイムスタンプを表示します。no-ping-record-route
オプションとno-ping-timestamp
オプションを設定することで、権限のない人物によるPE(プロバイダ エッジ)デバイスとそのループバック アドレスに関する情報の発見を防ぐことができます。
ルーティング エンジンを設定して、ping リクエスト パケットの IP ヘッダーにある record-route
オプションの設定を無効にすることができます。 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)の有効期限
パケットヘッダーのTTL(Time-to-live)値によって、パケットがネットワークを通過し続ける時間が決まります。TTL値は、パケットが通過するデバイス(またはホップ)ごとに減少します。デバイスは、TTL 値が 0 のパケットを受信すると、そのパケットを破棄します。TTL 有効期限メッセージは、ICMP を使用して送信されます。
ICMP TTL(Time-to-live)期限切れエラーメッセージの送信元アドレスとして IPv4 アドレスを使用するようにデバイスを設定できます。つまり、ICMP エラー パケットに応答して、ループバック アドレスを送信元アドレスとして設定できます。これは、ネットワーク内で IPv4 アドレスが重複しているため、トレースルート目的でデバイス アドレスを使用できない場合に便利です。
送信元アドレスは 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 実装では、多くの場合、 dont-fragment
ビットが 1 に設定されている状態でパス MTU 検出がデフォルトで有効になっているため、トランジット デバイスは大きすぎるパケットをフラグメント化せずにドロップします。デバイスは、パケットが大きすぎたために宛先に到達できなかったことを示す 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