BGPのNo-Exportコミュニティとは?Ciscoでの設定手順と動作確認

BGP の no-export コミュニティは、経路を自分の AS の外へ広告させないために使います。たとえば、特定のプレフィックスを隣の AS の中だけで使ってもらい、その先の AS には広げたくない場合に役立ちます。

この記事では、Cisco ルータで no-export コミュニティを設定し、経路がどのルータまで届くかを確認します。

この記事でわかること
  1. no-export を付ける前に、経路がすべてのルータに届くことを確認する
  2. ルートマップで経路に no-export コミュニティを付け、send-community で送る
  3. no-export が付いた経路は、AS 25 の中(iBGP)にだけ広告され、AS 3 には広告されない

検証構成

R1(AS 1)が、自分のループバック 1.1.1.1/32 を eBGP で R2(AS 25)に広告します。R2 は、同じ AS 25 の R5 と iBGP、AS 3 の R3 と eBGP でつながっています。

R1 で 1.1.1.1/32 に no-export を付けたとき、経路が AS 25 の中(R2 と R5)にとどまり、AS 3 の R3 には広がらないことを確認します。

AS 1 AS 25 AS 3 R1 R2 R3 R5 Lo0 1.1.1.1/32 Lo0 3.3.3.3/32 Lo0 5.5.5.5/32 Lo0 2.2.2.2/32 .1 .2 .2 .3 .2 .5 192.168.12.0/24 192.168.23.0/24 192.168.25.0/24 iBGP eBGP eBGP
図1 検証構成

BGP の基本設定をする

まず、各ルータで AS 番号とネイバーを設定します。R1 は、network コマンドで 1.1.1.1/32 を BGP に載せます。

R1

R1(config)# router bgp 1
R1(config-router)# network 1.1.1.1 mask 255.255.255.255
R1(config-router)# neighbor 192.168.12.2 remote-as 25

R2

R2(config)# router bgp 25
R2(config-router)# neighbor 192.168.12.1 remote-as 1
R2(config-router)# neighbor 192.168.25.5 remote-as 25
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 25

R5

R5(config) #router bgp 25
R5(config-router)# neighbor 192.168.25.2 remote-as 25

no-export を付ける前の広告を確認する

この段階で、R1 の 1.1.1.1/32 が各ルータにどう広告されているかを確認します。

R2 は、R1 から 1.1.1.1/32 を受け取っています。

R2

R2# show ip bgp 
BGP table version is 4, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       192.168.12.1             0             0 1 I

R3 も、R2 を経由して 1.1.1.1/32 を受け取っています。AS_PATH は「25 1」です。

R3

R3# show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       192.168.23.2                           0 25 1 i

R5 も、R2 から iBGP で 1.1.1.1/32 を受け取っています。

R5

R5# show ip bgp
BGP table version is 2, local router ID is 5.5.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 * i 1.1.1.1/32       192.168.12.1             0    100      0 1 i
補足

R5 の経路には >(ベストパス)が付いていません。iBGP では、ネクストホップが書き換わらずに 192.168.12.1(R1)のまま届きます。R5 がこのネクストホップへの経路を持っていないと、ベストパスに選ばれません。ベストパスにするには、R2 で neighbor 192.168.25.5 next-hop-self を設定するか、IGP などで 192.168.12.0/24 への経路を R5 に教えます。

no-export コミュニティを付ける

次に、R1 で 1.1.1.1/32 に no-export コミュニティを付けます。

まず、対象のプレフィックスをプレフィックスリストで指定します。

R1

R1(config)# ip prefix-list LOOPBACK0 permit 1.1.1.1/32

ルートマップで、プレフィックスリストに一致した経路に no-export を付けます。

R1

R1(config)# route-map NO-EXPORT permit 10 
R1(config-route-map)# match ip address prefix-list LOOPBACK0
R1(config-route-map)# set community no-export
R1(config-route-map)# route-map NO-EXPORT permit 1000
ポイント

ルートマップの最後には、どのエントリにも一致しない経路を拒否する「暗黙の deny」があります。シーケンス 1000 の permit を足しておくと、1.1.1.1/32 以外の経路も、そのまま広告されます。

最後に、このルートマップをネイバー R2 への送信(out)に適用します。コミュニティを相手に送るには、send-community も必要です。

R1

R1(config)# router bgp 1 
R1(config-router)# neighbor 192.168.12.2 route-map NO-EXPORT out
R1(config-router)# neighbor 192.168.12.2 send-community

BGP のセッションをリセットして、設定を反映させます。

R1

R1# clear ip bgp *
R1#
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down User reset
%BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base removed
 from session  User reset
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
注意

clear ip bgp * は、すべての BGP セッションを切ってつなぎ直します。運用中のルータでは、セッションを切らない clear ip bgp * soft out などを使います。

>> 参考:clear ip bgp の記事

no-export を付けた後の広告を確認する

もう一度、各ルータの BGP テーブルを確認します。

R2 は、これまでどおり 1.1.1.1/32 を受け取っています。

R2

R2#show ip bgp 
BGP table version is 4, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       192.168.12.1             0             0 1 i

R3 の BGP テーブルは空になり、1.1.1.1/32 を受け取っていません。

R3

R3#show ip bgp
R3#

R5 は、これまでどおり 1.1.1.1/32 を受け取っています。

R5

R5#show ip bgp
BGP table version is 2, local router ID is 5.5.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 * i 1.1.1.1/32       192.168.12.1             0    100      0 1 i
AS 1 AS 25 AS 3 R1 R2 R3 R5 1.1.1.1/32no-export 広告しない 1.1.1.1/32no-export
図2 no-export を付けた経路の広告範囲
ポイント

R2 は、no-export が付いた 1.1.1.1/32 を、同じ AS 25 の R5 には iBGP で広告します。一方で、AS の外にいる R3 には広告しません。

まとめ

ルータno-export なしno-export あり
R2(AS 25、eBGP で受信)受け取る受け取る
R5(AS 25、iBGP で受信)受け取る受け取る
R3(AS 3、R2 から eBGP)受け取る受け取らない

no-export コミュニティを使うと、経路を受け取った AS の中だけで使わせ、その外へは広げないようにできます。広告の範囲を相手の AS に任せて制御できるので、トラフィック制御やポリシーの適用でよく使われます。

コメント