katorea memo

いろいろ

Inter-AS Option C

いよいよInter-AS Option Cの構築。
Option Cに関しては最初configの意味することが全く理解できなかった。
理解するのにだいぶ時間がかかってしまった。といっても完全にはまだ理解できていないけど。

OptionCの特徴は以下の通り。
・ASBR間はeBGP IPv4 + Labels でend-endのLSPを構築
・VPNv4情報はルートリフレクター間で交換

Option Cは他のOptionと比べて最も拡張性が高い(VPNv4情報はRRに集約されるので)が、最もinvasaiveとのこと。対向MPLS網に対してRRやPEのアドレスを広告しなくてはならないため。

まずはIOSで挙動の確認。
構成は以下。
f:id:gemunopedy:20170514194125p:plain

まずはASBRのconfigから理解する。
R3(ASBR)config

!
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.34.3 255.255.255.0
 mpls bgp forwarding
!
interface Ethernet0/1
 ip address 192.168.23.3 255.255.255.0
 mpls ip
!
interface Ethernet0/2
 no ip address
 shutdown
!
interface Ethernet0/3
 no ip address
 shutdown
!
router ospf 1
 redistribute bgp 1 subnets ※2
 network 3.3.3.3 0.0.0.0 area 0
 network 192.168.23.0 0.0.0.255 area 0
!
router bgp 1
 bgp router-id 3.3.3.3
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 192.168.34.4 remote-as 2
 !
 address-family ipv4
  network 2.2.2.2 mask 255.255.255.255 ※1
  network 7.7.7.7 mask 255.255.255.255 ※1
  neighbor 192.168.34.4 activate
  neighbor 192.168.34.4 send-label ※3
 exit-address-family
 !
!

特徴的なところは赤文字にした。
MPLS-VPN Inter-AS Option Cを構築させるためには大きく2stepあり、
まずは、end-endでLSPを確立させること。
そしてPE間でVPNv4情報を交換させる。

ということでまずはLSP。

LSPを構築するすために必要なlo0アドレスを接続MPLS網に広告する。
※1のnetworkコンフィグでPEとRRのアドレスを広告する。ebgp peer相手のR4も同様のコンフィグとなるため、
R3はR5とRR8のlo0アドレスを受信し、それを※2のospfへのredistributeでR2はR5のアドレスを学習し、RR7はRR8のアドレスを学習する。

続いて※3のsend-labelだがこのコマンドはbgpでMPLS識別ラベルを送信することができる。
仮にこのコマンドがない状態だとR2のLFIBは以下の通り、R5に対するoutおラベル情報がない。

R3#show mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  2.2.2.2/32       0             Et0/1      192.168.23.2
17         No Label   5.5.5.5/32       0             Et0/0      192.168.34.4
18         No Label   8.8.8.8/32       774           Et0/0      192.168.34.4
19         No Label   192.168.34.4/32  0             Et0/0      192.168.34.4
20         Pop Label  7.7.7.7/32       0             Et0/1      192.168.23.7

ASBR間でsend-labelを設定すると以下のようなBGPパケットをお互いに送信する。
f:id:gemunopedy:20170514210321p:plain

PATH AttributeのMP_REACH_NLRI(14)を使用して、SAFI(4)のLabeled Unicast情報を伝える。
ここではR4から5.5.5.5/32のLabel Stackを21として受け取ったので、この時点でLFIBに反映される。

R3#sho mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  2.2.2.2/32       0             Et0/1      192.168.23.2
17         21         5.5.5.5/32       0             Et0/0      192.168.34.4
18         20         8.8.8.8/32       0             Et0/0      192.168.34.4
19         Pop Label  192.168.34.4/32  0             Et0/0      192.168.34.4

これでLSPは完了。
続いてVPNv4周り。

Option CではRR同士でaddress-family vpnv4 unicastのebgp接続を行う。
RR7 config

interface Loopback0
 ip address 7.7.7.7 255.255.255.255
!
interface Ethernet0/1
 ip address 192.168.23.7 255.255.255.0
 mpls ip
!
router ospf 1
 network 7.7.7.7 0.0.0.0 area 0
 network 192.168.23.0 0.0.0.255 area 0
!
router bgp 1
 bgp router-id 7.7.7.7
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 2.2.2.2 remote-as 1
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 8.8.8.8 remote-as 2
 neighbor 8.8.8.8 ebgp-multihop 255
 neighbor 8.8.8.8 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 2.2.2.2 activate
  neighbor 2.2.2.2 send-community extended
  neighbor 2.2.2.2 route-reflector-client
  neighbor 8.8.8.8 activate
  neighbor 8.8.8.8 send-community extended
  neighbor 8.8.8.8 next-hop-unchanged
 exit-address-family

ルートリフレクタはaddress-family vpnv4でPEと対抗RRとpeerを張る。
同MPLS網のPEルータはRRとpeerを張ることでVPNv4情報をRRに集約し、対向のRRに情報を広告する構成となっている。
対向RRとpeerを張るときはnext-hop-uncangedを設定する。
設定した場合は、以下のようにR6宛のnexthopはR5となるが、

R2#show bgp vpnv4 unicast all

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:1 (default for vrf USER1)
 *>  1.1.1.1/32       192.168.12.1             0             0 3 i
 *>i 6.6.6.6/32       5.5.5.5                  0    100      0 2 4 i

設定しない場合は、RR8がnexthopとなってしまい、ルートリフレクタを経由した通信となってしまう。

R2#show bgp vpnv4 unicast all

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:1 (default for vrf USER1)
 *>  1.1.1.1/32       192.168.12.1             0             0 3 i
 *>i 6.6.6.6/32       8.8.8.8                  0    100      0 2 4 i

tracerouteもこんな感じ

R1#traceroute 6.6.6.6 so 1.1.1.1
Type escape sequence to abort.
Tracing the route to 6.6.6.6
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.12.2 4 msec 1 msec 1 msec
  2 192.168.23.3 [MPLS: Labels 18/19 Exp 0] 4 msec 2 msec 2 msec
  3 192.168.34.4 [MPLS: Labels 20/19 Exp 0] 2 msec 3 msec 1 msec
  4 192.168.45.8 [MPLS: Label 19 Exp 0] 2 msec 3 msec 3 msec
  5 192.168.56.5 [MPLS: Label 21 Exp 0] 2 msec 3 msec 5 msec
  6 192.168.56.6 2 msec 9 msec *

正しい設定の場合は以下の通りRR分のhop数が少ない。

R1#traceroute 6.6.6.6 so 1.1.1.1
Type escape sequence to abort.
Tracing the route to 6.6.6.6
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.12.2 0 msec 0 msec 1 msec
  2 192.168.23.3 [MPLS: Labels 17/21 Exp 0] 3 msec 2 msec 2 msec
  3 192.168.34.4 [MPLS: Labels 21/21 Exp 0] 1 msec 2 msec 2 msec
  4 192.168.56.5 [MPLS: Label 21 Exp 0] 1 msec 2 msec 1 msec
  5 192.168.56.6 3 msec 2 msec *

これでIOSでのInter-AS Option Cの確認は完了。
続いてXRでの確認。
構成は下図の通り。
f:id:gemunopedy:20170515215323p:plain

本来ならIOSと同様に間にSWをかました構成で比較するのがベストだけど、
ちょっと面倒くさかったので、前回の構成のままで確認することに。
アドレス帯は修正した。
#XRの再起動時間が長すぎて再起動したくない。。

XR4(ASBR)のconfig

hostname XR4
interface Loopback0
 ipv4 address 4.4.4.4 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
 shutdown
!
interface GigabitEthernet0/0/0/0
 ipv4 address 192.168.48.4 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 shutdown
!
interface GigabitEthernet0/0/0/2
 ipv4 address 192.168.34.4 255.255.255.0
!
route-policy pass
  pass
end-policy
!
router static
 address-family ipv4 unicast
  192.168.48.8/32 GigabitEthernet0/0/0/0
 !
!
router ospf 1
 redistribute bgp 65200
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/2
  !
 !
!
router bgp 65200
 bgp router-id 4.4.4.4
 mpls activate
  interface GigabitEthernet0/0/0/0
 !
 address-family ipv4 unicast
  network 2.2.2.2/32
  network 3.3.3.3/32
  allocate-label all
 !
 neighbor 192.168.48.8
  remote-as 65300
  address-family ipv4 labeled-unicast
   route-policy pass in
   route-policy pass out
  !
 !
!
mpls ldp
 interface GigabitEthernet0/0/0/2
 !
!
end

IOSと異なる点は赤文字となる。
IOSでのsend-labelにあたる部分は、address-family ipv4 labeled-unicast配下でpeerを張り、アドバタイズするprefixをallocate-labelで設定する形となる。

まだroute-policyが必須ということに慣れておらず、address-family ipv4 labeled-unicast配下に設定を忘れて、TSに無駄に時間をかけてしまった。

RR3のconfig

hostname RR3
interface Loopback0
 ipv4 address 3.3.3.3 255.255.255.255
!
interface MgmtEth0/0/CPU0/0
 shutdown
!
interface GigabitEthernet0/0/0/0
 ipv4 address 192.168.23.3 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 shutdown
!
interface GigabitEthernet0/0/0/2
 ipv4 address 192.168.34.3 255.255.255.0
!
route-policy pass
  pass
end-policy
!
router ospf 1
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
  !
  interface GigabitEthernet0/0/0/2
  !
 !
!
router bgp 65200
 bgp router-id 3.3.3.3
 address-family ipv4 unicast
 !
 address-family vpnv4 unicast
 !
 neighbor 2.2.2.2
  remote-as 65200
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor 7.7.7.7
  remote-as 65300
  ebgp-multihop 255
  update-source Loopback0
  address-family vpnv4 unicast
   route-policy pass in
   route-policy pass out
   next-hop-unchanged
  !
 !
!
mpls ldp
 interface GigabitEthernet0/0/0/0
 !
 interface GigabitEthernet0/0/0/2
 !
!
end

こちらはほぼIOSと同等のconfig内容。
IOSが理解できていれば問題なく設定できる。

tracerouteはこんな感じ。

CSR1#traceroute 9.9.9.9 so 1.1.1.1
Type escape sequence to abort.
Tracing the route to 9.9.9.9
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.12.2 15 msec 5 msec 4 msec
  2 192.168.23.3 [MPLS: Labels 24003/24005 Exp 0] 50 msec 46 msec 31 msec
  3 192.168.34.4 [MPLS: Labels 24002/24005 Exp 0] 52 msec 38 msec 31 msec
  4 192.168.48.8 [MPLS: Labels 24000/24005 Exp 0] 48 msec 35 msec 41 msec
  5 192.168.78.7 [MPLS: Labels 24000/24005 Exp 0] 60 msec 33 msec 30 msec
  6 192.168.67.6 [MPLS: Label 24005 Exp 0] 47 msec 30 msec 30 msec
  7 192.168.69.9 38 msec 44 msec *

次回はInter-AS最終回 Option D(AB)。