XRでmpls vpn その1
検証環境を構築した理由はCCIE SPの勉強をするためなので、
ルーティング周りを勉強し始めることとする。
XRは触ったことがほぼないので、XRでのコマンドを意識して単純なMPLS VPN網を構築してみる。
構成
CE-PE間はbgp。
CE側は単純なbgp configなので割愛。
PEルータのXR2の設定を行う。
まずは、vrfを作成。
vrf USER1 address-family ipv4 unicast import route-target 1:1 ! export route-target 1:1 !
address-family配下にroute-targetを設定するところがIOSと異なる。
続いてbgp設定。
gobgpのpeer設定の時に、XRはaddress-familyの設定が必要と学んだので、以下のconfigを投入。
RP/0/0/CPU0:XR2(config-bgp-vrf)#sh configuration router bgp 65200 address-family ipv4 unicast ! vrf USER1 address-family ipv4 unicast !
そしてcommit。
エラー
show configuration failedを実行すると
router bgp 65200 vrf USER1 address-family ipv4 unicast !!% 'BGP' detected the 'warning' condition 'The RD for the VRF must be present before an address family is activated'
とのこと。
XRだとRDはbgp配下で設定するのか。
rdの設定を追加。
RP/0/0/CPU0:XR2(config-bgp-vrf)#sh configuration router bgp 65200 address-family ipv4 unicast ! vrf USER1 rd auto address-family ipv4 unicast !
よし、commit。
エラー。
router bgp 65200 vrf USER1 rd auto !!% 'BGP' detected the 'warning' condition 'BGP router ID must be configured.' !
………
次のconfig
RP/0/0/CPU0:XR2(config-bgp)#sh configuration router bgp 65200 bgp router-id 2.2.2.2 address-family ipv4 unicast ! vrf USER1 rd auto address-family ipv4 unicast !
commit。
エラー。
router bgp 65200 vrf USER1 address-family ipv4 unicast !!% 'BGP' detected the 'warning' condition 'The parent address family has not been initialized' !
このエラーを解消すのがめちゃくちゃ時間がかかった。
いや、address-family設定してるじゃんと思いつつ、router直下とvrf直下のaddress-familyを同時に設定してはいけないのかと思い、router 直下のaddress-familyをcommitした後、vrf直下のaddress-familyをcommitしようとすると、同じエラーメッセージ。
debug ip bgp allで表示されるメッセージもgobgpの時とほぼ同じような感じ。
unetlabとxrvとのversion相性問題なんじゃないかと思い、xrvの違うバージョンを使ってみたけど結果は同じ。
「The parent address family has not been initialized」とか「xr vrf bgp」とかでぐぐってでてきたページをひたすら調べたけどよくわからず。
再起動して何回もconfig入れてcommitして同じエラーが出た。
アインシュタイン曰く「同じことを繰り返しながら違う結果を望むこと、それを狂気という。」
シスコドキュメントのコンフィグをコピペしてcommitしたとろ何故か通った。
アドレスや、RT、RDこそ違えどこんな短いコンフィグで差異なんかないぞ、と思いつつよくよく見てみると、
一か所違うコンフィグが存在した。
RP/0/0/CPU0:XR2(config-bgp)#sh configuration router bgp 65200 bgp router-id 2.2.2.2 address-family ipv4 unicast ! address-family vpnv4 unicast ! vrf USER1 rd auto address-family ipv4 unicast !
address-family vpnv4 unicastの設定が必要だったらしい。
まずは、MPLS網のIGPを構築。
今回は、bgp route-reflectを使用する。
これまでの勉強時にはosfpで構築していてけど、この後検証予定のinter-AS option c でrouter-reflectが出てくるので、
この段階で構築してしまおうと。
そしてここでも嵌る。
最初以下コンフィグだった。
XR2 ※関係あるところだけ
router bgp 65200 bgp router-id 2.2.2.2 address-family ipv4 unicast network 2.2.2.2/32 ! address-family vpnv4 unicast ! neighbor 10.0.23.3 remote-as 65200 address-family ipv4 unicast
RR3
router bgp 65200 bgp router-id 3.3.3.3 address-family ipv4 unicast ! neighbor 10.0.23.2 remote-as 65200 address-family ipv4 unicast route-reflector-client ! ! neighbor 10.0.34.4 remote-as 65200 address-family ipv4 unicast route-reflector-client !
XR4はXR2と対象なので割愛。
これでXR4から4.4.4.4/32が広告されてXR2のshow routeに表示されると思っていたが、表示されない。
RP/0/0/CPU0:XR2#show bgp summary Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd 10.0.23.3 0 65200 84 84 6 0 0 00:34:15 1
プレフィックスは受信してるみたい。
show bgp neighbors 10.0.23.3 received routesで受信経路を確認しようとしたところこんなエラーがでた。
% The 'show bgp neighbor received routes' command is only available when inbound soft reconfiguration is active. To activate inbound soft reconfiguration, use the 'soft-reconfiguration inbound' command. If the neighbor supports route-refresh, the 'always' option to the command must also be specified.
あー忘れてた忘れた。
ということで"soft-reconfiguration inbound"を投入して、再度received routesを確認しようとしたところ、同じエラーが出た。
config入れたのに何故だ、とこれも無駄に悩んでしまった。最後まで読むと'always'とかある。
改めて"soft-reconfiguration inbound always"を投入して無事確認することができた。
RP/0/0/CPU0:XR2#show bgp neighbors 10.0.23.3 received routes Network Next Hop Metric LocPrf Weight Path * i4.4.4.4/32 10.0.34.4 0 100 0 i Processed 1 prefixes, 1 paths
ちゃんと受信はできているみたい。原因はnexthopへの到達がないせいか。
next-hop-selfだなということで以下。
RP/0/0/CPU0:RR3(config-bgp-nbr-af)#sh configuration Sat Apr 22 07:54:06.299 UTC Building configuration... !! IOS XR Configuration 5.2.2 router bgp 65200 neighbor 10.0.23.2 address-family ipv4 unicast next-hop-self ! ! neighbor 10.0.34.4 address-family ipv4 unicast next-hop-self !
これで行くだろうと思ったけど、いかなかった。
next hopが変わらない。
いろいろ調べたら見つけた。
Cisco IOS IP ルーティング:BGP コンフィギュ レーション ガイド - BGP ネクストホップ伝播 [Cisco IOS 15.1M&T] - Cisco
この機能がルート リフレクタ クライアントに対してイネーブルにされているときは、 neighbor next-hop-self コマンドを使用してルートリフレクタのネクストホップ アトリビュートを変更しないでください。
なるほど。
じゃあこの方法だろということで、
以下に設定変更。
route-policy nexthop set next-hop self end-policy ! router bgp 65200 bgp router-id 3.3.3.3 address-family ipv4 unicast network 3.3.3.3/32 ! neighbor 10.0.23.2 remote-as 65200 address-family ipv4 unicast route-reflector-client route-policy nexthop out ! ! neighbor 10.0.34.4 remote-as 65200 address-family ipv4 unicast route-reflector-client route-policy nexthop out !
これでいける思ったけど、これでもnexthopが変わらず。
ここでも結構時間を使った。
そしてようやく見つけた。
IOS-XR: ibgp policy out enforce-modifications コマンドについて | ハイエンド ルータ | Cisco Support Community
最終的なRR3のIGPとしてbgpコンフィグは以下。
router bgp 65200 bgp router-id 3.3.3.3 ibgp policy out enforce-modifications address-family ipv4 unicast network 3.3.3.3/32 ! neighbor 10.0.23.2 remote-as 65200 address-family ipv4 unicast route-reflector-client next-hop-self ! ! neighbor 10.0.34.4 remote-as 65200 address-family ipv4 unicast route-reflector-client next-hop-self !
これでようやくMPLS網にPEルータのloアドレスを学習させることができた。
RP/0/0/CPU0:XR2#show route bgp B 3.3.3.3/32 [200/0] via 10.0.23.3, 00:03:41 B 4.4.4.4/32 [200/0] via 10.0.23.3, 00:03:18
今日はここまで。
またしても疲れた。
IOSの時はさくっとできたことがXRだとかなりエラーにぶちあたる。
慣れるのにだいぶ時間がかかりそう。