katorea memo

いろいろ

XRでmpls vpn その1

検証環境を構築した理由はCCIE SPの勉強をするためなので、
ルーティング周りを勉強し始めることとする。

XRは触ったことがほぼないので、XRでのコマンドを意識して単純なMPLS VPN網を構築してみる。

構成
f:id:gemunopedy:20170422143512p:plain

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だとかなりエラーにぶちあたる。
慣れるのにだいぶ時間がかかりそう。