BGPコミュニティ
・BGPで配信する経路情報にcommunity属性を付けて通知する
・community属性の一つであるno-export属性を使って,他ASに経路情報を通知しないようにする
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterA
!
interface Loopback0
ip address 1.1.1.1 255.255.255.0
ip ospf network point-to-point ←OSPFでloopbackインタフェースのマスク長を指定のマスク(/24)で通知
!
interface Serial0
ip address 192.168.1.1 255.255.255.0
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
network 1.1.1.0 mask 255.255.255.0
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 send-community ←community属性の付いた経路情報を送信する
neighbor 2.2.2.2 route-map SETCOM out ←2.2.2.2(RouterB)に送信する経路情報にルートマップ「SETCOM」を適用

no auto-summary
!
access-list 1 permit 1.1.1.0 0.0.0.255 ←1.1.1.0/24をアクセス・リスト1番として定義
!
route-map SETCOM permit 10 ←ルートマップ「SETCOM」を定義(10行目)
match ip address 1 ←IPアドレスがアクセスリスト1番にマッチしたら
set community no-export ←経路情報にcommunity属性(no-export)をセットする

!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterB
!
interface Loopback0
ip address 2.2.2.2 255.255.255.0
!
interface Ethernet0
ip address 192.168.2.1 255.255.255.0
!
interface Serial0
ip address 192.168.4.1 255.255.255.0
clockrate 64000
!
interface Serial1
ip address 192.168.1.2 255.255.255.0
clockrate 64000
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 1.1.1.1 remote-as 200
neighbor 1.1.1.1 update-source Loopback0
neighbor 1.1.1.1 route-reflector-client ←1.1.1.1(RouterA)をルートリフレクタ・クライアントにする
neighbor 3.3.3.3 remote-as 200
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 route-reflector-client ←3.3.3.3(RouterC)をルートリフレクタ・クライアントにする
neighbor 4.4.4.4 remote-as 200
neighbor 4.4.4.4 update-source Loopback0
neighbor 4.4.4.4 route-reflector-client ←4.4.4.4(RouterD)をルートリフレクタ・クライアントにする
neighbor 192.168.4.2 remote-as 100
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterCのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterC
!
interface Loopback0
ip address 3.3.3.3 255.255.255.0
!
interface Ethernet0
ip address 192.168.2.2 255.255.255.0
!
interface Serial0
ip address 192.168.5.1 255.255.255.0
clockrate 64000
no fair-queue
!
interface Serial1
ip address 192.168.3.2 255.255.255.0
clockrate 64000
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
neighbor 192.168.5.2 remote-as 100
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterDのコンフィグ
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterD
!
interface Loopback0
ip address 4.4.4.4 255.255.255.0
ip ospf network point-to-point
!
interface Serial0
ip address 192.168.3.1 255.255.255.0
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
router bgp 200
no synchronization
bgp log-neighbor-changes
network 4.4.4.0 mask 255.255.255.0
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterEのコンフィグ
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname RouterE
!
interface Serial0
ip address 192.168.4.2 255.255.255.0
!
interface Serial1
ip address 192.168.5.2 255.255.255.0
!
router bgp 100
no synchronization
bgp log-neighbor-changes
neighbor 192.168.4.1 remote-as 200
neighbor 192.168.5.1 remote-as 200
no auto-summary
!
line con 0
line aux 0
line vty 0 4
login
!
end
確認
BGPには,特定の経路情報を識別するための「BGPコミュニティ」という属性があります。
例えば,「これは他ASに通知しない経路情報」とか「これはLOCAL_PREFを50にセットする経路情報」といったポリシーを示す情報として使います。
こうして経路情報に「色付け」をして,経路情報を操作するわけです。

●BGPコミュニティとは?
BGPコミュニティとは,経路情報にCOMMUNITY属性の値をセットすることで,経路情報をポリシーどおりに操作するテクニックです。
COMMUNITY属性は,16進数で00000000〜FFFFFFFFの値で表し,ここに好きな値をセットします。
(ただし,00000000〜0000FFFFとFFFF0000〜FFFFFFFFは予約されているので使えません。)
通常は,上位2オクテットにポリシーが適用されるAS番号を入れ,残りの2オクテットにポリシーを表す数値を入れ,これら二つの値を「:」(コロン)で区切って表します。
例えば,「AS200において経路情報を通知しないというCOMMUNITY属性を666と定義」したなら,COMMUNITY属性にセットする値は「00C8:8029」になります。

COMMUNITY属性の値はユーザーが自由に定義できますが,定義済みのCOMMUNITY値もあります。
それが以下の三つです。

・no-export(FFFFFF01)
 →他ASに経路情報を転送しない
・no-advertise(FFFFFF02)
 →他ルーターに経路情報を転送しない
・no-export-subconfed(FFFFFF03)
 →BGPコンフェデレーションにおいて,他メンバーASに経路情報を転送しない

このラボの例では,このうちのno-exportを使います。

●COMMUNITY属性設定前の動作の確認
COMMUNITY属性を設定するのはRouterAで,それによってRouterEのBGPテーブルがどう変わるか見ていきましょう。
最初に,RouterEのBGPテーブルを見てみます。
1.1.1.0/24の経路情報に注目すると,RouterB(192.168.4.1)とRouterC(192.168.5.1)の二つから経路情報を受信しています(赤字の部分)。

RouterE#show ip bgp
BGP table version is 3, local router ID is 192.168.5.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
       r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
* 1.1.1.0/24    192.168.5.1                0   200 i
*>           192.168.4.1                0   200 i

* 4.4.4.0/24    192.168.5.1                0   200 i
*>           192.168.4.1                0   200 i


では,RouterAにCOMMUNITY属性をセットしましょう。
no-exportを使って,1.1.1.0/24を他のASに通知しないようにします。
アクセスリストで1.1.1.0/24を定義し,ルートマップ「SETCOM」でno-exportをセットします。
そして,neighbor 2.2.2.2 send-communityコマンドで,COMMUNITY属性付きの経路情報をRouterBに送るようにします。
さらに,neighbor 2.2.2.2 route-map SETCOM outコマンドで,ルートマップ「SETCOM」をRouterBに経路情報を送る(out)際に適用します。

RouterA(config)#access-list 1 permit 1.1.1.0 0.0.0.255
RouterA(config)#route-map SETCOM permit 10
RouterA(config-route-map)#match ip address 1
RouterA(config-route-map)#set community no-export
RouterA(config-route-map)#exit
RouterA(config)#router bgp 200
RouterA(config-router)#neighbor 2.2.2.2 send-community
RouterA(config-router)#neighbor 2.2.2.2 route-map SETCOM out


以上のコマンドを入力したら,RouterBのBGPピアをすべてリセットして再確立します。

RouterB#clear ip bgp *
RouterB#
00:33:14: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Down User reset
00:33:14: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down User reset
00:33:14: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Down User reset
00:33:14: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Down User reset
00:33:41: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Up
00:33:41: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Up
00:33:44: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
00:33:54: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Up


●設定後の動作の確認
RouterEのBGPテーブルを見てみましょう。
1.1.1.0/24の経路情報を,RouterC(192.168.5.1)から受信しています。
no-exportの設定前は,RouterB(192.168.4.1)からも受信していましたが,そのエントリはなくなっています。
つまりRouterBは,COMMUNITY属性のno-exportの値に従って,経路情報をRouterE(他のAS)に送るのを止めたわけです。

RouterE#show ip bgp
BGP table version is 9, local router ID is 192.168.5.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
       r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
*> 1.1.1.0/24    192.168.5.1                0   200 i
* 4.4.4.0/24    192.168.5.1                0   200 i
*>           192.168.4.1                0   200 i


RouterBにCOMMUNITY属性が付いた経路情報が伝わっているか確認してみましょう。
show ip bgp communityコマンドを使うと,ルーターで受信しているCOMMUNITY属性の付いた経路情報を調べることができます。

RouterB#show ip bgp community no-export
BGP table version is 5, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
r>i1.1.1.0/24    1.1.1.1           0  100   0   i


1.1.1.0/24が表示されました。
RouterA(1.1.1.1)が送信した1.1.1.0/24の経路情報にno-exportが伝わっているのがわかります。
ちなみに経路情報左の「r」記号は,これよりAD値の小さい経路情報をIGP(今回の場合はOSPF)で受信しているため,ルーティング・テーブルには載らなかったことを示しています(IBGPのAD値は200,OSPFのAD値は110)。

RouterBが受信している1.1.1.0/24の経路情報を詳しく見てみましょう。

RouterB#show ip bgp 1.1.1.0
BGP routing table entry for 1.1.1.0/24, version 4
Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to
EBGP peer, RIB-failure(17))
 Advertised to non peer-group peers:
 3.3.3.3 4.4.4.4
 Local, (Received from a RR-client)
  1.1.1.1 (metric 65) from 1.1.1.1 (1.1.1.1)
   Origin IGP, metric 0, localpref 100, valid, internal, best
   Community: no-export


Community: no-export」と表示されました。
確かにRouterBが受信した1.1.1.0/24の経路情報に,no-exportのCOMMMUNITY属性が付いていることがわかります。

●おまけ1(RouterBがRouterCに送る経路情報にもno-exportをセットする)
経路情報にCOMMUNITY属性を付けて送るには,neighborコマンドで「send-community」パラメータを付けます。
RouterBで,RouterC(3.3.3.3)にCOMMUNITY属性情報を送れるようにします。

RouterB(config)#router bgp 200
RouterB(config-router)#neighbor 3.3.3.3 send-community


設定したら,RouterBのBGPセッションを再確立します。

RouterB#clear ip bgp *
RouterB#
00:46:53: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Down User reset
00:46:53: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down User reset
00:46:53: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Down User reset
00:46:53: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Down User reset
00:47:19: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
00:47:21: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Up
00:47:21: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Up
00:47:42: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Up


RouterEのBGPテーブルを見てみましょう。
1.1.1.0/24の経路情報がなくなりました。
RouterCにno-exportのCOMMUNITY属性が付いた経路情報が伝わり,RouterEに経路情報を送らなくなったからです。

RouterE#show ip bgp
BGP table version is 13, local router ID is 192.168.5.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
       r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
* 4.4.4.0/24    192.168.5.1                0   200 i
*>           192.168.4.1                0   200 i


RouterCがBGPで受信している1.1.1.0/24の経路情報を詳しく見てみます。

RouterC#show ip bgp 1.1.1.0
BGP routing table entry for 1.1.1.0/24, version 16
Paths: (1 available, best #1, table Default-IP-Routing-Table, not advertised to
EBGP peer, RIB-failure(17))
 Not advertised to any peer
 Local
  1.1.1.1 (metric 75) from 2.2.2.2 (2.2.2.2)
   Origin IGP, metric 0, localpref 100, valid, internal, best
   Community: no-export
   Originator: 1.1.1.1, Cluster list: 2.2.2.2


確かに,「no-export」のCOMMMUNITY属性が付いていることがわかります。

●おまけ2(RouterDが送信する4.4.4.0/24の経路情報にno-advertiseのCOMMUNITY属性を付ける)
今度は,no-advertiseのCOMMUNITY属性を使ってみましょう。
RouterDが発信している4.4.4.0/24の経路情報にno-advertiseのCOMMUNITY属性を付けてみます。
コマンドは以下です。

RouterD(config)#access-list 1 permit 4.4.4.0 0.0.0.255
RouterD(config)#route-map SETCOM2 permit 10
RouterD(config-route-map)#match ip address 1
RouterD(config-route-map)#set community no-advertise
RouterD(config-route-map)#exit
RouterD(config)#router bgp 200
RouterD(config-router)#neighbor 2.2.2.2 route-map SETCOM2 out
RouterD(config-router)#neighbor 2.2.2.2 send-community


設定したら,RouterBの全ピアを再確立します。

RouterB#clear ip bgp *
RouterB#
01:02:13: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Down User reset
01:02:13: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Down User reset
01:02:13: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Down User reset
01:02:13: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Down User reset
01:02:39: %BGP-5-ADJCHANGE: neighbor 1.1.1.1 Up
01:02:41: %BGP-5-ADJCHANGE: neighbor 3.3.3.3 Up
01:02:42: %BGP-5-ADJCHANGE: neighbor 4.4.4.4 Up
01:02:51: %BGP-5-ADJCHANGE: neighbor 192.168.4.2 Up


RouterEのBGPテーブルを見てみます。

RouterE#show ip bgp


何も表示されません。
つまり,BGPで何も経路情報を受信していません。

というのも,4.4.4.0/24という経路情報には,no-advertiseのCOMMUNITY属性が付いているからです。
それは,show ip bgp community no-advertiseコマンドで確認できます。

RouterB#show ip bgp community no-advertise
BGP table version is 5, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
r>i4.4.4.0/24    4.4.4.4          0  100    0   i


RouterCのBGPテーブルを見ると,4.4.4.0/24の経路情報はRouterCにも送られていないこともわかります。

RouterC#show ip bgp
BGP table version is 9, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

  Network     Next Hop      Metric LocPrf Weight Path
r>i1.1.1.0/24    1.1.1.1          0  100    0    i

COMMUNITY属性にno-advertiseをセットしたことによって,RouterBより先に経路情報が伝わらなくなったことが確認できました。

●参考リンク(BGP コミュニティ値を使用した,アップストリーム プロバイダー ネットワークでのルーティング ポリシーの制御)
http://www.cisco.com/japanese/warp/public/3/jp/service/tac/459/bgp-community-j.html

BGPラボ
BGPの基本設定
BGP同期
BGPの経路集約
ルート・リフレクタ

経路選択(Local Preference)
経路選択(MED)

経路選択(AS Path)
経路情報のフィルタ(ネットワーク番号)
経路情報のフィルタ(AS Path)
BGPコンフェデレーション

バックドア・リンク

BGPコミュニティ