katorea memo

いろいろ

XRでmpls vpn その2

今回こそはMPLS VPN網を構築する。

改めてNW構成図
f:id:gemunopedy:20170422143512p:plain

CSR1 config #CEルータ

interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface GigabitEthernet1
 ip address 192.168.12.1 255.255.255.0
!
!
router bgp 65100
 bgp log-neighbor-changes
 neighbor 192.168.12.2 remote-as 65200
 !
 address-family ipv4
  network 1.1.1.1 mask 255.255.255.255
  neighbor 192.168.12.2 activate
 exit-address-family
!

CE-PE間はbgpでルーティング。
疎通確認はCSR1のlo(1.1.1.1)とCSR5のlo(5.5.5.5)間で実施。なので1.1.1.1/32を広告する。

XR2 config #PEルータ

interface Loopback0
 ipv4 address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.0.23.2 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 vrf USER1
 ipv4 address 192.168.12.2 255.255.255.0
!
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 4.4.4.4
  remote-as 65200
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 neighbor 10.0.23.3
  remote-as 65200
  address-family ipv4 unicast
   soft-reconfiguration inbound always
  !
 !
 vrf USER1
  rd auto
  address-family ipv4 unicast
  !
  neighbor 192.168.12.1
   remote-as 65100
   address-family ipv4 unicast
    as-override
    soft-reconfiguration inbound always
   !
  !
 !
!
mpls ldp
 interface GigabitEthernet0/0/0/0
 !

まずはCE-PE間ルーティングが正しく行われているか確認してみると、
ルーティングテーブルに1.1.1.1/32が登録されていない。

RP/0/0/CPU0:XR2#show bgp vrf USER1
Sat Apr 22 07:44:16.988 UTC

CSR1はちゃんとアドバタイズしているみたい。

CSR1#sh ip bgp neighbors 192.168.12.2 advertised-routes

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.1.1.1/32       0.0.0.0                  0         32768 i

Total number of prefixes 1

XR2側では受信しているがベストパスに選択されていないみたい。だからルーティングテーブルに登録されないのか。
何故、ベストパスに選択されていないかは不明だけど。

RP/0/0/CPU0:XR2#sh bgp vrf USER1 neighbors 192.168.12.1 received routes

   Network            Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 2.2.2.2:1 (default for vrf USER1)
*  1.1.1.1/32         192.168.12.1             0             0 65100 i

Processed 1 prefixes, 1 paths

おかしい。R&Sの勉強してたときは、さくっとPE-CE間のルーティング設定ができたのに。
まずは切り分け。

1. CE(CSR)→ PE(CSR+vrf)へのbgpアドバタイズ
これは問題なかった。ちゃんとshow route vrf USER1でbgpのルートが登録されていた。
まぁそりゃそうだ。

2. CE(CSR)→ PE(XR)へのbgpアドバタイズ
XRのaddress-family vrf配下に何か設定が必要なのかもしれないということで、
PE側はvrfを設定せずに、純粋なbgp設定を行う。

結果、vrf有り時と同じ結果となった。
これは、vrf関係なく何か設定が必要みたい。
待てよ、そもそもXR同士の単純なbgp設定でちゃんとbgpルート学習するのか?

3. CE(XR)→ PE(XR)へのbgpアドバタイズ
これを実施して衝撃の事実発覚。
アドバタイズしたloアドレスがPE側で学習できていないではないか。
PE側でreceived routesを確認すると、受信していない。
というかCE側でadvertised-routesを確認するとアドバタイズすらしていないではないか。
もうどういうことこれ?
2の結果より状況悪化しているし。

そういえばMPLS VPN網のXR2とXR4間はお互いloアドレスが交換できているんだよな。
違いといえばibgpかebgpかだよなー。






…もしかしてXRってebgpのときデフォルトで経路をdenyする仕組みとかなんじゃないの?と思い始めいろいろ調べてみると、
Implementing BGP on Cisco IOS XR Software - Cisco

Routing Policy Enforcement
External BGP (eBGP) neighbors must have an inbound and outbound policy configured. If no policy is configured, no routes are accepted from the neighbor, nor are any routes advertised to it. This added security measure ensures that routes cannot accidentally be accepted or advertised in the case of a configuration omission error.

うわーなんかめっちゃ書いてあるよ。
ということで、さっそくXR2を以下を設定追加。

RP/0/0/CPU0:XR2(config-bgp-vrf-nbr-af)#sh configuration
!
route-policy pass
  pass
end-policy
!
router bgp 65200
 neighbor 192.168.12.1
 !
 vrf USER1
  address-family ipv4 unicast
  !
  neighbor 192.168.12.1
   address-family ipv4 unicast
    route-policy pass in
   !

ルーティングテーブルを確認してみると

RP/0/0/CPU0:XR2#sh route vrf USER1

Gateway of last resort is not set

B    1.1.1.1/32 [20/0] via 192.168.12.1, 00:00:03
C    192.168.12.0/24 is directly connected, 20:20:03, GigabitEthernet0/0/0/1
L    192.168.12.2/32 is directly connected, 20:20:03, GigabitEthernet0/0/0/1

うわーやっときたよ。
これ解決するのもまたしてもめっちゃ時間がかかった。
なんか全ての障害に一個ずつぶち当たっている感じ。
これも最初からドキュメント読んでいれば問題なかった話だけど、どうも最初からドキュメントを読む気にはなれない。
トラシューしている最中だと普通に頭入ってくるんだけどね。

ただ最終的には膨大なドキュメントを全て理解するぐらいじゃないといけないし、SPはかなり遠い。

流石にその2で構築完了して、次はInter-AS option Aでもやろうかなと思ってたけど、
MPLS VPN網の構築は次回も続く。