1月27日、28日に開催された NETCON at JANOG47、なかなか盛況だったみたいですね。私も作問者として参加させてもらいましたので、作った問題(300-4と300-2)について解説してみようと思います。長いので、300-2については別記事にしてあります。
300-4 概要
ちょっと意地悪な問題です。「疎通確認ができるか」ということと「求められている通信が成立しているか」がきちんと分けて考えられるかという観点で作問しています。
トポロジ

各機器の初期設定
CSR
hostname CSR ! interface Loopback0 ip address 192.168.254.254 255.255.255.255 ! interface Loopback10000 ip address 198.51.100.100 255.255.255.0 ! interface GigabitEthernet1 ip address 192.0.2.254 255.255.255.252 no shutdown ! router bgp 65002 no bgp default ipv4-unicast neighbor 192.0.2.2 remote-as 65001 ! address-family ipv4 redistribute connected route-map MAP_01 neighbor 192.0.2.2 activate exit-address-family ! ip route 192.0.2.0 255.255.255.252 192.0.2.253 ! ! ! ip prefix-list RFC1918 seq 5 permit 10.0.0.0/8 le 32 ip prefix-list RFC1918 seq 10 permit 172.16.0.0/12 le 32 ip prefix-list RFC1918 seq 15 permit 192.168.0.0/16 le 32 ! route-map MAP_01 deny 10 match ip address prefix-list RFC1918 ! route-map MAP_01 permit 20 set community no-export ! ! line con 0 exec-timeout 0 0 ! end
CSR-hub
hostname CSR-hub ! ! interface GigabitEthernet1 ip address 192.0.2.1 255.255.255.252 no shutdown ! interface GigabitEthernet2 ip address 192.0.2.253 255.255.255.252 ip access-group 100 out no shutdown ! ! ip route 198.51.100.0 255.255.255.0 192.0.2.254 ip route 203.0.113.0 255.255.255.0 192.0.2.2 ! access-list 100 deny udp any any range 33434 33689 access-list 100 deny tcp any any eq bgp access-list 100 permit ip any any ! ! line con 0 exec-timeout 0 0 ! end
XRv
hostname XRv line console exec-timeout 0 0 ! interface Loopback0 ipv4 address 192.168.2.2 255.255.255.255 ! interface Loopback10000 ipv4 address 203.0.113.1 255.255.255.0 ! interface GigabitEthernet0/0/0/0 ipv4 address 192.0.2.2 255.255.255.252 no shutdown ! prefix-set RFC1918 10.0.0.0/8 ge 8, 172.16.0.0/12 ge 12, 192.168.0.0/16 ge 16 end-set ! route-policy PASS pass end-policy ! route-policy RPL_01 if destination in RFC1918 then set community (no-export) additive endif end-policy ! router static address-family ipv4 unicast 192.0.2.252/30 192.0.2.1 ! ! router bgp 65001 address-family ipv4 unicast redistribute connected route-policy RPL_01 ! neighbor 192.0.2.254 remote-as 65002 address-family ipv4 unicast address-family ipv4 unicast route-policy PASS in route-policy PASS out ! ! ! end
問題
問題文:
CSRとXRvの間でBGPによる経路交換ができていない。問題を解決せよ。
条件:
- CSRとXRvは、互いのLoopback10000の属するプレフィックスがBGPで広報されること。
- ルータ間の物理リンク、トンネリング、ルーティングプロトコル、静的経路情報の追加は許可しない。
- 設定済みのアドレスは変更してはならない。
- ルートマップ、ルートポリシー、アクセスリストなどの削除は認めない。ただし、必要に応じて内容を変更することは許可される。
初期状態の確認
まず問題にある「BGPによる経路交換ができていない」ことを確認します。CSRではネイバ確立していないこと、それにより、XRvのLoopback10000のプレフィックスである「203.0.113.0/24」が受信できていないことがわかります。
CSR>show bgp ipv4 unicast summary | begin Neighbor Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.0.2.2 4 65001 0 0 1 0 0 never Idle CSR>show bgp ipv4 unicast | begin Network Network Next Hop Metric LocPrf Weight Path *> 192.0.2.252/30 0.0.0.0 0 32768 ? *> 198.51.100.0 0.0.0.0 0 32768 ?
同様に、XRvでもネイバ確立していないこと、プレフィックス「198.51.100.0/24」が受信できていないことがわかります。
RP/0/0/CPU0:XRv#show bgp ipv4 unicast summary | begin Neighbor Sat Jan 30 05:12:16.808 UTC Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd 192.0.2.254 0 65002 0 0 0 0 0 00:00:00 Idle RP/0/0/CPU0:XRv#show bgp ipv4 unicast | begin Network Sat Jan 30 05:12:23.817 UTC Network Next Hop Metric LocPrf Weight Path *> 192.168.2.2/32 0.0.0.0 0 32768 ? Processed 1 prefixes, 1 paths
ということで、まずはBGPのネイバ確立が必要だということで、その観点で問題点の調査と対応を進めて行きます。
設定内容の確認
BGPピアリングが確立しない場合、ネイバのIPアドレス、AS番号指定が誤っていることなどが考えられるため、そのようなミスがないか確認します。
見た感じ、ネイバのIPアドレス、自分と相手のAS番号の設定は誤っていないみたいです。また、この時点で双方のAS番号が異なるので「eBGPピアリング」をしようとしていることが確認できます。
■CSR CSR>enable CSR#show run | s router bgp router bgp 65002 bgp log-neighbor-changes no bgp default ipv4-unicast neighbor 192.0.2.2 remote-as 65001 ! address-family ipv4 redistribute connected route-map MAP_01 neighbor 192.0.2.2 activate exit-address-family ■XRv RP/0/0/CPU0:XRv#show run router bgp Sat Jan 30 05:19:18.459 UTC router bgp 65001 address-family ipv4 unicast redistribute connected route-policy RPL_01 ! neighbor 192.0.2.254 remote-as 65002 address-family ipv4 unicast route-policy PASS in route-policy PASS out ! ! !
疎通確認
設定に問題がなさそうであれば、IP疎通できるかを確認していきます。ping は通るのでL3(IP)ではなくL4(TCP)レベルで見れば良さそうです。BGPはレイヤ4(TCP)のプロトコルですので、その意味でもレイヤ4以上のところに問題がありそうです。
■CSR CSR#ping 192.0.2.2 source 192.0.2.254 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.0.2.2, timeout is 2 seconds: Packet sent with a source address of 192.0.2.254 !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 2/5/13 ms ■XRv RP/0/0/CPU0:XRv#ping 192.0.2.254 source 192.0.2.2 Sat Jan 30 05:28:50.989 UTC Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.0.2.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/9 ms
フィルタリングの有無確認
レイヤ4以上となると、ACLなどでのフィルタリングが考えられます。どこかにBGP(179/tcp)をフィルタリングしているものがないか確認します。
■CSR CSR#show ip access-lists Extended IP access list preauth_ipv4_acl (per-user) 10 permit udp any any eq domain 20 permit tcp any any eq domain 30 permit udp any eq bootps any 40 permit udp any any eq bootpc 50 permit udp any eq bootpc any 60 deny ip any any ■CSR-hub CSR-hub#show ip access-lists Extended IP access list 100 10 deny udp any any range 33434 33689 20 deny tcp any any eq bgp 30 permit ip any any (10 matches) Extended IP access list preauth_ipv4_acl (per-user) 10 permit udp any any eq domain 20 permit tcp any any eq domain 30 permit udp any eq bootps any 40 permit udp any any eq bootpc 50 permit udp any eq bootpc any 60 deny ip any any ■XRv RP/0/0/CPU0:XRv#show access-lists Sat Jan 30 05:37:15.515 UTC RP/0/0/CPU0:XRv#
いました。CSR-hubのACL100番のシーケンス番号20にBGPをフィルタリングするACEがあります。でも実際にフィルタはされていなさそうです。(※もし実際にこのACEにマッチしていれば 10 matches
のような情報があるはず)
なにか見落としがあるのでしょうか?
BGPの状態確認→問題点1, 2の修正
「設定内容の確認」で見つけたことを思い出してみましょう。そういえばここではeBGPピアリングをしようとしていたはずです。eBGPは「直接接続」が基本ですが、今回のトポロジでは間に1ホップ存在しています。これは関係しているでしょうか?show コマンドで確認してみます。
■CSR CSR#show bgp ipv4 unicast neighbors 192.0.2.2 | i External External BGP neighbor not directly connected. External BGP neighbor configured for connected checks (single-hop no-disable-connected-check) ■XRv RP/0/0/CPU0:XRv#show bgp ipv4 unicast neighbor 192.0.2.254 | include External Sat Jan 30 05:43:15.860 UTC External BGP neighbor not directly connected.
eBGPネイバなのに直接接続していないと言われていますね(問題点1)。この問題は「eBGP Multihop」の設定をすることで解消できます。(問題点1の修正)
■CSR CSR#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR(config)#router bgp 65002 CSR(config-router)#neighbor 192.0.2.2 ebgp-multihop CSR(config-router)#neighbor 192.0.2.2 ebgp-multihop ? <1-255> maximum hop count <cr> CSR(config-router)#neighbor 192.0.2.2 ebgp-multihop 2 CSR(config-router)#end CSR# *Jan 30 05:52:02.589: %SYS-5-CONFIG_I: Configured from console by console CSR#show bgp ipv4 unicast neighbors 192.0.2.2 | i External External BGP neighbor may be up to 2 hops away. External BGP neighbor NOT configured for connected checks (multi-hop no-disable-connected-check) ■XRv RP/0/0/CPU0:XRv#conf Sat Jan 30 05:49:29.145 UTC RP/0/0/CPU0:XRv(config)#router bgp 65001 RP/0/0/CPU0:XRv(config-bgp)#neighbor 192.0.2.254 RP/0/0/CPU0:XRv(config-bgp-nbr)#ebgp-multihop ? <1-255> maximum hop count mpls Disable BGP MPLS forwarding <cr> RP/0/0/CPU0:XRv(config-bgp-nbr)#ebgp-multihop 2 RP/0/0/CPU0:XRv(config-bgp-nbr)#show config Sat Jan 30 05:49:51.443 UTC Building configuration... !! IOS XR Configuration 6.1.2 router bgp 65001 neighbor 192.0.2.254 ebgp-multihop 2 ! ! end RP/0/0/CPU0:XRv(config-bgp-nbr)#commit Sat Jan 30 05:50:14.242 UTC RP/0/0/CPU0:XRv(config-bgp-nbr)#end RP/0/0/CPU0:XRv#show bgp ipv4 unicast neighbor 192.0.2.254 | include External Sat Jan 30 05:50:40.230 UTC External BGP neighbor may be up to 2 hops away.
この時点ではまだBGPネイバ確立しませんが、CSR-hubでフィルタリングされていたことを思い出してみましょう。今度はBGPのパケットがフィルタリングされていることが確認できるはずです。(問題点2)
■CSR-hub CSR-hub#show ip access-lists Extended IP access list 100 10 deny udp any any range 33434 33689 20 deny tcp any any eq bgp (12 matches) ←ここ! 30 permit ip any any (10 matches) Extended IP access list preauth_ipv4_acl (per-user) 10 permit udp any any eq domain 20 permit tcp any any eq domain 30 permit udp any eq bootps any 40 permit udp any any eq bootpc 50 permit udp any eq bootpc any 60 deny ip any any
さっきまでBGPのパケットが流れていなかったのが流れるようになり、そしてCSR-hubのフィルタリングに引っかかるようになりました。さて、設問には以下の条件がありました。
ルートマップ、ルートポリシー、アクセスリストなどの削除は認めない。ただし、必要に応じて内容を変更することは許可される。
ACLは削除できないので、内容変更することにしましょう。「削除」と言われないために、19番のACEとして「追加」する方向で対処します。(問題点2の修正)
CSR-hub#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR-hub(config)#access-list 100 ? <1-2147483647> Sequence Number deny Specify packets to reject permit Specify packets to forward remark Access list entry comment CSR-hub(config)#access-list 100 19 permit tcp any any eq bgp CSR-hub(config)#end CSR-hub# *Jan 30 05:57:14.871: %SYS-5-CONFIG_I: Configured from console by console CSR-hub#show ip access-lists Extended IP access list 100 10 deny udp any any range 33434 33689 19 permit tcp any any eq bgp (5 matches) ← 19番として追加され、BGPのパケットがこのエントリによって通過した 20 deny tcp any any eq bgp (22 matches) 30 permit ip any any (10 matches) Extended IP access list preauth_ipv4_acl (per-user) 10 permit udp any any eq domain 20 permit tcp any any eq domain 30 permit udp any eq bootps any 40 permit udp any any eq bootpc 50 permit udp any eq bootpc any 60 deny ip any any
追加することでBGPのパケットが通過できたようです。ネイバ確立したかを見てみます。
■CSR CSR#show bgp ipv4 unicast summary | b Neigh Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.0.2.2 4 65001 4 6 3 0 0 00:01:57 0 ■XRv RP/show bgp ipv4 unicast summary | begin Neighbor Sat Jan 30 05:59:49.032 UTC Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd 192.0.2.254 0 65002 6 5 5 0 0 00:02:34 0
無事ネイバ確立しました。ところがまだプレフィックスが受信できていないようです。まだ問題点があるようです。
BGPテーブルの確認
ピアにプレフィックスを広報するには少なくとも自分のBGPテーブルにプレフィックスが存在しないといけません。まずそれぞれのBGPテーブルを確認します。
■CSR CSR#show bgp ipv4 unicast | b Network Network Next Hop Metric LocPrf Weight Path *> 192.0.2.252/30 0.0.0.0 0 32768 ? *> 198.51.100.0 0.0.0.0 0 32768 ? ■XRv RP/0/0/CPU0:XRv#show bgp ipv4 unicast | b Network Sat Jan 30 06:03:48.576 UTC Network Next Hop Metric LocPrf Weight Path *> 192.168.2.2/32 0.0.0.0 0 32768 ? Processed 1 prefixes, 1 paths
この状態からすると、
- CSRは自身のプレフィックス「198.51.100.0」がBGPテーブルに存在する
- XRvは自身のプレフィックス「203.0.113.0」がBGPテーブルに存在しない(問題点3)
ということがわかります。ということは、CSRはBGPテーブルにプレフィックスが存在するにも関わらず広報していない(できていない)ということもわかります(問題点4)。
問題点3の調査→修正
XRvのBGPテーブルにプレフィックスが載っていない理由を調べましょう。まずコンフィグで経路をどのようにBGPテーブルに入れようとしているかを見てみます。Connectedを再配送で取り込もうとしているようですが、RPL(Routing Policy Language)による編集が間に入っているようですのでそちらも合わせて確認します。
RP/0/0/CPU0:XRv#show run router bgp Sat Jan 30 06:27:13.800 UTC router bgp 65001 address-family ipv4 unicast redistribute connected route-policy RPL_01 ! neighbor 192.0.2.254 remote-as 65002 ebgp-multihop 2 address-family ipv4 unicast route-policy PASS in route-policy PASS out ! ! ! RP/0/0/CPU0:XRv#show rpl Sat Jan 30 06:28:59.352 UTC prefix-set RFC1918 10.0.0.0/8 ge 8, 172.16.0.0/12 ge 12, 192.168.0.0/16 ge 16 end-set ! route-policy PASS pass end-policy ! route-policy RPL_01 if destination in RFC1918 then set community (no-export) additive endif end-policy !
RPL_01は「宛先がプレフィックスリストRFC1918にマッチする場合、no-export
コミュニティを追加する」だけなので別におかしくなさそうですが、よく考えると「再配送で取り込む経路」はRFC1918(プライベートアドレスレンジ)の経路ではありません。つまり、RPL_01のどの条件にもマッチしないので捨てられてしまい、結果としてBGPテーブルに乗らないのです(問題点3の原因)。
原因がわかったので修正が必要になりますが、設問には以下の条件がありました。
ルートマップ、ルートポリシー、アクセスリストなどの削除は認めない。ただし、必要に応じて内容を変更することは許可される。
よって、「RPL_01を削除したり、BGPテーブルへの再配送時にRPLを適用しないという手段」は使えず、RPL_01を修正するのが求められていると言えます。修正方法はいくつか考えられますが、ここでは「削除した」と判定されないように、手っ取り早く「既存の条件にマッチするもの以外は全て許可」としてしまいましょう(問題点3の修正)。なお、RPLを同名で編集すると完全に書き換えられてしまう(意図しない定義の削除が発生する)ため、元の定義をコピペする必要があります。
■意図しない定義の削除 RP/0/0/CPU0:XRv#conf Sat Jan 30 06:41:30.091 UTC RP/0/0/CPU0:XRv(config)#route-policy RPL_01 Sat Jan 30 06:41:37.670 UTC % WARNING: Policy object route-policy RPL_01' exists! Reconfiguring it via CLI will replace current definition. Use 'abort to cancel. RP/0/0/CPU0:XRv(config-rpl)#pass RP/0/0/CPU0:XRv(config-rpl)#end RP/0/0/CPU0:XRv(config)#show config Sat Jan 30 06:43:36.402 UTC Building configuration... !! IOS XR Configuration 6.1.2 ! route-policy RPL_01 pass ←RPL_01の内容が「pass(全て許可)」だけになってしまっている! end-policy ! end ■正しい対処 RP/0/0/CPU0:XRv#conf Sat Jan 30 06:45:53.613 UTC RP/0/0/CPU0:XRv(config)#route-policy RPL_01 Sat Jan 30 06:46:02.232 UTC % WARNING: Policy object route-policy RPL_01' exists! Reconfiguring it via CLI will replace current definition. Use 'abort to cancel. RP/0/0/CPU0:XRv(config-rpl)# if destination in RFC1918 then ←コピペ RP/0/0/CPU0:XRv(config-rpl-if)# set community (no-export) additive ←コピペ RP/0/0/CPU0:XRv(config-rpl-if)#else ←追加 RP/0/0/CPU0:XRv(config-rpl-else)#pass ←追加 RP/0/0/CPU0:XRv(config-rpl-else)#endif ←コピペ RP/0/0/CPU0:XRv(config-rpl)#end RP/0/0/CPU0:XRv(config)#show config Sat Jan 30 06:46:14.721 UTC Building configuration... !! IOS XR Configuration 6.1.2 ! route-policy RPL_01 if destination in RFC1918 then set community (no-export) additive else pass ←意図通り、「既存の条件にマッチするもの以外は全て許可」が追加できている endif end-policy ! end RP/0/0/CPU0:XRv(config)#commit Sat Jan 30 06:46:18.901 UTC RP/0/0/CPU0:XRv(config)#end RP/0/0/CPU0:XRv#
BGPテーブルを見てみると期待通りのプレフィックスが存在することが確認できます。
RP/0/0/CPU0:XRv#show bgp ipv4 unicast | b Network Sat Jan 30 06:48:18.813 UTC Network Next Hop Metric LocPrf Weight Path *> 192.0.2.0/30 0.0.0.0 0 32768 ? *> 192.168.2.2/32 0.0.0.0 0 32768 ? *> 203.0.113.0/24 0.0.0.0 0 32768 ? Processed 3 prefixes, 3 paths
CSRでも、XRvのLoopback10000のプレフィックスが受信できていることが確認できます。
CSR#show bgp ipv4 unicast BGP table version is 10, local router ID is 198.51.100.100 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 r> 192.0.2.0/30 192.0.2.2 0 0 65001 ? *> 192.0.2.252/30 0.0.0.0 0 32768 ? *> 198.51.100.0 0.0.0.0 0 32768 ? *> 203.0.113.0 192.0.2.2 0 0 65001 ? CSR#show bgp ipv4 unicast 203.0.113.0 BGP routing table entry for 203.0.113.0/24, version 10 Paths: (1 available, best #1, table default) Flag: 0x820 Not advertised to any peer Refresh Epoch 1 65001 192.0.2.2 from 192.0.2.2 (192.168.2.2) Origin incomplete, metric 0, localpref 100, valid, external, best rx pathid: 0, tx pathid: 0x0
問題点4の調査→修正
CSRではBGPテーブルに載っているにも関わらずプレフィックスが広報されていませんでした。当該プレフィックスがどうなっているのか確認してみましょう。
CSR#show bgp ipv4 unicast 198.51.100.0 BGP routing table entry for 198.51.100.0/24, version 4 Paths: (1 available, best #1, table default, not advertised to EBGP peer) Not advertised to any peer Refresh Epoch 1 Local 0.0.0.0 from 0.0.0.0 (198.51.100.100) Origin incomplete, metric 0, localpref 100, weight 32768, valid, sourced, best Community: no-export rx pathid: 0, tx pathid: 0x0
ちゃんとベストパスとして判断されているな…と思ったら、出力の2行目に not advertised to EBGP peer
と書かれています。CSRとXRvはeBGPピアリングしているので、このプレフィックスはXRvに広報されないプレフィックスだということになります。なんてこった!
これは、下から2行目に理由があります。そうです、no-export
コミュニティです。このコミュニティ値が付与されたプレフィックスは「自ASから外に出ていかない(外部のASに広報しない)」ことを意味するので、このままでは広報されません(問題点4の原因)。
CSR(IOS-XE)では、このようなプレフィックスの属性編集にルートマップ(route-map)を使うので、早速見てみると、それらしいのがありました。別途プレフィックスリストも参照しているようなのでそちらも合わせて確認します。
CSR#show route-map route-map MAP_01, deny, sequence 10 Match clauses: ip address prefix-lists: RFC1918 Set clauses: Policy routing matches: 0 packets, 0 bytes route-map MAP_01, permit, sequence 20 Match clauses: Set clauses: community no-export ←ここ Policy routing matches: 0 packets, 0 bytes CSR#show ip prefix-list ip prefix-list RFC1918: 3 entries seq 5 permit 10.0.0.0/8 le 32 seq 10 permit 172.16.0.0/12 le 32 seq 15 permit 192.168.0.0/16 le 32
MAP_01
というルートマップで no-export
コミュニティがセットされているようですが、その前の判定で「RFC1918(プレイベートアドレスレンジ)のIPアドレスは拒否」しており、それ以外に no-export
コミュニティ値がセットされているようです。なんか変ですね。もしかしてこれは
- RFC1918のIPアドレスはBGPテーブルに載せない
- RFC1918のIPアドレスは外部ASに広報しない
という意図があったのかもしれません。
さて、修正の方針ですが、削除と言われないようにすることを踏まえて以下のように「空のpermit条件」を設定することで、 no-export
コミュニティを設定させないようにしてみます(問題点4の修正)。
CSR#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR(config)#route-map MAP_01 permit 15 CSR(config-route-map)#end CSR# *Jan 30 07:18:03.602: %SYS-5-CONFIG_I: Configured from console by console CSR#show route-map route-map MAP_01, deny, sequence 10 Match clauses: ip address prefix-lists: RFC1918 Set clauses: Policy routing matches: 0 packets, 0 bytes route-map MAP_01, permit, sequence 15 Match clauses: Set clauses: Policy routing matches: 0 packets, 0 bytes route-map MAP_01, permit, sequence 20 Match clauses: Set clauses: community no-export Policy routing matches: 0 packets, 0 bytes
これで当該プレフィックスに no-export
コミュニティがつかなくなり、XRvに広報されるようになります。
■CSR CSR#show bgp ipv4 unicast 198.51.100.0 BGP routing table entry for 198.51.100.0/24, version 12 Paths: (1 available, best #1, table default) Advertised to update-groups: 5 Refresh Epoch 1 Local 0.0.0.0 from 0.0.0.0 (198.51.100.100) Origin incomplete, metric 0, localpref 100, weight 32768, valid, sourced, best rx pathid: 0, tx pathid: 0x0 ■XRv RP/0/0/CPU0:XRv#show bgp ipv4 unicast | b Network Sat Jan 30 07:21:51.175 UTC Network Next Hop Metric LocPrf Weight Path *> 192.0.2.0/30 0.0.0.0 0 32768 ? *> 192.0.2.252/30 192.0.2.254 0 0 65002 ? *> 192.168.2.2/32 0.0.0.0 0 32768 ? *> 198.51.100.0/24 192.0.2.254 0 0 65002 ? *> 203.0.113.0/24 0.0.0.0 0 32768 ? Processed 5 prefixes, 5 paths RP/0/0/CPU0:XRv#show bgp ipv4 unicast 198.51.100.0/24 Sat Jan 30 07:21:52.255 UTC BGP routing table entry for 198.51.100.0/24 Versions: Process bRIB/RIB SendTblVer Speaker 9 9 Last Modified: Jan 30 07:18:17.876 for 00:03:34 Paths: (1 available, best #1) Not advertised to any peer Path #1: Received by speaker 0 Not advertised to any peer 65002 192.0.2.254 from 192.0.2.254 (198.51.100.100) Origin incomplete, metric 0, localpref 100, valid, external, best, group-best Received Path ID 0, Local Path ID 0, version 9 Origin-AS validity: not-found
※内部のネットワークで使っている(プライベート)アドレスを間違ってインターネットに出さないようにするために、no-export コミュニティを設定したり、そもそもBGPテーブルに載せない、というのはありえます。ただ、このような属性編集をする場合は、意図したとおりの動作になっているかをきちんと確認する必要があります。
回答例
ということで、回答のまとめです。NETCONでは報告書として回答を提出することになっていましたので、それにならってこんな感じの回答をしてみました。なお、報告フォーマットに指定はないので、これとは違う形で報告していても減点されたりしていないはずです。
以下の通り報告します。
■問題1
事象)CSRとXRv間でのeBGPピアリングNG①
原因)直接接続ではない環境での eBGP Multihop 設定漏れ
対処)CSRおよびXRvでそれぞれ以下の通り eBGP Multihop の設定を投入
■CSR CSR#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR(config)#router bgp 65002CSR(config-router)#neighbor 192.0.2.2 ebgp-multihop 2 CSR(config-router)#end ■XRv RP/0/0/CPU0:XRv#conf Tue Feb 2 23:22:36.400 UTC RP/0/0/CPU0:XRv(config)#router bgp 65001 RP/0/0/CPU0:XRv(config-bgp)#neighbor 192.0.2.254 RP/0/0/CPU0:XRv(config-bgp-nbr)#ebgp-multihop 2 RP/0/0/CPU0:XRv(config-bgp-nbr)#show config Tue Feb 2 23:22:56.268 UTC Building configuration… !! IOS XR Configuration 6.1.2 router bgp 65001 neighbor 192.0.2.254 ebgp-multihop 2 ! ! end RP/0/0/CPU0:XRv(config-bgp-nbr)#commit Tue Feb 2 23:23:08.348 UTC RP/0/0/CPU0:XRv(config-bgp-nbr)#end RP/0/0/CPU0:XRv#show config commit list Tue Feb 2 23:23:56.004 UTC SNo. Label/ID User Line Client Time Stamp ~~ ~~~~ ~~ ~~~~ 1 1000000002 user con0_0_CPU0 CLI Tue Feb 2 23:23:08 2021 2 1000000001 CVAC UNKNOWN CLI Tue Feb 2 23:22:11 2021 RP/0/0/CPU0:XRv#show config commit change 1000000002 Tue Feb 2 23:24:25.022 UTC Building configuration… !! IOS XR Configuration 6.1.2 router bgp 65001 neighbor 192.0.2.254 ebgp-multihop 2 ! ! end
■問題2
事象)CSRとXRv間でのeBGPピアリングNG②
原因)CSR-hubのACLにてBGPパケットがフィルタされている
CSR-hub#show ip access-lists Extended IP access list 100 10 deny udp any any range 33434 33689 20 deny tcp any any eq bgp (12 matches) ←影響箇所 30 permit ip any any (10 matches)
対処)ACLでBGPパケットをフィルタしている理由が不明なため、暫定的にBGPパケットをすべて許可するエントリを追加。
■CSR-hub作業ログ CSR-hub#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR-hub(config)#access-list 100 ? <1-2147483647> Sequence Number deny Specify packets to reject permit Specify packets to forward remark Access list entry comment CSR-hub(config)#access-list 100 19 permit tcp any any eq bgp CSR-hub(config)#end CSR-hub# *Jan 30 05:57:14.871: %SYS-5-CONFIG_I: Configured from console by console CSR-hub#show ip access-lists Extended IP access list 100 10 deny udp any any range 33434 33689 19 permit tcp any any eq bgp (5 matches) ← 追加エントリ 20 deny tcp any any eq bgp (22 matches) 30 permit ip any any (10 matches)
■問題3
事象)XRvにてBGPテーブルに203.0.113.0/24のプレフィックスが存在しないため、CSRにプレフィックスが広報されていない
原因)ルートポリシー:RPL_01にて当該プレフィックスの扱いが未定義のため破棄されている
対処)暫定的に、既存のRPL_01の処理にすべてを許可するエントリを追加
RP/0/0/CPU0:XRv#conf Tue Feb 2 23:40:44.775 UTC RP/0/0/CPU0:XRv(config)#route-policy RPL_01 Tue Feb 2 23:40:51.985 UTC % WARNING: Policy object route-policy RPL_01' exists! Reconfiguring it via CLI will replace current definition. Use 'abort to cancel. RP/0/0/CPU0:XRv(config-rpl)# if destination in RFC1918 then RP/0/0/CPU0:XRv(config-rpl-if)# set community (no-export) additive RP/0/0/CPU0:XRv(config-rpl-if)#else ←追加 RP/0/0/CPU0:XRv(config-rpl-else)#pass ←追加 RP/0/0/CPU0:XRv(config-rpl-else)#endif RP/0/0/CPU0:XRv(config-rpl)#end RP/0/0/CPU0:XRv(config)#show config Tue Feb 2 23:41:11.633 UTC Building configuration... !! IOS XR Configuration 6.1.2 ! route-policy RPL_01 if destination in RFC1918 then set community (no-export) additive else pass ←追加箇所 endif end-policy ! end RP/0/0/CPU0:XRv(config)#commit Tue Feb 2 23:41:13.813 UTC RP/0/0/CPU0:XRv(config)#end RP/0/0/CPU0:XRv#show config commit list Tue Feb 2 23:41:19.823 UTC SNo. Label/ID User Line Client Time Stamp~~ ~~~~ ~~ ~~~~ 1 1000000003 user con0_0_CPU0 CLI Tue Feb 2 23:41:13 2021 2 1000000002 user con0_0_CPU0 CLI Tue Feb 2 23:23:08 2021 3 1000000001 CVAC UNKNOWN CLI Tue Feb 2 23:22:11 2021 RP/0/0/CPU0:XRv#show config commit change 1000000003 Tue Feb 2 23:41:29.372 UTC Building configuration… !! IOS XR Configuration 6.1.2 ! route-policy RPL_01 if destination in RFC1918 then set community (no-export) additive else pass endif end-policy ! end
■問題4
事象)CSRにて198.51.100.0/24のプレフィックスがXRvに広報されていない
原因)ルートマップ:MAP_01にて、当該プレフィックスに no-export コミュニティがセットされているため、
対処)ルートマップの設定意図が不明なため、暫定的に既存のMAP_01で no-export を設定する処理の前に許可エントリを追加。
CSR#conf t Enter configuration commands, one per line. End with CNTL/Z. CSR(config)#route-map MAP_01 permit 15 CSR(config-route-map)#end CSR#show route-map route-map MAP_01, deny, sequence 10 Match clauses: ip address prefix-lists: RFC1918 Set clauses: Policy routing matches: 0 packets, 0 bytes route-map MAP_01, permit, sequence 15 ←追加箇所 Match clauses: Set clauses: Policy routing matches: 0 packets, 0 bytes route-map MAP_01, permit, sequence 20 Match clauses: Set clauses: community no-export Policy routing matches: 0 packets, 0 bytes
以上、よろしくお願いします。
まとめ
上記の通り、この問題では4つの障害(設定誤り)がありました。たったルータ3台の環境でも、ちょっとした間違いだけでこれだけ問題が発生するわけですから、作製したコンフィグの事前検証はとても大事、ということがよくわかりますね。
コメント