BGP エラー メッセージ
BGPアップデートメッセージのエラー処理について
メッセージ属性のいずれかが不正な場合、BGP メッセージは不正な形式と見なされます。BGPセッションに参加しているルーターが不正な更新メッセージを受信すると、デフォルトでセッション全体がリセットされます。有効なルートを持つ更新メッセージも影響を受けるため、これは望ましくありません。この望ましくない動作を回避するには、BGP アップデート メッセージのエラー処理を変更する必要があります。
BGP アップデート メッセージのエラー処理を設定するには、[edit protocols bgp]
、[edit protocols bgp group group-name]
、または [edit protocols bgp group group-name neighbor address]
階層レベルで bgp-error-tolerance
ステートメントを設定します。
bgp-error-tolerance { malformed-route-limit number; malformed-update-log-interval seconds; no-malformed-route-limit; }
属性に「属性タイプ」フィールドの値と競合する属性フラグが含まれている場合、属性フラグは正しい値にリセットされ、更新メッセージが処理されます。属性フラグの拡張長ビットの値は、属性の長さが 1 オクテットか 2 オクテットかを定義するため、変更されません。したがって、属性フラグの値は、BGPアップデートパケットの解析方法に影響します。
パス属性の属性フラグ値に明示的な指定はありません。
不正な更新メッセージは、メッセージに含まれる属性の値に応じて、ケースバイケースで処理されます。不正な形式の BGP アップデート メッセージの処理方法は 3 種類あり、重大度の降順に記載されています。
Notification message approach- 不正な形式のメッセージ エラーがローカルに記録され、エラー コード更新メッセージがピアの管理者に送信され、BGP セッション全体がリセットされます。
このアプローチは、次の場合が選択されます。
BGP アップデート メッセージには、MP 到達属性または MP 到達解除属性が含まれています。
属性長フィールドと属性長フィールドの値が一致しないため、NLRI フィールドまたは BGP アップデート メッセージを正しく解析できません。
Treat-as-withdraw approach- 不正な更新メッセージ内のすべてのルートは、
keep none
ステートメントが設定されていない限り、非表示ルートとして扱われ、その場合、ルートは破棄されます。keep none
ステートメントがない場合、非表示の異常ルートの数には制限が設定され、制限を超えるとルートが破棄され、それ以上の不正なルートが非表示になるのを防ぎます。Junos OSは、不正ルートの制限に達した場合、新たに受信した不正なルートを削除します。Attribute discard approach- 更新メッセージ内の不正な属性は破棄されます。ただし、メッセージは処理されます。破棄する属性がルートの選択やインストールに影響する可能性がある場合は、この方法を使用することはお勧めしません。
注:属性が更新メッセージに複数回出現する場合、属性の最初の出現箇所を除くすべての出現箇所が破棄され、メッセージが処理されます。
BGP アップデート メッセージは、以下の属性についてスキャンされ、これらの属性の値に基づいて不正な形式として扱われます。
The origin attribute—撤退として扱うアプローチによって処理されます。
The AS path attribute—撤退として扱うアプローチによって処理されます。
The AS 4 path attribute- 属性破棄アプローチによって処理されます。いずれかの属性に、属性タイプコードと競合する属性フラグがある場合、Junos OSは属性フラグを正しい値にリセットします。更新メッセージは引き続き処理されます。
Junos OS では、属性フラグの拡張長ビットの値は変更されません。このビットは、属性の長さが 1 オクテットか 2 オクテットかを定義します。このフラグの値は、BGP パケットの解析方法に影響します。path 属性にこの値を明示的に指定することはありません。
The aggregator attribute- 属性破棄アプローチによって処理されます。
The aggregator 4 attribute- 属性破棄アプローチによって処理されます。
The next-hop attribute—撤退として扱うアプローチによって処理されます。
The multiple exit discriminator attribute—撤退として扱うアプローチによって処理されます。
The local preference attribute—撤退として扱うアプローチによって処理されます。
The atomic aggregate attribute- 属性破棄アプローチによって処理されます。
The community attribute—撤退として扱うアプローチによって処理されます。
The extended community attribute—撤退として扱うアプローチによって処理されます。
The originator attribute—撤退として扱うアプローチによって処理されます。
The cluster attribute—撤退として扱うアプローチによって処理されます。
The PMSI attribute—撤退として扱うアプローチによって処理されます。
The MP reach attribute- 通知メッセージ アプローチによって処理されます。
The MP unreach attribute- 通知メッセージ アプローチによって処理されます。
The attribute set attribute—撤退として扱うアプローチによって処理されます。
The AIGP attribute—撤退として扱うアプローチによって処理されます。
Unknown attribute- BGP フラグが、これがオプションの属性であることを示さない場合、この不正な属性は通知メッセージ アプローチによって処理されます。
BGPアップデートメッセージに複数の不正な属性が含まれている場合、属性の1つによってトリガーされる最も重大なアプローチが続きます。
関連項目
例:BGP アップデート メッセージのエラー処理の設定
この例では、BGP のエラー処理を設定する方法を示します。
要件
開始する前に、以下を実行します。
ルーターインターフェイスを設定します。
内部ゲートウェイプロトコル(IGP)を設定します。
BGP を設定します。
ルーティングポリシーを設定します。
概要
ルーティング・デバイスが不正な属性を持つ更新メッセージを受信すると、ルーターはセッションをリセットする必要があります。これは、RFC 4271、 A Border Gateway Protocol 4 (BGP-4)で規定されています。セッションのリセットは、問題のある属性を持つルートだけでなく、セッション上で交換される他の有効なルートにも影響を与えます。さらに、この動作は、オプションの推移的な属性の場合に潜在的なセキュリティの脆弱性をもたらす可能性があります。不正な形式の更新メッセージによるルーティングへの影響を最小限に抑えるために、インターネットドラフトdraft-ietf-idr-error-handling-01.txt、 BGP UPDATE メッセージの改訂されたエラー処理では 、不正な形式の属性を持つ BGP 更新メッセージの処理に関する変更が指定されています。新しいエラー処理により、確立されたセッションを維持し、交換された有効なルートを維持しながら、不正な形式のUPDATEメッセージで運ばれるルートを削除できます。
トポロジー
図 1では、デバイスR1には、デバイスR0との内部BGPピアリングセッションと、デバイスR2との内部BGPピアリングセッションがあります。
ネットワークを不安定にする不正な更新メッセージから保護するために、デバイス R1 では、次に示すように BGP エラー処理が設定されています。
bgp-error-tolerance { malformed-update-log-interval 10; malformed-route-limit 5; }
デフォルトでは、メッセージ属性のいずれかが不正な場合、BGP メッセージは不正な形式であるとみなされます。BGP セッションに参加しているルーターが不正な更新メッセージを受信すると、セッション全体がリセットされます。bgp-error-tolerance
ステートメントはこの動作を上書きし、次の BGP エラー処理が有効になります。
致命的なエラーが発生した場合、Junos OSはエラーコード更新メッセージというタイトルの通知メッセージを送信し、BGPセッションをリセットします。MP_{UN}REACH 属性のエラーは致命的と見なされます。1 つの BGP アップデートに複数の MP_{UN}REACH 属性が存在することも、致命的なエラーと見なされます。Junos OSは、NLRIフィールドまたはBGPアップデートを正しく解析できない場合、BGPセッションをリセットします。BGP アップデート パケットの解析に失敗するのは、属性の長さが属性値の長さと一致しない場合に発生する可能性があります。
致命的でないエラーについては、BGP is 設定に
keep none
ステートメントが含まれていない限り、Junos OS は不正な形式の BGP アップデート メッセージに含まれるすべてのルートを撤回されたルートとして扱い、非表示としてインストールします。Junos OS は、以下の属性のいずれかが関係する場合に、このエラー処理アプローチを使用します。ORIGIN、AS_PATH、NEXT_HOP、MULTI_EXIT_DISC、LOCAL_PREF、ORIGINATOR、CLUSTER、ATTRSET、PMSI、コミュニティ、および拡張コミュニティ。さらに、必須の既知のパス属性のいずれかが欠落している場合、Junos OSはBGPアップデートを不正な形式として扱います。このような不正な形式の非表示ルートのメモリ使用量を制限するために、Junos OS は、そのような不正な形式の非表示ルートの最大数に達すると、新しい不正な形式の非表示ルートのインストールを停止します。この例では、malformed-route-limit
ステートメントを使用して、最大数を 5 に設定します。デフォルト値は 1000 です。オプションとして、不適切な属性を理由に非表示にするルートを無制限に許可することができます。これを行うには、no-malformed-route-limit
ステートメントを含めます。その他の致命的でないエラーについては、Junos OS は不正な形式のパス属性を破棄し、BGP アップデート メッセージの処理を続行します。ルートの選択やインストールに影響する可能性のあるパス属性に対して、この方法を使用することは安全ではありません。Junos OS は、以下の属性のいずれかが関係する場合に、このエラー処理アプローチを使用します。ATOMIC_AGGREGATE、アグリゲーター、AGGREGATOR4、およびAS4PATH。
不正なパケットのトラブルシューティングを容易にするために、Junos OS は不正な形式のパス属性コード、フラグ、長さ、ピアとファミリーに関する情報、不正な形式の BGP アップデートの最初のプレフィックスをリストしたエラーをログに記録します。短時間で大量の不正なパケットを受信した場合、不正な形式のパケットをロギングすると、Junos OS のパフォーマンスが低下する可能性があります。パフォーマンスへの影響を最小限に抑えるために、Junos OS には、不正な形式の更新をログに記録し、一定期間ログ記録を抑制し、サマリーをログに記録するアルゴリズムが実装されています。ロギング抑制タイマーが終了すると、ソフトウェアはインターバル中に受信した不正な属性の総数をロギングします。この例では、 malformed-update-log-interval
ステートメントを使用してタイマーを 10 秒に設定します。デフォルト値は300秒(5分)です。
CLIクイック構成は、図 1でのすべてのデバイスの設定を示しています。
セクション#d202e115__d202e306は、デバイス R1 の手順を説明します。
設定
CLIクイック構成
この例をすばやく設定するには、次のコマンドをコピーしてテキストファイルに貼り付け、改行を削除して、ネットワーク構成に合わせて必要な詳細を変更し、[edit]
階層レベルのCLIにコマンドをコピー&ペーストしてください。
デバイスR0
set interfaces fe-1/2/0 unit 0 description to-R1 set interfaces fe-1/2/0 unit 0 family inet address 172.16.10.5/30 set interfaces lo0 unit 0 family inet address 192.168.0.3/32 set protocols bgp group internal-peers type internal set protocols bgp group internal-peers local-address 192.168.0.3 set protocols bgp group internal-peers export local-direct set protocols bgp group internal-peers neighbor 192.168.0.1 set protocols ospf area 0.0.0.0 interface fe-1/2/0.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set policy-options policy-statement local-direct from protocol [local direct] set policy-options policy-statement local-direct then accept set routing-options autonomous-system 64510 set routing-options router-id 192.168.0.3
デバイスR1
set interfaces fe-1/2/1 unit 0 description to-R2 set interfaces fe-1/2/1 unit 0 family inet address 10.10.10.1/30 set interfaces fe-1/2/0 unit 0 description to-R0 set interfaces fe-1/2/0 unit 0 family inet address 172.16.10.6/30 set interfaces lo0 unit 0 family inet address 192.168.0.1/32 set protocols bgp bgp-error-tolerance malformed-update-log-interval 10 set protocols bgp bgp-error-tolerance malformed-route-limit 5 set protocols bgp group internal-peers type internal set protocols bgp group internal-peers local-address 192.168.0.1 set protocols bgp group internal-peers export local-direct set protocols bgp group internal-peers neighbor 192.168.0.3 set protocols bgp group external-peers type external set protocols bgp group external-peers export local-direct set protocols bgp group external-peers peer-as 64511 set protocols bgp group external-peers neighbor 10.10.10.2 set protocols ospf area 0.0.0.0 interface fe-1/2/1.0 set protocols ospf area 0.0.0.0 interface fe-1/2/0.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set policy-options policy-statement local-direct from protocol [local direct] set policy-options policy-statement local-direct then accept set routing-options autonomous-system 64510 set routing-options router-id 192.168.0.1
デバイスR2
set interfaces fe-1/2/1 unit 0 description to-R1 set interfaces fe-1/2/1 unit 0 family inet address 10.10.10.2/30 set interfaces lo0 unit 0 family inet address 192.168.0.2/32 set protocols bgp group external-peers type external set protocols bgp group external-peers export local-direct set protocols bgp group external-peers peer-as 64510 set protocols bgp group external-peers neighbor 10.10.10.1 set protocols ospf area 0.0.0.0 interface fe-1/2/1.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set policy-options policy-statement local-direct from protocol [local direct] set policy-options policy-statement local-direct then accept set routing-options autonomous-system 64511 set routing-options router-id 192.168.10.2
手順
ステップバイステップでの手順
次の例では、設定階層のいくつかのレベルに移動する必要があります。CLIのナビゲーションについては、Junos OS CLIユーザーガイドの 設定モードでCLIエディターを使用する を参照してください。
BGP エラー処理を設定するには:
ルーター・インターフェイスを設定します。
[edit interfaces] user@R1# set fe-1/2/1 unit 0 description to-R2 user@R1# set fe-1/2/1 unit 0 family inet address 10.10.10.1/30 user@R1# set fe-1/2/0 unit 0 description to-R0 user@R1# set fe-1/2/0 unit 0 family inet address 172.16.10.6/30 user@R1# set lo0 unit 0 family inet address 192.168.0.1/32
OSPF や IS-IS などの内部ゲートウェイ プロトコル(IGP)を設定します。
[edit protocols ospf area 0.0.0.0] user@R1# set interface fe-1/2/1.0 user@R1# set interface fe-1/2/0.0 user@R1# set interface lo0.0 passive
自律システム(AS)番号とルーターIDを設定します。
[edit routing-options] user@R1# set autonomous-system 64510 user@R1# set router-id 192.168.0.1
ルーティングポリシーを設定します。
[edit policy-options policy-statement local-direct] user@R1# set from protocol [local direct] user@R1# set then accept
EBGPセッションを設定します。
[edit protocols bgp group external-peers] user@R1# set type external user@R1# set export local-direct user@R1# set peer-as 64511 user@R1# set neighbor 10.10.10.2
IBGPセッションを設定します。
[edit protocols bgp group internal-peers] user@R1# set type internal user@R1# set local-address 192.168.0.1 user@R1# set export local-direct user@R1# set neighbor 192.168.0.3
BGPエラートレランスを有効にします。
[edit protocols bgp] user@R1# set bgp-error-tolerance
(オプション)ログ間隔を設定します。
[edit protocols bgp bgp-error-tolerance] user@R1# set malformed-update-log-interval 10
(オプション)保存する非表示ルートの数に制限を設定します。
[edit protocols bgp bgp-error-tolerance] user@R1# set malformed-route-limit 5
結果
設定モードから、 show interfaces
、 show protocols
、 show policy-options
、および show routing-options
、コマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の手順を繰り返して設定を修正します。
user@R1# show interfaces
fe-1/2/0 {
unit 0 {
description to-R0;
family inet {
address 172.16.10.6/30;
}
}
}
fe-1/2/1 {
unit 0 {
description to-R2;
family inet {
address 10.10.10.1/30;
}
}
}
lo0 {
unit 0 {
family inet {
address 192.168.0.1/32;
}
}
}
user@R1# show protocols
bgp {
bgp-error-tolerance {
malformed-update-log-interval 10;
malformed-route-limit 5;
}
group internal-peers {
type internal;
local-address 192.168.0.1;
export local-direct;
neighbor 192.168.0.3;
}
group external-peers {
type external;
export local-direct;
peer-as 64511;
neighbor 10.10.10.2;
}
}
ospf {
area 0.0.0.0 {
interface fe-1/2/1.0;
interface fe-1/2/0.0;
interface lo0.0 {
passive;
}
}
}
user@R1# show policy-options
policy-statement local-direct {
from protocol [local direct];
then accept;
}
user@R1# show routing-options
router-id 192.168.0.1;
autonomous-system 64510;
デバイスの設定が完了したら、設定モードからcommit
を入力します。
検証
設定が正常に機能していることを確認します。
BGP ネイバー セッションの確認
目的
BGPエラートレランスが有効になっていることを確認し、不正な形式のパス属性に関連するカウンターを表示します。
アクション
user@R1# show bgp neighbor Peer: 10.10.10.2+50058 AS 64511 Local: 10.10.10.1+179 AS 64510 Type: External State: Established Flags: <Sync> Last State: OpenConfirm Last Event: RecvKeepAlive Last Error: None Export: [ local-direct ] Options: <Preference PeerAS Refresh> Holdtime: 90 Preference: 170 Number of flaps: 0 Malformed attributes log interval: 10 route limit: 5 Attribute: ORIGIN(1) Last Received: 0 Total Received: 3 Attribute: LOCAL_PREF(5) Last Received: 0 Total Received: 2 Peer ID: 192.168.10.2 Local ID: 192.168.10.1 Active Holdtime: 90 Keepalive Interval: 30 Group index: 0 Peer index: 0 BFD: disabled, down Local Interface: fe-1/2/1.0 NLRI for restart configured on peer: inet-unicast NLRI advertised by peer: inet-unicast NLRI for this session: inet-unicast Peer supports Refresh capability (2) Stale routes from peer are kept for: 300 Peer does not support Restarter functionality NLRI that restart is negotiated for: inet-unicast NLRI of received end-of-rib markers: inet-unicast NLRI of all end-of-rib markers sent: inet-unicast Peer supports 4 byte AS extension (peer-as 64511) Peer does not support Addpath Table inet.0 Bit: 10000 RIB State: BGP restart is complete Send state: in sync Active prefixes: 0 Received prefixes: 3 Accepted prefixes: 0 Suppressed due to damping: 0 Advertised prefixes: 2 Last traffic (seconds): Received 25 Sent 17 Checked 73 Input messages: Total 2702 Updates 10 Refreshes 0 Octets 51652 Output messages: Total 2701 Updates 6 Refreshes 0 Octets 51571 Output Queue[0]: 0 Peer: 192.168.10.3+179 AS 64510 Local: 192.168.10.1+51127 AS 64510 Type: Internal State: Established Flags: <Sync> Last State: OpenConfirm Last Event: RecvKeepAlive Last Error: None Export: [ local-direct ] Options: <Preference LocalAddress Refresh> Local Address: 192.168.10.1 Holdtime: 90 Preference: 170 Number of flaps: 0 Malformed attributes log interval: 10 route limit: 5 Peer ID: 192.168.10.3 Local ID: 192.168.10.1 Active Holdtime: 90 Keepalive Interval: 30 Group index: 1 Peer index: 0 BFD: disabled, down NLRI for restart configured on peer: inet-unicast NLRI advertised by peer: inet-unicast NLRI for this session: inet-unicast Peer supports Refresh capability (2) Stale routes from peer are kept for: 300 Peer does not support Restarter functionality NLRI that restart is negotiated for: inet-unicast NLRI of received end-of-rib markers: inet-unicast NLRI of all end-of-rib markers sent: inet-unicast Peer supports 4 byte AS extension (peer-as 64510) Peer does not support Addpath Table inet.0 Bit: 10001 RIB State: BGP restart is complete Send state: in sync Active prefixes: 0 Received prefixes: 3 Accepted prefixes: 0 Suppressed due to damping: 0 Advertised prefixes: 2 Last traffic (seconds): Received 5 Sent 24 Checked 51 Input messages: Total 417 Updates 3 Refreshes 0 Octets 8006 Output messages: Total 421 Updates 2 Refreshes 0 Octets 8136 Output Queue[0]: 0
意味
[不正な属性] フィールドは、エラー トレランスが有効になっていることを示します。ログ間隔フィールドとルート制限フィールドには、設定された値が表示されます。
属性カウンターは、EBGP 接続で、デバイス R2 から複数の不正な属性が受信されたことを示しています。
非表示ルートの確認
目的
非表示のルートに関する情報を表示し、非表示になっている理由を確認します。
アクション
user@R1> show route hidden detail inet.0: 42 destinations, 45 routes (36 active, 0 holddown, 6 hidden) 10.0.0.0/32 (1 entry, 0 announced) BGP Next hop type: Router Address: 0x93d8b0c Next-hop reference count: 5 Source: 10.10.10.2 Next hop type: Router, Next hop index: 782 Next hop: via fe-1/2/1.0, selected Session Id: 0x1 State: <Hidden Ext> Local AS: 1 Peer AS: 1 Age: 5:32 Metric2: 1 Validation State: unverified Task: BGP_1.10.10.5.62+56218 AS path: I (MalformedAttr) Router ID: 192.168.0.2 10.0.0.1/32 (1 entry, 0 announced) BGP Next hop type: Router Address: 0x93d8b0c Next-hop reference count: 5 Source: 10.10.10.2 Next hop type: Router, Next hop index: 782 Next hop: via fe-1/2/1.0, selected Session Id: 0x1 Indirect next hop: 953c000 - INH Session ID: 0x3 State: <Hidden Int Ext> Local AS: 1 Peer AS: 1 Age: 5:32 Metric2: 1 Validation State: unverified Task: BGP_1.10.10.5.62+56218 AS path: I (MalformedAttr) Router ID: 192.168.0.2
意味
不正な形式の非表示ルートは、ASパスのフィールドでMalformedAttrとしてマークされます。
非表示のルートを削除するには、 clear bgp neighbor 10.10.10.2 malformed-route
コマンドを実行します。
非表示ルートのソースの検証
目的
非表示のルートに関する情報を表示し、非表示になっている理由を確認します。
アクション
user@R1> show route receive-protocol bgp 10.10.10.2 detail hidden inet.0: 42 destinations, 45 routes (36 active, 0 holddown, 6 hidden) 10.0.0.0/32 (1 entry, 0 announced) Nexthop: 10.10.10.2 Localpref: 100 AS path: I (MalformedAttr) 10.0.0.1/32 (1 entry, 0 announced) Nexthop: 10.10.10.2 Localpref: 100 AS path: I (MalformedAttr)
意味
Junos OSは、 show route receive-protocol bgp 10.10.10.2 detail hidden
コマンドの出力のASパスフィールドにMalformedAttrを表示します。
非表示のルートを削除するには、 clear bgp neighbor 10.10.10.2 malformed-route
コマンドを実行します。