BGP 技術メモ(Cisco IOS / IOS XE想定)
主にCisco IOS / IOS XEのIPv4 Unicast BGPを対象とする。
IOS XR、NX-OS、ASAではCLI構文や対応機能に差異がある。
BGPは高度にポリシー制御可能なプロトコルであり、実環境ではPrefix Filter、Route-map、Community、Max-prefix、認証などを併用することを前提とする。
1. BGP概要
BGP(Border Gateway Protocol)は、主にAS(Autonomous System)間で経路情報を交換するためのパスベクタ型ルーティングプロトコルである。
インターネットの経路制御で広く使われるほか、企業WAN、MPLS L3VPN、データセンター、クラウド接続、EVPNなどでも使用される。
OSPFやIS-ISのようなIGPは「最短コストの経路」を主に選択するのに対し、BGPはAS_PATH、LOCAL_PREF、MED、Communityなどの属性を基に、組織の経路ポリシーに従って経路を選択する。
主な特徴は以下の通り。
- AS間ルーティングに使用するEGP
- TCPを使用する
- TCPポート番号は179
- IPプロトコル番号89を直接使用するOSPFとは異なる
- Helloパケットやマルチキャストは使用しない
- ネイバーは手動設定する
- TCP接続確立後にBGPセッションを開始する
- 経路広告はPath Attributeを伴う
- ルーティングループ抑止にAS_PATHを使用する
- 経路選択はCostではなくBGP Attributeを基に行う
- iBGPではフルメッシュ、Route Reflector、Confederationなどが必要になる
2. AS番号
AS番号はAS(Autonomous System)を識別する番号である。
BGPでは2バイトAS番号および4バイトAS番号を使用できる。
| 種別 | 範囲 |
|---|---|
| 2バイトAS番号 | 1 ~ 65535 |
| 4バイトAS番号 | 1 ~ 4294967295 |
| Private ASN(2バイト) | 64512 ~ 65534 |
| Private ASN(4バイト) | 4200000000 ~ 4294967294 |
代表例:
AS 65001
AS 64512
AS 4200000001
Ciscoでは通常、以下のように設定する。
router bgp 65001
この65001がローカルAS番号である。
3. eBGPとiBGP
BGPには、異なるAS間で張るeBGPと、同一AS内で張るiBGPがある。
| 種別 | 接続相手 | 主な用途 |
|---|---|---|
| eBGP | 異なるAS番号のルータ | ISP接続、拠点間、クラウド接続、顧客接続 |
| iBGP | 同一AS番号のルータ | AS内部でBGP経路を共有する |
eBGP
eBGPは異なるAS間のBGPピアリングである。
R1(AS 65001)--- R2(AS 65002)
通常、eBGPネイバーは直接接続されたルータ同士で構成する。
R1(config)# router bgp 65001
R1(config-router)# neighbor 192.0.2.2 remote-as 65002
iBGP
iBGPは同じAS内のBGPルータ間で構成する。
R1(AS 65001)--- R2(AS 65001)
R1(config)# router bgp 65001
R1(config-router)# neighbor 10.255.0.2 remote-as 65001
iBGPでは、iBGPネイバーから受信した経路を別のiBGPネイバーへ原則広告しない。この制約をiBGP Split Horizonと呼ぶ。
そのため、iBGPルータが複数台存在する場合、次のいずれかが必要となる。
- iBGPフルメッシュ
- Route Reflector
- BGP Confederation
4. BGPネイバー形成
BGPはOSPFのようにマルチキャストHelloパケットを送信して隣接ルータを自動検出するプロトコルではない。
BGPネイバーは手動で設定する必要がある。
router bgp 65001
neighbor 192.0.2.2 remote-as 65002
BGPネイバー形成の基本的な流れは以下の通り。
- BGPネイバーのIPアドレスへTCP接続を試行する
- TCP/179で3ウェイハンドシェイクを行う
- BGP OPENメッセージを交換する
- AS番号、Router ID、Hold Timer、Capabilityを確認する
- KEEPALIVEメッセージを交換する
- BGPセッションがEstablished状態になる
- UPDATEメッセージにより経路情報を交換する
BGPでは、OSPFv2の224.0.0.5や224.0.0.6のようなマルチキャストアドレスは使用しない。
BGP通信は通常ユニキャストで行われる。
5. BGPメッセージ種別
BGPで使用される主要なメッセージは以下の通り。
| メッセージ | 用途 |
|---|---|
| OPEN | BGPセッション開始時のパラメータ交換 |
| UPDATE | 経路広告、経路撤回、Path Attributeの交換 |
| KEEPALIVE | セッション維持 |
| NOTIFICATION | エラー通知およびセッション終了 |
| ROUTE-REFRESH | 受信済み経路の再広告要求 |
OPENメッセージには、主に以下の情報が含まれる。
- BGP Version
- AS番号
- Hold Time
- BGP Router ID
- Capability情報
Capabilityには、たとえば以下の情報が含まれる。
- IPv4 Unicast
- IPv6 Unicast
- VPNv4 / VPNv6
- EVPN
- Route Refresh
- 4バイトAS番号
- Graceful Restart
- Add-Path
6. BGP Finite State Machine
BGPネイバー状態は、主に以下のように遷移する。
| 状態 | 内容 |
|---|---|
| Idle | 初期状態。TCP接続開始前または接続失敗後 |
| Connect | TCP接続を試行している状態 |
| Active | TCP接続を再試行している状態 |
| OpenSent | TCP接続後、OPENメッセージを送信済み |
| OpenConfirm | OPENを受信し、KEEPALIVE待ちの状態 |
| Established | BGPセッション確立済み。経路交換可能 |
正常時は最終的にEstablishedになる。
確認コマンド:
show ip bgp summary
出力例:
R1# show ip bgp summary
BGP router identifier 10.255.0.1, local AS number 65001
BGP table version is 5, main routing table version 5
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
192.0.2.2 4 65002 45 44 5 0 0 00:32:10 3
State/PfxRcd列に数値が表示されていれば、通常はEstablished状態であり、受信プレフィックス数を示している。
状態が表示される場合は未確立である。
State/PfxRcd
Active
Idle
Connect
OpenSent
OpenConfirm
7. KeepaliveとHold Timer
Cisco IOS / IOS XEにおけるBGPタイマーの代表的なデフォルト値は以下である。
| 項目 | デフォルト値 |
|---|---|
| Keepalive Timer | 60秒 |
| Hold Timer | 180秒 |
KeepaliveはBGPセッションの維持に使用される。
Hold Timerの間にKEEPALIVEまたはUPDATEを受信できなかった場合、BGPネイバーはダウンと判断される。
設定例:
router bgp 65001
timers bgp 30 90
上記は以下を意味する。
Keepalive Timer:30秒
Hold Timer:90秒
ネイバー単位で設定する例:
router bgp 65001
neighbor 192.0.2.2 timers 30 90
OSPFのHello/Dead Timerとは異なり、BGPのKeepalive/Hold Timerは必ずしも両端で同じ値にそろえる必要はない。ただし、運用設計上は同じ値または整合性のある値に統一することが望ましい。
高速障害検出が必要な場合は、BFDとの連携を検討する。
router bgp 65001
neighbor 192.0.2.2 fall-over bfd
BFDのCLIはIOSバージョンや機種により差異があるため、対象機器の対応状況を確認する。
8. BGP基本設定例
以下の構成を想定する。
R1(AS 65001)----- R2(AS 65002)
R1 Gi0/0:192.0.2.1/30
R2 Gi0/0:192.0.2.2/30
R1が広告するネットワーク:203.0.113.0/24
R2が広告するネットワーク:198.51.100.0/24
R1設定
hostname R1
interface GigabitEthernet0/0
description To-R2
ip address 192.0.2.1 255.255.255.252
no shutdown
interface Loopback0
ip address 10.255.0.1 255.255.255.255
interface Loopback10
ip address 203.0.113.1 255.255.255.0
router bgp 65001
bgp router-id 10.255.0.1
no bgp default ipv4-unicast
neighbor 192.0.2.2 remote-as 65002
address-family ipv4 unicast
neighbor 192.0.2.2 activate
network 203.0.113.0 mask 255.255.255.0
exit-address-family
R2設定
hostname R2
interface GigabitEthernet0/0
description To-R1
ip address 192.0.2.2 255.255.255.252
no shutdown
interface Loopback0
ip address 10.255.0.2 255.255.255.255
interface Loopback10
ip address 198.51.100.1 255.255.255.0
router bgp 65002
bgp router-id 10.255.0.2
no bgp default ipv4-unicast
neighbor 192.0.2.1 remote-as 65001
address-family ipv4 unicast
neighbor 192.0.2.1 activate
network 198.51.100.0 mask 255.255.255.0
exit-address-family
9. BGP Router ID
BGP Router IDは、BGPルータを識別する32ビットの値である。
IPv4アドレス形式で表記されるが、必ずしも実際の到達可能なIPv4アドレスである必要はない。
CiscoではLoopbackインターフェースのIPv4アドレスを使用することが一般的である。
router bgp 65001
bgp router-id 10.255.0.1
Router IDを明示設定しない場合、Ciscoは通常、Loopbackインターフェースの最大IPv4アドレス、または物理インターフェースの最大IPv4アドレスを使用する。
Router IDを明示設定する利点は以下の通り。
- 再起動やインターフェース状態変化の影響を受けにくい
- Route Reflectorの識別を安定化できる
- トラブルシュート時に識別しやすい
- Router ID重複を防止しやすい
Router ID変更後は、BGPセッションの再確立が必要になる場合がある。
10. networkコマンドによる経路広告
BGPは、OSPFのようにインターフェース上のネットワークを自動で広告しない。
BGPで経路を広告するには、通常networkコマンドを使用する。
router bgp 65001
address-family ipv4 unicast
network 203.0.113.0 mask 255.255.255.0
exit-address-family
重要な点として、networkコマンドで指定したプレフィックスと同じ経路が、ローカルのルーティングテーブルに存在している必要がある。
以下の経路が存在する場合:
203.0.113.0/24
以下の設定で広告可能である。
network 203.0.113.0 mask 255.255.255.0
一方で、ルーティングテーブルに203.0.113.0/25しか存在しない場合、203.0.113.0/24は通常広告されない。
確認コマンド:
show ip route 203.0.113.0
show ip bgp 203.0.113.0
11. 再配送による経路広告
Static Route、Connected Route、OSPF、EIGRPなどの経路をBGPへ再配送できる。
Static RouteをBGPへ再配送する例:
ip route 203.0.113.0 255.255.255.0 Null0
router bgp 65001
address-family ipv4 unicast
redistribute static
exit-address-family
Connected Routeを再配送する例:
router bgp 65001
address-family ipv4 unicast
redistribute connected
exit-address-family
OSPFを再配送する例:
router bgp 65001
address-family ipv4 unicast
redistribute ospf 1
exit-address-family
ただし、無条件の再配送は不要な経路広告、経路リーク、ルーティングループを引き起こす可能性がある。
実運用ではRoute-mapやPrefix-listで再配送対象を制限する。
ip prefix-list REDIST-STATIC seq 5 permit 203.0.113.0/24
route-map REDIST-STATIC permit 10
match ip address prefix-list REDIST-STATIC
router bgp 65001
address-family ipv4 unicast
redistribute static route-map REDIST-STATIC
exit-address-family
12. BGP Path Attribute
BGP経路にはPath Attributeが付与される。
主な属性は以下の通り。
| 属性 | 概要 | 優先の考え方 |
|---|---|---|
| Weight | Cisco独自のローカル属性 | 大きいほど優先 |
| LOCAL_PREF | AS内で共有される出口選択属性 | 大きいほど優先 |
| AS_PATH | 経由したAS番号列 | 短いほど優先 |
| ORIGIN | 経路の起源 | IGPが最優先 |
| MED | 隣接ASへ出口優先度を通知 | 小さいほど優先 |
| NEXT_HOP | 次ホップIPアドレス | 到達可能である必要がある |
| COMMUNITY | 経路へタグを付与する属性 | ポリシー制御に使用 |
| AGGREGATOR | 集約を行ったBGPスピーカー情報 | 経路集約時に使用 |
| ATOMIC_AGGREGATE | 経路集約により情報が失われたことを示す | 集約時に使用 |
13. BGP Best Path Selection
BGPは複数経路を受信した場合、BGP Best Path Selection Algorithmにより最適経路を選択する。
Cisco IOS / IOS XEにおける代表的な選択順序は以下の通り。
- Weightが大きい経路
- Local Originatedな経路
- LOCAL_PREFが大きい経路
- AS_PATHが短い経路
- ORIGINがより優先される経路
- MEDが小さい経路
- eBGPで学習した経路
- NEXT_HOPまでのIGPメトリックが小さい経路
- 古いeBGP経路
- BGP Router IDが小さいネイバーからの経路
- Cluster Listが短い経路
- ネイバーIPアドレスが小さい経路
BGPのBest Path選択は、Ciscoのソフトウェアバージョン、bgp bestpath関連設定、MED比較設定、Multipath設定などにより挙動が変わることがある。
14. Weight
WeightはCisco独自のBGP属性である。
- Ciscoルータ内だけで有効
- BGPネイバーへ広告されない
- 値が大きい経路を優先する
- デフォルトは通常0
- ローカル生成経路には通常32768が設定される
特定ネイバーから受信した経路を優先する例:
router bgp 65001
neighbor 192.0.2.2 weight 500
Route-mapでWeightを設定する例:
route-map SET-WEIGHT permit 10
set weight 500
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 route-map SET-WEIGHT in
exit-address-family
Weightはローカルルータだけに影響するため、AS全体の出口制御には通常LOCAL_PREFを使用する。
15. LOCAL_PREF
LOCAL_PREFは、AS内で「どの出口を優先するか」を決めるための属性である。
- 値が大きい経路を優先する
- iBGPを通じてAS内部に伝播される
- eBGPネイバーへは通常広告されない
- Ciscoのデフォルト値は通常100
例として、ISP-A経由を優先し、ISP-Bをバックアップにする場合を考える。
ISP-A経由:LOCAL_PREF 200
ISP-B経由:LOCAL_PREF 100
ISP-Aから受信した経路にLOCAL_PREFを設定する例:
ip prefix-list DEFAULT-ONLY seq 5 permit 0.0.0.0/0
route-map ISP-A-IN permit 10
match ip address prefix-list DEFAULT-ONLY
set local-preference 200
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 route-map ISP-A-IN in
exit-address-family
LOCAL_PREFは、自ASから外部へ出る通信の出口制御に使用する。
16. AS_PATH
AS_PATHは、経路が通過したAS番号の列である。
例:
65010 65020 65030
この経路は、AS 65010、AS 65020、AS 65030を経由してきたことを示す。
BGPはAS_PATHを利用してルーティングループを防止する。
自AS番号がAS_PATH内に含まれる経路を受信した場合、通常はその経路を破棄する。
例として、AS 65001のルータが以下の経路を受信した場合:
65010 65020 65001
自ASである65001が含まれるため、通常は受け入れない。
17. AS-Prepend
AS-Prependは、AS_PATHに自AS番号を複数回追加することで、外部ASから見たAS_PATHを長くし、特定経路を選ばれにくくする手法である。
主に外部から自ASへ入る通信、つまりInbound Traffic Engineeringで利用する。
例
以下の構成を想定する。
ISP-A
|
|
AS 65001 -----+
|
|
ISP-B
ISP-A経由を主回線、ISP-B経由をバックアップ回線にしたい場合、ISP-B側へ広告する経路へAS-Prependを設定する。
ip prefix-list OWN-PREFIX seq 5 permit 203.0.113.0/24
route-map PREPEND-TO-ISP-B permit 10
match ip address prefix-list OWN-PREFIX
set as-path prepend 65001 65001 65001
router bgp 65001
address-family ipv4 unicast
neighbor 198.51.100.2 route-map PREPEND-TO-ISP-B out
exit-address-family
ISP-B経由で広告される経路のAS_PATHは、自AS番号が複数回含まれる形となる。
65001 65001 65001 65001
AS-Prependの注意点は以下の通り。
- 相手ASがAS_PATH長を重視するとは限らない
- 相手側のLOCAL_PREFが優先される場合、効果がないことがある
- インターネット全体の経路制御を完全には保証できない
- 自AS番号以外を不適切にPrependしてはならない
- 過剰なPrependは可用性低下や経路選択の複雑化につながる
18. MED
MED(Multi-Exit Discriminator)は、隣接ASに対して「複数の接続点のうち、どの入口を優先してほしいか」を通知する属性である。
- 値が小さいほど優先される
- 主に同一隣接ASから受信した複数経路の比較に使用される
- 相手ASがMEDを尊重する設定である必要がある
- 外部ASへ入る通信の入口制御に使用する
MEDを設定する例:
ip prefix-list OWN-PREFIX seq 5 permit 203.0.113.0/24
route-map SET-MED permit 10
match ip address prefix-list OWN-PREFIX
set metric 50
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 route-map SET-MED out
exit-address-family
バックアップ回線側に大きなMEDを設定する例:
route-map SET-BACKUP-MED permit 10
match ip address prefix-list OWN-PREFIX
set metric 200
MEDは相手ASのポリシーに依存するため、AS-Prependと同様に意図通りに機能することを保証するものではない。
19. NEXT_HOP
NEXT_HOPは、そのBGP経路へ到達するための次ホップIPアドレスを示す属性である。
BGP経路がルーティングテーブルへ登録されるには、NEXT_HOPが到達可能である必要がある。
eBGPで受信した経路をiBGPへ広告する場合、NEXT_HOPは通常、eBGPネイバーのアドレスのまま維持される。
例:
R1 --- eBGP --- ISP
|
iBGP
|
R2
R1がISPから受信した経路をR2へiBGP広告した場合、R2からISP側のNEXT_HOPへ到達できなければ、その経路を利用できない。
この問題を回避する代表的な設定がnext-hop-selfである。
router bgp 65001
address-family ipv4 unicast
neighbor 10.255.0.2 next-hop-self
exit-address-family
これにより、R1はR2へ経路を広告する際に、NEXT_HOPをR1自身へ書き換える。
大規模iBGP構成、Route Reflector構成、インターネット接続ルータとコアルータ間のBGP構成では特に重要である。
20. Administrative Distance(AD)
AD(Administrative Distance)は、異なるルーティングプロトコルで同一宛先を学習した場合に、どの情報源を優先するかを決めるCiscoローカルの優先度である。
値が小さいほど優先される。
Ciscoの代表的なデフォルトADは以下の通り。
| 経路情報源 | AD |
|---|---|
| Connected | 0 |
| Static | 1 |
| eBGP | 20 |
| EIGRP Internal | 90 |
| OSPF | 110 |
| IS-IS | 115 |
| RIP | 120 |
| EIGRP External | 170 |
| iBGP | 200 |
| Local BGP | 200 |
BGPのADは以下のように設定できる。
router bgp 65001
distance bgp 20 200 200
構文は以下の通り。
distance bgp <external> <internal> <local>
例:
router bgp 65001
distance bgp 20 150 200
この設定ではiBGP経路のADを150へ変更する。
ADはBGP属性ではない。BGP UPDATEメッセージでネイバーへ広告されるものではなく、各Ciscoルータがローカルで使用する値である。
21. BGP Best PathとADの違い
BGPのBest Path選択とADは別の処理である。
処理の流れは概ね以下の通り。
- BGPテーブル内でBest Pathを選択する
- NEXT_HOP到達性を確認する
- BGP Best Pathと他プロトコル経路をADで比較する
- 最終的にルーティングテーブルへ登録する
たとえば、以下の経路がある場合を考える。
Static Route:AD 1
OSPF Route:AD 110
eBGP Route:AD 20
同一宛先に対して3つの経路が存在する場合、Static Routeが優先される。
Static(1) < eBGP(20) < OSPF(110)
BGPテーブルでBest Pathになっていても、より小さいADを持つStatic Routeなどが存在する場合、BGP経路はルーティングテーブルへ登録されないことがある。
確認コマンド:
show ip bgp 203.0.113.0
show ip route 203.0.113.0
22. BGPテーブルの見方
確認コマンド:
show ip bgp
出力例:
R1# show ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 198.51.100.0/24 192.0.2.2 0 0 65002 i
主なステータスコードは以下の通り。
| コード | 意味 |
|---|---|
* |
Valid Path |
> |
Best Path |
i |
iBGPで学習した経路 |
r |
RIB Failure |
S |
Stale Path |
d |
Damped Path |
m |
Multipath |
x |
Best External Path |
経路例:
*> 198.51.100.0/24 192.0.2.2 0 0 0 65002 i
主な列は以下の通り。
| 列 | 内容 |
|---|---|
| Network | 宛先プレフィックス |
| Next Hop | 次ホップ |
| Metric | MED |
| LocPrf | LOCAL_PREF |
| Weight | Cisco独自属性 |
| Path | AS_PATHおよびORIGIN |
iはAS_PATHの最後に表示されるORIGINコードとしても使われるため、文脈に注意する。
ORIGINコードは以下の通り。
| ORIGINコード | 意味 | 優先度 |
|---|---|---|
i |
IGP Origin | 最も優先 |
e |
EGP Origin | 次点 |
? |
Incomplete | 最も低い |
networkコマンドで生成された経路は一般にiとなる。
再配送された経路は一般に?となる。
23. eBGPマルチホップ
通常、eBGPネイバーは直接接続されている必要がある。
Loopbackインターフェース同士でeBGPピアリングを構成する場合や、中間ルータを経由する場合はebgp-multihopを使用する。
構成例:
R1 Loopback0:10.255.0.1/32
R2 Loopback0:10.255.0.2/32
R1設定例:
router bgp 65001
bgp router-id 10.255.0.1
neighbor 10.255.0.2 remote-as 65002
neighbor 10.255.0.2 update-source Loopback0
neighbor 10.255.0.2 ebgp-multihop 2
address-family ipv4 unicast
neighbor 10.255.0.2 activate
exit-address-family
R2設定例:
router bgp 65002
bgp router-id 10.255.0.2
neighbor 10.255.0.1 remote-as 65001
neighbor 10.255.0.1 update-source Loopback0
neighbor 10.255.0.1 ebgp-multihop 2
address-family ipv4 unicast
neighbor 10.255.0.1 activate
exit-address-family
この構成では、Loopbackアドレスへ到達するためのIGPまたはStatic Routeが必要である。
ip route 10.255.0.2 255.255.255.255 192.0.2.2
ebgp-multihopの値は、経由するL3ホップ数を考慮して設定する。
24. iBGPフルメッシュ
iBGPでは、iBGPネイバーから受信した経路を別のiBGPネイバーへ広告しない。
そのため、Route ReflectorやConfederationを使用しない場合、すべてのiBGPルータ間でフルメッシュを構成する必要がある。
4台のiBGPルータがある場合、必要なセッション数は以下となる。
4 × 3 ÷ 2 = 6セッション
3台のiBGPルータの例:
R1 ----- R2
| \ |
| \ |
| \ |
R3 -----
R1設定例:
router bgp 65001
neighbor 10.255.0.2 remote-as 65001
neighbor 10.255.0.2 update-source Loopback0
neighbor 10.255.0.3 remote-as 65001
neighbor 10.255.0.3 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.0.2 activate
neighbor 10.255.0.3 activate
exit-address-family
小規模構成ではフルメッシュでも運用可能だが、ルータ台数が増えるとセッション数が急増する。
25. Route Reflector
Route Reflector(RR)は、iBGPフルメッシュ問題を解決する仕組みである。
RRは、iBGPクライアントから受信した経路を他のiBGPクライアントや非クライアントへ反射(Reflect)できる。
構成例:
RR1
/ \
/ \
Client1 Client2
すべて同一ASである。
RR1:AS 65001
Client1:AS 65001
Client2:AS 65001
RR設定例
RR1設定:
router bgp 65001
bgp router-id 10.255.0.10
neighbor 10.255.0.11 remote-as 65001
neighbor 10.255.0.11 update-source Loopback0
neighbor 10.255.0.12 remote-as 65001
neighbor 10.255.0.12 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.0.11 activate
neighbor 10.255.0.11 route-reflector-client
neighbor 10.255.0.12 activate
neighbor 10.255.0.12 route-reflector-client
exit-address-family
Client1設定:
router bgp 65001
bgp router-id 10.255.0.11
neighbor 10.255.0.10 remote-as 65001
neighbor 10.255.0.10 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.0.10 activate
exit-address-family
Client2設定:
router bgp 65001
bgp router-id 10.255.0.12
neighbor 10.255.0.10 remote-as 65001
neighbor 10.255.0.10 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.0.10 activate
exit-address-family
Route Reflectorはループ防止のために以下の属性を使用する。
| 属性 | 用途 |
|---|---|
| ORIGINATOR_ID | 元のiBGP経路広告元を識別する |
| CLUSTER_LIST | 経由したRRクラスタを記録する |
自分自身のRouter IDがORIGINATOR_IDに含まれる経路、または自クラスタIDがCLUSTER_LISTに含まれる経路は受け入れない。
複数RRを構成する場合は、クラスタIDを明示設定することが望ましい。
router bgp 65001
bgp cluster-id 10.255.0.10
Route Reflectorを導入しても、NEXT_HOP到達性は別途確保する必要がある。
必要に応じて以下を設定する。
router bgp 65001
address-family ipv4 unicast
neighbor 10.255.0.11 next-hop-self
neighbor 10.255.0.12 next-hop-self
exit-address-family
26. BGP Confederation
BGP Confederationは、大規模ASを複数のサブASへ分割し、外部からは単一ASとして見せる仕組みである。
構成イメージ:
外部AS --- AS 65000(Confederation)
├─ Sub-AS 65001
├─ Sub-AS 65002
└─ Sub-AS 65003
設定例:
router bgp 65001
bgp confederation identifier 65000
bgp confederation peers 65002
Confederationでは、外部ASに対してはConfederation Identifierである65000をAS番号として扱う。
現在では、iBGPスケーラビリティ対策としてRoute Reflectorが採用されることが多いが、大規模ネットワークではConfederationも利用される。
27. AS-Override
AS-Overrideは、主にMPLS L3VPN環境などで使用される機能である。
同じAS番号を使用している複数拠点を、サービスプロバイダ網経由で接続する場合に使用する。
構成例:
Site-A CE:AS 65100
Site-B CE:AS 65100
PE1:AS 65000
PE2:AS 65000
Site-Aから広告された経路には、AS_PATHに65100が含まれる。
その経路をSite-Bへそのまま広告すると、Site-Bは自AS番号65100をAS_PATH内に検出するため、通常は受信を拒否する。
AS-Overrideでは、PEが顧客AS番号をプロバイダAS番号へ置き換える。
Cisco設定例:
router bgp 65000
address-family ipv4 vrf CUSTOMER-A
neighbor 10.10.10.2 remote-as 65100
neighbor 10.10.10.2 as-override
exit-address-family
AS-Override適用前のAS_PATH例:
65100
AS-Override適用後、顧客側へ広告されるAS_PATHの例:
65000 65000
AS-Overrideは顧客AS番号の重複問題を回避できるが、ループ防止の動作に影響を与えるため、MPLS L3VPNや明確な閉域設計など、用途を限定して使用する。
28. allowas-in
allowas-inは、自AS番号がAS_PATHに含まれる経路を受信可能にする設定である。
通常、BGPはAS_PATHに自AS番号が含まれる経路を破棄する。
しかし、MPLS L3VPNや特殊なマルチホーム構成などでは、自AS番号を含む経路を受け入れる必要がある場合がある。
設定例:
router bgp 65100
address-family ipv4 unicast
neighbor 10.10.10.1 allowas-in
exit-address-family
許可する自AS番号の出現回数を制限する例:
router bgp 65100
address-family ipv4 unicast
neighbor 10.10.10.1 allowas-in 2
exit-address-family
allowas-inはループ防止を弱める機能であるため、用途を限定し、AS-Overrideとどちらを使うべきかを設計上明確にする。
29. Community
BGP Communityは、BGP経路にタグを付与し、経路ポリシーを制御するための属性である。
Communityは、主に以下の用途で使用する。
- ISPが提供する経路制御ポリシーの利用
- LOCAL_PREF変更要求
- 特定地域への広告制御
- Blackhole Community
- No-export制御
- ルートフィルタリング
- 経路識別
標準Communityの一般的な表記は以下である。
ASN:Value
例:
65001:100
65001:200
Communityを付与する例:
ip prefix-list OWN-PREFIX seq 5 permit 203.0.113.0/24
route-map SET-COMMUNITY permit 10
match ip address prefix-list OWN-PREFIX
set community 65001:100 additive
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 send-community
neighbor 192.0.2.2 route-map SET-COMMUNITY out
exit-address-family
拡張Communityも送信する例:
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 send-community both
exit-address-family
代表的なWell-known Communityは以下の通り。
| Community | 意味 |
|---|---|
no-export |
Confederation外のeBGPピアへ広告しない |
no-advertise |
どのBGPピアへも広告しない |
local-AS |
ローカルAS外へ広告しない用途で使用される |
no-exportを設定する例:
route-map SET-NO-EXPORT permit 10
set community no-export additive
Communityの意味は、ISPや接続事業者ごとに異なることがある。ISP Communityを使用する場合は、必ず接続先ISPのCommunity仕様を確認する。
30. Prefix Filter
BGPでは、意図しない経路広告や受信を防ぐために、Prefix Filterを設定することが重要である。
Prefix-list例:
ip prefix-list OUT-TO-ISP seq 5 permit 203.0.113.0/24
ip prefix-list OUT-TO-ISP seq 100 deny 0.0.0.0/0 le 32
BGPネイバーへの送信経路を制限する例:
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 prefix-list OUT-TO-ISP out
exit-address-family
受信経路を制限する例:
ip prefix-list IN-FROM-ISP seq 5 permit 0.0.0.0/0
ip prefix-list IN-FROM-ISP seq 100 deny 0.0.0.0/0 le 32
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 prefix-list IN-FROM-ISP in
exit-address-family
Prefix-listは暗黙のdenyを持つ。
つまり、明示的にpermitされていないプレフィックスは拒否される。
31. Route-map
Route-mapは、BGP経路のフィルタリングや属性変更に使用する。
主な用途は以下の通り。
- Prefix Filter
- AS-Prepend
- LOCAL_PREF変更
- MED変更
- Community付与・削除
- Weight変更
- 再配送制御
- AS_PATHフィルタ
例:特定プレフィックスにLOCAL_PREFを設定する。
ip prefix-list DEFAULT-ROUTE seq 5 permit 0.0.0.0/0
route-map SET-LOCAL-PREF permit 10
match ip address prefix-list DEFAULT-ROUTE
set local-preference 200
route-map SET-LOCAL-PREF permit 100
BGPネイバーへ適用する。
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 route-map SET-LOCAL-PREF in
exit-address-family
Route-mapには暗黙のdenyが存在する。
そのため、特定条件だけをpermitした場合、それ以外の経路がすべて拒否される可能性がある。
必要に応じて最後にpermit文を追加する。
route-map SET-LOCAL-PREF permit 100
32. AS_PATH Filter
AS_PATH Access-listを使用して、特定ASを経由した経路をフィルタリングできる。
例として、AS 65050を含む経路を拒否する。
ip as-path access-list 10 deny _65050_
ip as-path access-list 10 permit .*
Route-mapへ適用する。
route-map FILTER-AS-PATH permit 10
match as-path 10
BGPネイバーへ適用する。
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 route-map FILTER-AS-PATH in
exit-address-family
CiscoのAS_PATH正規表現では、_はAS番号の区切りを示す。
_65050_
この記述により、65050という独立したAS番号を検索できる。
33. デフォルトルート広告
BGPでデフォルトルートを広告する方法はいくつかある。
networkコマンドで広告する方法
ルーティングテーブルにデフォルトルートが存在する必要がある。
ip route 0.0.0.0 0.0.0.0 192.0.2.2
router bgp 65001
address-family ipv4 unicast
network 0.0.0.0
exit-address-family
default-information originateを使用する方法
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 default-originate
exit-address-family
Route-mapを使って条件付きでデフォルトルートを広告する例:
ip prefix-list DEFAULT-CONDITION seq 5 permit 198.51.100.0/24
route-map DEFAULT-ORIGINATE permit 10
match ip address prefix-list DEFAULT-CONDITION
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 default-originate route-map DEFAULT-ORIGINATE
exit-address-family
デフォルトルートを複数方向へ広告する場合は、障害時に不要な出口へ転送されないよう、上位回線の到達性監視と組み合わせる。
34. 経路集約
BGPではaggregate-addressを使用して経路集約を行う。
例として、以下の経路を集約する。
203.0.113.0/24
203.0.114.0/24
203.0.115.0/24
集約設定例:
router bgp 65001
address-family ipv4 unicast
aggregate-address 203.0.112.0 255.255.252.0
exit-address-family
詳細経路の広告を抑止する例:
router bgp 65001
address-family ipv4 unicast
aggregate-address 203.0.112.0 255.255.252.0 summary-only
exit-address-family
AS_PATH情報をAS_SETとして保持する例:
router bgp 65001
address-family ipv4 unicast
aggregate-address 203.0.112.0 255.255.252.0 summary-only as-set
exit-address-family
as-setを使用すると、集約対象経路のAS_PATH情報をAS_SETとして保持できる。
経路集約では、詳細経路の消失時にブラックホールが発生しないよう注意する。
集約経路を広告する条件、Null0への破棄経路、障害時の詳細経路動作を設計する。
35. Private ASNの削除
顧客網やプライベートネットワークで使用したPrivate ASNを、インターネット側へ広告する前に削除する場合がある。
設定例:
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 remove-private-as
exit-address-family
より詳細な動作制御が可能な実装では、以下のようなオプションが利用できる場合がある。
neighbor 192.0.2.2 remove-private-as all
neighbor 192.0.2.2 remove-private-as all replace-as
利用可能な構文はCisco IOS / IOS XEのバージョンに依存する。
Private ASN削除は、接続先ISPのポリシーや自組織のAS設計を確認してから使用する。
36. BGP Multipath
BGPでは、条件を満たす複数経路を同時に使用できる。
Ciscoでは、デフォルトでBGP Multipathが1経路に制限されることが多い。
eBGP Multipathの例:
router bgp 65001
address-family ipv4 unicast
maximum-paths 2
exit-address-family
iBGP Multipathの例:
router bgp 65001
address-family ipv4 unicast
maximum-paths ibgp 2
exit-address-family
AS_PATHが異なるeBGP経路でも、AS_PATH長が等しい場合にMultipath候補にする例:
router bgp 65001
bgp bestpath as-path multipath-relax
BGP Multipathを使用する場合は、以下を確認する。
- NEXT_HOPが到達可能であること
- BGP属性がMultipath条件を満たすこと
- CEFが有効であること
- 非対称経路が問題にならないこと
- ファイアウォールやNAT装置のセッション処理に影響しないこと
37. BGP認証
BGPセッションにはTCP MD5認証を設定できる。
Cisco設定例:
router bgp 65001
neighbor 192.0.2.2 password BGP-SECRET
両端で同じパスワードを設定する必要がある。
R2側の例:
router bgp 65002
neighbor 192.0.2.1 password BGP-SECRET
認証不一致の場合、TCPセッションまたはBGPセッションが確立しない。
BGP認証では、以下も検討する。
- TCP MD5認証
- TCP-AO対応状況
- ACLによるTCP/179通信制限
- Control Plane Policing
- 管理プレーン分離
- BGP TTL Security
- Max-prefix設定
38. BGP TTL Security
直接接続eBGPピアに対する攻撃対策として、TTL Securityを使用できる。
router bgp 65001
neighbor 192.0.2.2 ttl-security hops 1
TTL Securityでは、受信パケットのTTLを検査し、近接したネイバーからの通信のみを受け入れる。
通常、直接接続eBGPピアで利用する。
ebgp-multihopを使用する構成では、TTL Security設定との整合性を確認する必要がある。
39. Max-prefix
Max-prefixは、BGPネイバーから受信するプレフィックス数を制限する機能である。
誤設定や経路リークにより大量の経路を受信した場合の保護に使用する。
例:
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 maximum-prefix 100 80 restart 5
exit-address-family
上記の意味は以下の通り。
| 設定値 | 内容 |
|---|---|
| 100 | 最大受信プレフィックス数 |
| 80 | 80%到達時に警告 |
| restart 5 | 5分後にセッション再試行 |
インターネットフルルートを受信する場合は、実際のプレフィックス数に応じた十分な値を設定する必要がある。
一方、顧客接続や拠点接続では、想定経路数に近い厳格な値を設定することが望ましい。
40. Route RefreshとSoft Reset
BGPポリシーを変更した場合、従来はBGPセッションをリセットして経路を再受信する必要があった。
現在はRoute RefreshまたはSoft Resetを使用し、セッションを切断せずにポリシーを再適用できる。
受信方向のSoft Reset例:
clear ip bgp 192.0.2.2 soft in
送信方向のSoft Reset例:
clear ip bgp 192.0.2.2 soft out
Route Refreshをサポートしないネイバーに対して受信方向のSoft Resetを行う場合、事前にSoft Reconfigurationを設定する必要がある。
router bgp 65001
address-family ipv4 unicast
neighbor 192.0.2.2 soft-reconfiguration inbound
exit-address-family
ただし、Soft Reconfigurationは受信した経路情報をメモリに保持するため、メモリ消費が増加する。
対応ネイバーとの接続では、通常はRoute Refreshを使用する。
41. IPv6 BGP設定例
BGPではMP-BGP機能によりIPv6経路を交換できる。
構成例:
R1:2001:db8:12::1/64
R2:2001:db8:12::2/64
R1設定例:
ipv6 unicast-routing
interface GigabitEthernet0/0
ipv6 address 2001:db8:12::1/64
no shutdown
interface Loopback0
ipv6 address 2001:db8:255::1/128
router bgp 65001
bgp router-id 10.255.0.1
no bgp default ipv4-unicast
neighbor 2001:db8:12::2 remote-as 65002
address-family ipv6 unicast
neighbor 2001:db8:12::2 activate
network 2001:db8:100::/48
exit-address-family
R2設定例:
ipv6 unicast-routing
interface GigabitEthernet0/0
ipv6 address 2001:db8:12::2/64
no shutdown
interface Loopback0
ipv6 address 2001:db8:255::2/128
router bgp 65002
bgp router-id 10.255.0.2
no bgp default ipv4-unicast
neighbor 2001:db8:12::1 remote-as 65001
address-family ipv6 unicast
neighbor 2001:db8:12::1 activate
network 2001:db8:200::/48
exit-address-family
IPv6 BGPでもRouter IDは32ビットのIPv4形式である。
42. BGP障害時の確認コマンド
BGPサマリー確認
show ip bgp summary
特定ネイバーの詳細確認
show ip bgp neighbors 192.0.2.2
BGPテーブル確認
show ip bgp
show ip bgp 203.0.113.0
ルーティングテーブル確認
show ip route bgp
show ip route 203.0.113.0
BGP設定確認
show running-config | section router bgp
show ip protocols
TCPセッション確認
show tcp brief
Prefix Filter確認
show ip prefix-list
show route-map
show ip as-path-access-list
BGP Capability確認
show ip bgp neighbors 192.0.2.2 | include Capability
デバッグ
debug ip bgp events
debug ip bgp updates
debugはCPU負荷およびログ出力を増加させるため、本番環境では慎重に使用する。
43. 代表的な障害原因
| 状態・症状 | 主な原因 |
|---|---|
| Idle | BGP設定不足、ネイバーshutdown、TCP接続不可 |
| Connect / Active | IP到達性不良、ACL、TCP/179遮断、update-source不一致 |
| OpenSent | remote-as不一致、認証不一致、BGP Capability不一致 |
| OpenConfirmで停止 | Keepalive未受信、TCP不安定、認証・制御プレーン問題 |
| Establishedだが経路なし |
network対象経路がRIBにない、Prefix Filter、Route-map、再配送漏れ |
| BGPテーブルにはあるがRIBにない | AD、NEXT_HOP未到達、Static Route優先、RIB Failure |
| 意図しない出口を選択 | LOCAL_PREF、Weight、AS_PATH、MED、NEXT_HOPの設計不備 |
| iBGP経路が伝播しない | iBGP Split Horizon、RR未設定、フルメッシュ不足 |
| BGPセッションが頻繁に切れる | 回線品質、Hold Timer、BFD、CPU高負荷、CoPP、TCP問題 |
| 大量経路受信で不安定 | Max-prefix未設定、Prefix Filter不備、メモリ不足 |
44. 設計・運用上の要点
- BGP Router IDはLoopbackアドレスなどを用いて明示設定する
- eBGPとiBGPの役割を明確に分ける
- BGPネイバーは手動設定であり、OSPFのような自動隣接検出は行わない
- TCP/179の到達性、ACL、認証、TTL、経路到達性を確認する
- eBGPではPrefix Filterを必須と考える
- 受信・送信の両方向で経路フィルタリングを行う
- 再配送は最小限にし、必ずRoute-mapで制御する
- BGP Best PathとADは別の概念として理解する
- Outbound Traffic EngineeringにはLOCAL_PREFを主に使用する
- Inbound Traffic EngineeringにはAS-Prepend、MED、Communityを使用する
- iBGPではNEXT_HOP到達性を必ず確認する
- iBGPフルメッシュが困難な場合はRoute Reflectorを使用する
- RR冗長化時はCluster ID、Router ID、NEXT_HOPを設計する
- AS-Overrideやallowas-inはループ防止に影響するため用途を限定する
- Max-prefixを設定して経路リークに備える
- TCP MD5認証、TTL Security、CoPP、ACLを適用する
- ISP接続時はISPのCommunity仕様、最大プレフィックス数、BGPポリシーを確認する
-
clear ip bgpによるハードリセットは通信影響が大きいため、原則としてSoft ResetまたはRoute Refreshを優先する