BGP(Border Gateway Protocol)コミュニティは、プレフィックスに付与できるメタデータです。これは、同じポリシーやフィルタリングを複数のプレフィックスに対して効率的に適用するための便利な機能です。BGPコミュニティを利用することで、ルーティングポリシーを柔軟に制御し、特定のプレフィックスに対して異なるルーティング動作を指定できます。
コミュニティの表記形式
コミュニティは「2バイト:2バイト」または「4バイト」の表記形式で表され、通常、前半の2バイトはAS番号(Autonomous System Number)、後半は任意に定義されます。これにより、異なるASや組織間で統一されたポリシーを適用することが可能です。
- 例: 1:100 の場合、AS 1 のネットワークに対して特定のポリシーを適用する場合などに使用されます。
さらに、特別なコミュニティとして、Well-known community があります。これらは標準的に定義された動作を持つため、よく使われるものを覚えておくと便利です。
- no-export: このコミュニティが付与されたプレフィックスは、AS外には広告されません。
- no-advertise: プレフィックスが他のネイバーにも広告されません。
実際のユースケース
BGPコミュニティは、大規模ネットワークやインターネットサービスプロバイダー(ISP)で広く使われており、以下のような状況で役立ちます。
- ASプリペンド: 特定の経路を他の経路よりも優先度を低くしたい場合に、ASパスに複数の同じAS番号を追加して、経路選択を影響させます。
- ルートフィルタリング: 特定のコミュニティが付与されたプレフィックスをフィルタリングすることで、不要な経路がルーティングテーブルに追加されるのを防ぎます。
構成例の解説
本記事で紹介するシナリオでは、R1が異なるプレフィックスにコミュニティ値を付与し、R2がそれに基づいてASプリペンドを行います。このように、BGPコミュニティを使うことで、異なるルーティングポリシーを簡潔かつ効率的に適用することができます。
今回の例では、R1からR2を経由して、R3にプレフィックスが広告されます。この際、R2は受け取ったプレフィックスのコミュニティ値に応じて、異なるASプリペンド処理を行います。
プレフィックス | コミュニティ値 (R1で付与) | R2で実施する処理 |
1.1.1.1/32 | 1:1 | AS 1をプリペンド |
11.11.11.11/32 | 1:11 | AS 1 と AS 11をプリペンド |
111.111.111.111/32 | 1:111 | AS 1 と AS 11とAS 111をプリペンド |
BGPの基本設定
まず、各ルータで基本的なBGP設定を行います。AS番号、ネイバー、および広告するプレフィックスを設定します。
R1の設定
R1(config)# interface Loopback0 R1(config-if)# ip address 1.1.1.1 255.255.255.255 R1(config)# interface Loopback11 R1(config-if)# ip address 11.11.11.11 255.255.255.255 R1(config)# interface Loopback111 R1(config-if)# ip address 111.111.111.111 255.255.255.255 R1(config)#router bgp 1 R1(config-router)# network 1.1.1.1 mask 255.255.255.255 R1(config-router)# network 11.11.11.11 mask 255.255.255.255 R1(config-router)# network 111.111.111.111 mask 255.255.255.255 R1(config-router)# neighbor 192.168.12.2 remote-as 2
R2の設定
R2(config)#router bgp 2 R2(config-router)# neighbor 192.168.12.1 remote-as 1 R2(config-router)# neighbor 192.168.23.3 remote-as 3
R3の設定
R3(config)#router bgp 3 R3(config-router)# neighbor 192.168.23.2 remote-as 2
設定が完了すると、ネイバーがアップします。
コミュニティ設定
R1の設定
まず、R1の各プレフィックスにコミュニティを付与します。これにより、R2でのASプリペンド処理をコミュニティに応じて柔軟に制御できます。
ステップ 0: 事前設定
まず、コミュニティを2バイト:2バイト形式で表示するように、「ip bgp-community new-format」を適用します。
R1(config)# ip bgp-community new-format
ステップ 1: プレフィックスリストの設定
各プレフィックスを「ip prefix-list」で定義します。ここでは、R1のループバックインターフェイスに設定されているアドレスに対して、コミュニティを付与する準備を行います。
R1(config)# ip prefix-list LOOPBACK_1 seq 5 permit 1.1.1.1/32 R1(config)# ip prefix-list LOOPBACK_11 seq 5 permit 11.11.11.11/32 R1(config)# ip prefix-list LOOPBACK_111 seq 5 permit 111.111.111.111/32
この設定により、ルートマップを使用して、特定のプレフィックスに対して異なるコミュニティを付与できるようになります。
ステップ 2: コミュニティの付与
プレフィックスリストが定義されたら、それぞれに適切なコミュニティを付与します。これは、BGPルートマップで「set community」コマンドを使って実現します。各プレフィックスにコミュニティをセットするためのルートマップを作成します。
R1(config)# route-map SET-COMMUNITY permit 1 R1(config-route-map)# match ip address prefix-list LOOPBACK_1 R1(config-route-map)# set community 1:1 R1(config-route-map)#! R1(config-route-map)# route-map SET-COMMUNITY permit 11 R1(config-route-map)# match ip address prefix-list LOOPBACK_11 R1(config-route-map)# set community 1:11 R1(config-route-map)#! R1(config-route-map)# route-map SET-COMMUNITY permit 111 R1(config-route-map)# match ip address prefix-list LOOPBACK_111 R1(config-route-map)# set community 1:111 R1(config-route-map)#! R1(config-route-map)# route-map SET-COMMUNITY permit 1000
このルートマップでは、特定のプレフィックスリストに一致する経路に対して、それぞれ異なるコミュニティ値を付与しています。これにより、後続のルータ(R2)がコミュニティに基づいて異なる処理を実行できるようになります。
ルートマップにはデフォルトで暗黙のdenyがあるため、最後に何も処理しないシーケンス番号1000のルートマップを設定することが推奨されます。これにより、ルートマップに一致しない他のすべてのプレフィックスが正常にネイバーに広告されます。
ステップ 3: コミュニティの広告
R2にコミュニティを広告するには、ネイバーに対して「send-community」コマンドを使用して、コミュニティを含めたBGP経路を送信します。
コミュニティ値を広告するには、ネイバー設定でsend-communityコマンドの追加も必要です。
R1(config)#router bgp 1 R1(config-router)# neighbor 192.168.12.2 send-community R1(config-router)# neighbor 192.168.12.2 route-map SET-COMMUNITY out
R2の設定
R2は、R1から受信したプレフィックスのコミュニティ値に基づいてASプリペンド処理を行います。これにより、コミュニティに応じた異なる経路選択の優先度を指定することが可能です。コミュニティを2バイト:2バイト形式で表示するように、「ip bgp-community new-format」も適用しておきます。
R2(config)#ip bgp-community new-format
ステップ 1: コミュニティリストの設定
まず、受信するコミュニティ値をリスト化します。
コミュニティ値を定義するため、ip community-listコマンドを使用します。
R2(config)#ip community-list 1 permit 1:1 R2(config)#ip community-list 11 permit 1:11 R2(config)#ip community-list 111 permit 1:111
ステップ 2: ルートマップによる処理設定
次に、受信したプレフィックスのコミュニティ値に基づいてASプリペンド処理を設定します。これにより、特定の経路に対して異なるASパスを追加し、経路の選択順序を制御します。
R2(config)#route-map AS-PREPEND-COMMUNITY permit 1 R2(config-route-map)# match community 1 R2(config-route-map)# set as-path prepend 1 R2(config-route-map)#! R2(config-route-map)#route-map AS-PREPEND-COMMUNITY permit 11 R2(config-route-map)# match community 11 R2(config-route-map)# set as-path prepend 1 11 R2(config-route-map)#! R2(config-route-map)#route-map AS-PREPEND-COMMUNITY permit 111 R2(config-route-map)# match community 111 R2(config-route-map)# set as-path prepend 1 11 111 R2(config-route-map)#! R2(config-route-map)#route-map AS-PREPEND-COMMUNITY permit 1000 R2(config-route-map)#!
ステップ 3: R3へのポリシー適用
R2の設定が完了したら、R3へ広告するプレフィックスに対して、コミュニティに基づくポリシーを適用します。具体的には、R2がR1から受信した各プレフィックスに対し、適切なASプリペンドを行い、それをR3へ広告します。
R2のBGPプロセスで、ネイバーR3に対してルートマップAS-PREPEND-COMMUNITYを適用します。
R2(config)#router bgp 2 R2(config-router)#neighbor 192.168.23.3 route-map AS-PREPEND-COMMUNITY out
ここで指定されるroute-map AS-PREPEND-COMMUNITYは、R1から受信したプレフィックスのコミュニティ値に基づき、ASパスにプリペンド処理を行います。これにより、R2からR3に送信されるルート情報が、ネットワーク全体での経路選択に影響を与えるようになります。ASプリペンドを使用することで、特定の経路を通過させる際の優先度を下げ、他のルートを優先させることが可能です。
ステップ 4: BGPプロセスのリフレッシュ
次に、R2のBGPプロセスを再起動し、新しいポリシーが正しく適用されるようにします。
R2#clear ip bgp * R2# %BGP-5-ADJCHANGE: neighbor 192.168.12.1 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.1 IPv4 Unicast topology base removed from session User reset %BGP-5-ADJCHANGE: neighbor 192.168.23.3 Down User reset %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.23.3 IPv4 Unicast topology base removed from session User reset
BGPセッションのリフレッシュは、設定変更後に新しいポリシーを有効にするために重要です。clear ip bgp *コマンドは、すべてのBGPネイバーとのセッションを一旦リセットし、再確立します。これにより、新しいルートマップやポリシーが有効になります。
リフレッシュが完了すると、R2のログにBGPネイバーの再確立が表示されます。以下のメッセージは、R2がR1およびR3と再接続されたことを示しています。
%BGP-5-ADJCHANGE: neighbor 192.168.12.1 Up %BGP-5-ADJCHANGE: neighbor 192.168.23.3 Up R2#
設定の検証と確認
R2でのBGPテーブル確認
R2でコミュニティが正しく付与され、R3に広告されたかどうかを確認するために、各ルータのBGPテーブルを確認します。まず、R2で受信したプレフィックスにコミュニティ値が正しく適用されているかを確認します。
R2#show ip bgp 1.1.1.1 BGP routing table entry for 1.1.1.1/32, version 2 Paths: (1 available, best #1, table default) Advertised to update-groups: 11 Refresh Epoch 1 1 192.168.12.1 from 192.168.12.1 (111.111.111.111) Origin IGP, metric 0, localpref 100, valid, external, best Community: 1:1 R2#show ip bgp 11.11.11.11 BGP routing table entry for 11.11.11.11/32, version 3 Paths: (1 available, best #1, table default) Advertised to update-groups: 11 Refresh Epoch 1 1 192.168.12.1 from 192.168.12.1 (111.111.111.111) Origin IGP, metric 0, localpref 100, valid, external, best Community: 1:11 R2#show ip bgp 111.111.111.111 BGP routing table entry for 111.111.111.111/32, version 4 Paths: (1 available, best #1, table default) Advertised to update-groups: 11 Refresh Epoch 1 1 192.168.12.1 from 192.168.12.1 (111.111.111.111) Origin IGP, metric 0, localpref 100, valid, external, best Community: 1:111
これらの出力により、コミュニティ1:1、1:11、1:111がそれぞれのプレフィックスに適用されていることを確認できます。また、R3に対してこれらのプレフィックスが広告される際にASプリペンドが正しく行われているかもチェックします。
R3での経路の確認
次に、R3に対して正しくASプリペンドされた経路が広告されているかを確認します。
R3#show ip bgp 1.1.1.1 BGP routing table entry for 1.1.1.1/32, version 30 Paths: (1 available, best #1, table default) Not advertised to any peer Refresh Epoch 1 2 1 1 192.168.23.2 from 192.168.23.2 (2.2.2.2) Origin IGP, localpref 100, valid, external, best R3#show ip bgp 11.11.11.11 BGP routing table entry for 11.11.11.11/32, version 31 Paths: (1 available, best #1, table default) Not advertised to any peer Refresh Epoch 1 2 1 11 1 192.168.23.2 from 192.168.23.2 (2.2.2.2) Origin IGP, localpref 100, valid, external, best R3#show ip bgp 111.111.111.111 BGP routing table entry for 111.111.111.111/32, version 32 Paths: (1 available, best #1, table default) Not advertised to any peer Refresh Epoch 1 2 1 11 111 1 192.168.23.2 from 192.168.23.2 (2.2.2.2) Origin IGP, localpref 100, valid, external, best
- 1.1.1.1/32 の経路では、ASパスに2 1 1が見られ、R2で1回のASプリペンドが適用されています。
- 11.11.11.11/32 の経路では、ASパスに2 1 11 1が表示され、R2で2回のASプリペンドが適用されています。
- 111.111.111.111/32 の経路では、ASパスに2 1 11 111 1が見られ、3回のASプリペンドが適用されています。
これにより、期待通りにASプリペンドが機能していることを確認できます。
コミュニティを持たない経路の確認
次に、コミュニティが付与されていない経路(例: 222.222.222.222/32)がどのように広告されているかを確認します。このプレフィックスに対してはASプリペンドは行われず、R1からR3へそのまま広告されます。
R1(config)#interface loopback 222 R1(config-if)#ip address 222.222.222.222 255.255.255.255 R1(config)#router bgp 1 R1(config-router)#network 222.222.222.222 mask 255.255.255.255
R2のBGPテーブルで確認すると、このプレフィックスにはコミュニティ値が付与されていないため、ルートマップのシーケンス1000番が適用され、ASプリペンドが行われていないことが確認できます。
R2#show ip bgp 222.222.222.222 BGP routing table entry for 222.222.222.222/32, version 5 Paths: (1 available, best #1, table default) Advertised to update-groups: 11 Refresh Epoch 1 1 192.168.12.1 from 192.168.12.1 (111.111.111.111) Origin IGP, metric 0, localpref 100, valid, external, best
R3#show ip bgp 222.222.222.222
BGP routing table entry for 222.222.222.222/32, version 33
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
2 1
192.168.23.2 from 192.168.23.2 (2.2.2.2)
Origin IGP, localpref 100, valid, external, best
まとめ
BGPにおけるコミュニティの活用とASプリペンドは、ネットワークの経路選択を高度に制御することができます。今回の設定では、R1で各プレフィックスにコミュニティを付与し、R2でそのコミュニティに基づいてASプリペンドを実施することで、R3に対する経路制御を行いました。さらに、コミュニティが付与されていないプレフィックスにはプリペンドが適用されないことも確認しました。
その他 BGP関連記事は >> ルーティングプロトコル(BGP)まとめ << より参照できます。
コメント