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 |
IPv4 eBGPの基本設定
Section titled “IPv4 eBGPの基本設定”R1 の設定。
conf trouter 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.0exitR2 の設定。
conf trouter 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.0exitnetwork コマンドで広告する prefix は、ルーティングテーブルに存在している必要がある。存在しない prefix は BGP に載らない。
必要なら Null0 への静的ルートで集約 prefix を作る。
ip route 192.168.1.0 255.255.255.0 Null0show ip bgp summaryshow bgp ipv4 unicastshow ip route bgp期待する状態は、Neighbor が Established になり、相手が広告した prefix が BGP 経路として見えることである。
デフォルトルートを広告する
Section titled “デフォルトルートを広告する”特定 neighbor へデフォルトルートを広告する例。
router bgp 65001 address-family ipv4 unicast neighbor 203.0.113.2 default-originate exit-address-familyexitdefault-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-familyexit静的ルートを再配送する
Section titled “静的ルートを再配送する”静的ルートを 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-BGPexit
router bgp 65001 address-family ipv4 unicast redistribute static route-map REDIST-STATIC exit-address-familyexit再配送では、意図しない経路を 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 24ip 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 additiveexit
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 additiveexit
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-familyexitBGP に再配送するときの 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 additiveexit
route-map BACKUP-EIGRP-TO-BGP permit 10 match ip address prefix-list EIGRP-TO-BGP set local-preference 100 set community 65001:200 additiveexitlocal-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 100exit
route-map TO-EBGP-BACKUP permit 20exit
router bgp 65001 address-family ipv4 unicast neighbor 203.0.113.2 route-map TO-EBGP-BACKUP out exit-address-familyexitroute-map を neighbor に適用すると、どの sequence にも一致しない経路は暗黙の deny で落ちる。上の permit 20 は、OSPF-TO-BGP に一致しない他の広告経路を通すための catch-all である。意図的に他の経路を広告しない場合だけ、省略する。
再配送した経路をさらに別プロトコルへ戻す構成では、community や prefix-list で経路の出どころを識別し、経路ループや意図しない再広告を防ぐ。
優先経路を設定する
Section titled “優先経路を設定する”AS 内から外へ出る経路を優先したい場合は、LOCAL_PREF を使う。
route-map SET-LOCAL-PREF permit 10 set local-preference 200exit
router bgp 65001 address-family ipv4 unicast neighbor 203.0.113.2 route-map SET-LOCAL-PREF in exit-address-familyexitLOCAL_PREF は大きい方が優先される。AS 内で共有されるため、出口選択の制御に向いている。
Cisco ローカルでだけ優先したい場合は weight も使える。
router bgp 65001 address-family ipv4 unicast neighbor 203.0.113.2 weight 200 exit-address-familyexitweight はそのルータ内だけで有効であり、他の BGP ルータへ伝わらない。
IPv6 BGPの基本設定
Section titled “IPv6 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-familyexitR2 の設定。
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-familyexitIPv6 の 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-familyexitIPv4 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-familyexitこの構成では、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::1exitroute-map FIX-V6-NH-OUT permit 20exit
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-familyexitset 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-familyexitIPv4 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::1exitroute-map SET-V6-DEFAULT-NH permit 20exit
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-familyexit確認では、受信側で show bgp ipv6 unicast ::/0 と show ipv6 route ::/0 を見て、BGP の NEXT_HOP と RIB に入った経路の next-hop が意図した IPv6 アドレスになっているかを確認する。
この例の permit 20 も、::/0 以外の広告経路を暗黙 deny しないための catch-all である。
IPv6静的ルートを再配送する
Section titled “IPv6静的ルートを再配送する”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-BGPexit
router bgp 65001 address-family ipv6 unicast redistribute static route-map V6-REDIST-STATIC exit-address-familyexitIPv6の確認
Section titled “IPv6の確認”show bgp ipv6 unicast summaryshow bgp ipv6 unicastshow ipv6 route bgpiBGPをLoopbackで張る
Section titled “iBGPをLoopbackで張る”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/128exit
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-familyexitR2 の設定。
interface Loopback0 ip address 10.255.1.2 255.255.255.255 ipv6 address 2001:db8:ffff:1::2/128exit
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-familyexit確認する。
show bgp ipv4 unicast summaryshow bgp ipv6 unicast summaryLoopback 同士の iBGP では、BGP neighbor の到達性と next-hop 到達性を分けて確認する。iBGP で外部経路を配る場合、必要に応じて next-hop-self も検討する。
通常推奨される構成
Section titled “通常推奨される構成”通常の構成では、さらに次を検討する。
- 受信・送信の prefix-list と route-map を明示し、意図しない全経路広告を防ぐ
maximum-prefixで異常な経路数を制限する- 対応機器と要件に合わせて neighbor 認証や TTL Security を使用する
- iBGP は Loopback 間で張り、IGP 到達性、
update-source、next-hop-selfを一組で設計する - 設定後は Loc-RIB だけでなく、neighbor ごとの受信経路と広告経路を確認する