コンテンツにスキップ

Cisco機器でBGPを設定する

CML 2.10 の IOSv 15.9 を中心に、BGP の基本設定、デフォルトルート広告、再配送、優先経路設定、IPv6 address-family を設定する。

R1 と R2 を eBGP で接続する。実機では AS 番号、neighbor アドレス、広告する prefix、ポリシーを環境に合わせて置き換える。


項目 R1 R2
AS番号 65001 65002
Router ID 1.1.1.1 2.2.2.2
R1-R2間 IPv4 203.0.113.1/30 203.0.113.2/30
R1-R2間 IPv6 2001:db8:12::1/64 2001:db8:12::2/64
広告するIPv4 prefix 192.168.1.0/24 192.168.2.0/24
広告するIPv6 prefix 2001:db8:1::/48 2001:db8:2::/48

R1 の設定。

conf t
router bgp 65001
bgp router-id 1.1.1.1
neighbor 203.0.113.2 remote-as 65002
network 192.168.1.0 mask 255.255.255.0
exit

R2 の設定。

conf t
router bgp 65002
bgp router-id 2.2.2.2
neighbor 203.0.113.1 remote-as 65001
network 192.168.2.0 mask 255.255.255.0
exit

network コマンドで広告する prefix は、ルーティングテーブルに存在している必要がある。存在しない prefix は BGP に載らない。

必要なら Null0 への静的ルートで集約 prefix を作る。

ip route 192.168.1.0 255.255.255.0 Null0

show ip bgp summary
show bgp ipv4 unicast
show ip route bgp

期待する状態は、Neighbor が Established になり、相手が広告した prefix が BGP 経路として見えることである。


特定 neighbor へデフォルトルートを広告する例。

router bgp 65001
address-family ipv4 unicast
neighbor 203.0.113.2 default-originate
exit-address-family
exit

default-originate は、その neighbor に対して 0.0.0.0/0 を広告する。どの相手へデフォルトを渡すかを明確にできる。

RIB にあるデフォルトルートを network で広告する方法もある。

ip route 0.0.0.0 0.0.0.0 203.0.113.254
router bgp 65001
address-family ipv4 unicast
network 0.0.0.0 mask 0.0.0.0
exit-address-family
exit

静的ルートを BGP へ再配送する例。

ip route 172.16.10.0 255.255.255.0 192.0.2.1
ip prefix-list STATIC-TO-BGP seq 10 permit 172.16.10.0/24
route-map REDIST-STATIC permit 10
match ip address prefix-list STATIC-TO-BGP
exit
router bgp 65001
address-family ipv4 unicast
redistribute static route-map REDIST-STATIC
exit-address-family
exit

再配送では、意図しない経路を BGP に流さないように prefix-list と route-map で対象を絞る。prefix-list と route-map の考え方は prefix-list と route-map を参照する。


別ルーティングプロトコルをBGPへ再配送する

Section titled “別ルーティングプロトコルをBGPへ再配送する”

OSPF や EIGRP で学習した内部経路を BGP へ入れる場合は、address-family の中で redistribute を設定する。

ip prefix-list OSPF-TO-BGP seq 10 permit 10.10.0.0/16 le 24
ip prefix-list EIGRP-TO-BGP seq 10 permit 10.20.0.0/16 le 24
route-map OSPF-TO-BGP permit 10
match ip address prefix-list OSPF-TO-BGP
set local-preference 200
set origin igp
set community 65001:100 additive
exit
route-map EIGRP-TO-BGP permit 10
match ip address prefix-list EIGRP-TO-BGP
set local-preference 150
set origin igp
set community 65001:200 additive
exit
router bgp 65001
address-family ipv4 unicast
redistribute ospf 10 route-map OSPF-TO-BGP
redistribute eigrp 100 route-map EIGRP-TO-BGP
exit-address-family
exit

BGP に再配送するときの route-map では、BGP 属性を付けて経路制御できる。DRPでのroute-mapの基本は route-map も参照する。

設定 意味
match ip address prefix-list ... BGP へ入れる prefix を絞る
set local-preference AS 内でどの経路を優先するかを指定する
set origin BGP ORIGIN 属性を指定する
set community 後段のポリシーで使う目印を付ける

LOCAL_PREF は大きい方が優先される。同じ prefix を OSPF と EIGRP の両方から BGP へ入れる可能性がある場合は、route-map で LOCAL_PREF を変えて、AS 内の優先経路を明確にする。

route-map PRIMARY-OSPF-TO-BGP permit 10
match ip address prefix-list OSPF-TO-BGP
set local-preference 250
set community 65001:100 additive
exit
route-map BACKUP-EIGRP-TO-BGP permit 10
match ip address prefix-list EIGRP-TO-BGP
set local-preference 100
set community 65001:200 additive
exit

local-preference は AS 内で使う属性であり、eBGP で外部 AS へそのまま渡す属性ではない。外部 AS に経路選択を促したい場合は、MED、AS_PATH prepend、community など、相手 AS のポリシーに合う属性を使う。

route-map TO-EBGP-BACKUP permit 10
match ip address prefix-list OSPF-TO-BGP
set as-path prepend 65001 65001 65001
set metric 100
exit
route-map TO-EBGP-BACKUP permit 20
exit
router bgp 65001
address-family ipv4 unicast
neighbor 203.0.113.2 route-map TO-EBGP-BACKUP out
exit-address-family
exit

route-map を neighbor に適用すると、どの sequence にも一致しない経路は暗黙の deny で落ちる。上の permit 20 は、OSPF-TO-BGP に一致しない他の広告経路を通すための catch-all である。意図的に他の経路を広告しない場合だけ、省略する。

再配送した経路をさらに別プロトコルへ戻す構成では、community や prefix-list で経路の出どころを識別し、経路ループや意図しない再広告を防ぐ。


AS 内から外へ出る経路を優先したい場合は、LOCAL_PREF を使う。

route-map SET-LOCAL-PREF permit 10
set local-preference 200
exit
router bgp 65001
address-family ipv4 unicast
neighbor 203.0.113.2 route-map SET-LOCAL-PREF in
exit-address-family
exit

LOCAL_PREF は大きい方が優先される。AS 内で共有されるため、出口選択の制御に向いている。

Cisco ローカルでだけ優先したい場合は weight も使える。

router bgp 65001
address-family ipv4 unicast
neighbor 203.0.113.2 weight 200
exit-address-family
exit

weight はそのルータ内だけで有効であり、他の BGP ルータへ伝わらない。


IPv6 では address-family を使って neighbor を有効化する。IPv4 と IPv6 を同じ BGP プロセスで扱う場合、IPv4 側も address-family で neighbor ... activate を明示する。

R1 の設定。

ipv6 unicast-routing
router bgp 65001
bgp router-id 1.1.1.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:1::/48
exit-address-family
exit

R2 の設定。

ipv6 unicast-routing
router bgp 65002
bgp router-id 2.2.2.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:2::/48
exit-address-family
exit

IPv6 の network も、該当 prefix が IPv6 ルーティングテーブルに存在している必要がある。

IPv4 と IPv6 を同じ BGP プロセスで扱う場合は、neighbor 定義を作ったあと、address-family ごとに neighbor ... activate を入れる。BGP セッションを張る neighbor アドレスは IPv4 と IPv6 のどちらでもよいが、address-family 配下の neighbor ... activate には、実際に定義した neighbor アドレスを指定する。

router bgp 65001
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
neighbor 203.0.113.2 remote-as 65002
neighbor 2001:db8:12::2 remote-as 65002
address-family ipv4 unicast
neighbor 203.0.113.2 activate
network 192.168.1.0 mask 255.255.255.0
exit-address-family
address-family ipv6 unicast
neighbor 2001:db8:12::2 activate
network 2001:db8:1::/48
exit-address-family
exit

IPv4 neighbor で IPv6 unicast AF を有効化することもできる。この場合、BGP セッションは IPv4 で張り、IPv6 prefix は同じ neighbor を IPv6 address-family 配下で activate して交換する。

router bgp 65001
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
neighbor 203.0.113.2 remote-as 65002
address-family ipv4 unicast
neighbor 203.0.113.2 activate
network 192.168.1.0 mask 255.255.255.0
exit-address-family
address-family ipv6 unicast
neighbor 203.0.113.2 activate
network 2001:db8:1::/48
exit-address-family
exit

この構成では、IPv6 route の NEXT_HOP が実際に到達可能な IPv6 アドレスになっているか確認する。Cisco IOS 15M&T の設定ガイドでは、IPv6 NEXT_HOP を変更する route-map は outbound に適用する必要があり、inbound route-map による IPv6 NEXT_HOP 変更はサポートされない。

送信側 R1 で IPv6 NEXT_HOP を補正する例。

ipv6 prefix-list V6-TO-R2 seq 10 permit 2001:db8:1::/48
route-map FIX-V6-NH-OUT permit 10
match ipv6 address prefix-list V6-TO-R2
set ipv6 next-hop 2001:db8:12::1
exit
route-map FIX-V6-NH-OUT permit 20
exit
router bgp 65001
address-family ipv6 unicast
neighbor 203.0.113.2 activate
neighbor 203.0.113.2 route-map FIX-V6-NH-OUT out
exit-address-family
exit

set ipv6 next-hop には、受信ルータから見て実際に転送に使える IPv6 next-hop を指定する。IPv4 neighbor で IPv6 route を交換している場合、neighbor の IPv4 アドレスと IPv6 の転送 next-hop は別物として扱う。

route-map を neighbor に適用すると、どの sequence にも一致しない経路は暗黙の deny で落ちる。上の permit 20 は、NEXT_HOP を書き換えない他の IPv6 経路を通すための catch-all である。


IPv6デフォルトルートを広告する

Section titled “IPv6デフォルトルートを広告する”
ipv6 route ::/0 2001:db8:ff::1
router bgp 65001
address-family ipv6 unicast
neighbor 2001:db8:12::2 default-originate
exit-address-family
exit

IPv4 neighbor で IPv6 default route を扱う場合も、受け取り側で NEXT_HOP を確認する。Cisco IOS の neighbor default-originate route-map は、デフォルトルートを条件付きで注入するための route-map であり、NEXT_HOP を書き換えるための通常の outbound policy とは分けて考える。CML 2.10 の IOSv 15.9(3)M12 では、default-originate でローカル生成される ::/0 に対して送信側 outbound route-map の set ipv6 next-hop が期待どおり反映されない挙動を確認している。公開Cisco資料で同一の不具合報告は確認できていないため、これは報告済みバグとしてではなく、IOSv 15.9(3)M12 での検証上の注意として扱う。

NEXT_HOP を明示的に制御したい場合は、default-originate ではなく、IPv6 RIB に ::/0 を作って network ::/0 で通常の IPv6 BGP route として広告する方法を検討する。

ipv6 route ::/0 2001:db8:ff::1
ipv6 prefix-list V6-DEFAULT seq 10 permit ::/0
route-map SET-V6-DEFAULT-NH permit 10
match ipv6 address prefix-list V6-DEFAULT
set ipv6 next-hop 2001:db8:12::1
exit
route-map SET-V6-DEFAULT-NH permit 20
exit
router bgp 65001
address-family ipv6 unicast
neighbor 203.0.113.2 activate
neighbor 203.0.113.2 route-map SET-V6-DEFAULT-NH out
network ::/0
exit-address-family
exit

確認では、受信側で show bgp ipv6 unicast ::/0 と show ipv6 route ::/0 を見て、BGP の NEXT_HOP と RIB に入った経路の next-hop が意図した IPv6 アドレスになっているかを確認する。

この例の permit 20 も、::/0 以外の広告経路を暗黙 deny しないための catch-all である。


ipv6 route 2001:db8:100::/48 2001:db8:ff::1
ipv6 prefix-list V6-STATIC-TO-BGP seq 10 permit 2001:db8:100::/48
route-map V6-REDIST-STATIC permit 10
match ipv6 address prefix-list V6-STATIC-TO-BGP
exit
router bgp 65001
address-family ipv6 unicast
redistribute static route-map V6-REDIST-STATIC
exit-address-family
exit

show bgp ipv6 unicast summary
show bgp ipv6 unicast
show ipv6 route bgp

iBGP は物理インターフェースではなく Loopback アドレス同士で張ることが多い。物理リンクが変わっても、Loopback への到達性が残っていれば BGP セッションを維持しやすいためである。

この例では、R1 と R2 が同じ AS 65001 にいる前提とする。

項目 R1 R2
AS番号 65001 65001
Loopback IPv4 10.255.1.1/32 10.255.1.2/32
Loopback IPv6 2001:db8:ffff:1::1/128 2001:db8:ffff:1::2/128

先に Loopback への到達性を IGP や静的ルートで確保しておく。到達性がないと、update-source Loopback0 を設定しても TCP セッションが張れない。

R1 の設定。

interface Loopback0
ip address 10.255.1.1 255.255.255.255
ipv6 address 2001:db8:ffff:1::1/128
exit
router bgp 65001
bgp router-id 1.1.1.1
no bgp default ipv4-unicast
neighbor 10.255.1.2 remote-as 65001
neighbor 10.255.1.2 update-source Loopback0
neighbor 2001:db8:ffff:1::2 remote-as 65001
neighbor 2001:db8:ffff:1::2 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.1.2 activate
exit-address-family
address-family ipv6 unicast
neighbor 2001:db8:ffff:1::2 activate
exit-address-family
exit

R2 の設定。

interface Loopback0
ip address 10.255.1.2 255.255.255.255
ipv6 address 2001:db8:ffff:1::2/128
exit
router bgp 65001
bgp router-id 2.2.2.2
no bgp default ipv4-unicast
neighbor 10.255.1.1 remote-as 65001
neighbor 10.255.1.1 update-source Loopback0
neighbor 2001:db8:ffff:1::1 remote-as 65001
neighbor 2001:db8:ffff:1::1 update-source Loopback0
address-family ipv4 unicast
neighbor 10.255.1.1 activate
exit-address-family
address-family ipv6 unicast
neighbor 2001:db8:ffff:1::1 activate
exit-address-family
exit

確認する。

show bgp ipv4 unicast summary
show bgp ipv6 unicast summary

Loopback 同士の iBGP では、BGP neighbor の到達性と next-hop 到達性を分けて確認する。iBGP で外部経路を配る場合、必要に応じて next-hop-self も検討する。


通常の構成では、さらに次を検討する。

  • 受信・送信の prefix-list と route-map を明示し、意図しない全経路広告を防ぐ
  • maximum-prefix で異常な経路数を制限する
  • 対応機器と要件に合わせて neighbor 認証や TTL Security を使用する
  • iBGP は Loopback 間で張り、IGP 到達性、update-source、next-hop-self を一組で設計する
  • 設定後は Loc-RIB だけでなく、neighbor ごとの受信経路と広告経路を確認する