今回はBGPを使用してAS間でPrefix SIDをやり取りする方法を説明したいと思います。
概要
BGPを使用したPrefix SIDのやり取り
BGPではIPv4、または、IPv6のルート情報と一緒に従来のMPLSで使用されるLabelもやり取りすることが可能で、この機能をBGP-LU(BGP Labeled Unicast)と呼びます。
BGP-LUにおいて、ルート情報とLabelは以下のMP_REACH_NLRI(Multiprotocol Reachable Network Layer Reachability Information)パスアトリビュートに格納され、SAFIには4が使用されます。(以前はSAFIには128が使用されていました。)

異なるASのPEルータ間でLSPを構築する際に、BGP-LUは使用されます。BGP-LUを使用して、自AS内のPEルータのIPアドレスとLabelを他ASに広報することで、異なるASにまたがるLSPを構成可能です。

Segment Routingでも、BGP-LUを使用して、自AS内のPEルータのIPアドレスとPrefix SIDを他ASに広報し、異なるASのPEルータ間でLSPを構築可能です。
では、下図のような、SRが有効なAS 100とAS 200間でBGP-LUを動作させ、AS 100のR1からAS 200のR6へのLSPを構築する過程を見ていきます。

まず、各AS内でPEルータとASBRのLoopback Interfaceのアドレスに対してPrefix SIDを割り当てます。そして、OSPF、または、IS-ISを使用して、AS内に広報します。

次に、PEルータからASBRに対してBGPでLoopback Interfaceのルート情報を広報します。
MP_REACH_NLRIパスアトリビュートのLabelにはPrefix SIDのIndexではなく、Explicit Nullを示す3が格納されます。

Prefix SIDのIndexは以下のBGP Prefix-SIDパスアトリビュートに格納され広報されます。

ASBRは以下を加算した値をMP_REACH_NLRIパスアトリビュートのLabelに格納して、他ASに広報します。
- BGP Prefix-SIDパスアトリビュート内のPrefix SIDのIndex
- 自身のSRGBの先頭のSID

他ASからBGP-LU経由でルート情報を学習したASBRは、以下を加算した値をMP_REACH_NLRIパスアトリビュートのLabelに格納して、AS内に広報します。
- BGP Prefix-SIDパスアトリビュート内のPrefix SIDのIndex
- 自身のSRGBの先頭のSID

上記の処理によって、以下のようなLFIB、FIBが構成されます。
ここで、AS 100のR2はAS 200の6.6.6.6/32を学習していないため、R2はPrefix SID 20601が付加されたパケットを受信した際、パケットを破棄してしまいます。そのため、R1は6.6.6.6/32宛のパケットにPrefix SID 20601を付加した後、6.6.6.6/32のNext Hopである3.3.3.3に対応するPrefix SID 20301を追加で付加します。
R2はAS内で動作しているOSPFやIS-IS経由でPrefix SID 20301を学習しているため、Prefix SID 20301が付加されたパケットを受信した際、正しく転送可能です。

この結果、AS 100のR1からAS 200のR6へのLSPが構築され、正しく通信可能です。

検証の基本設定
基本設定の内容
R1~R3をAS 100、R4~R6をAS 200に所属させます。
R1-R2-R3間でOSPF Area 0を構成し、OSPFでSRを有効にします。
R1-R3間でIBGPネイバーを構成し、IPv4 Labeled Unicastを有効にします。
R4-R5-R6間でOSPF Area 0を構成し、OSPFでSRを有効にします。
R4-R6間でIBGPネイバーを構成し、IPv4 Labeled Unicastを有効にします。
R3-R4間でEBGPネイバーを構成し、IPv4 Labeled Unicastを有効にします。
R3でLoopback Interfaceの3.3.3.3/32にPrefix SIDとして20301を割り当てます。
R6でLoopback Interfaceの6.6.6.6/32にPrefix SIDとして20601を割り当てます。
BGPにより、AS 200のPrefix SIDの情報がAS 100に広報され、R1からR6へ通信可能か確認します。

初期設定
interface Loopback0
 ipv4 address 1.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.1 255.255.255.0
!
router ospf 1
 router-id 1.1.1.1
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
router bgp 100
 bgp router-id 1.1.1.1
 bgp unsafe-ebgp-policy
 address-family ipv4 unicast
  allocate-label all
 !
 neighbor 3.3.3.3
  remote-as 100
  update-source Loopback0
  address-family ipv4 labeled-unicast
  !
 !
!
segment-routing
 global-block 16000 23999
            
interface Loopback0
 ipv4 address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.2 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 ipv4 address 10.2.2.2 255.255.255.0
!
router ospf 1
 router-id 2.2.2.2
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
            
interface Loopback0
 ipv4 address 3.3.3.3 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.2.2.3 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 ipv4 address 172.16.1.3 255.255.255.0
!
router static
 address-family ipv4 unicast
  172.16.1.4/32 GigabitEthernet0/0/0/1
 !
!
router ospf 1
 router-id 3.3.3.3
 segment-routing mpls
 area 0
  interface Loopback0
   prefix-sid absolute 20301
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
router bgp 100
 bgp router-id 3.3.3.3
 bgp unsafe-ebgp-policy
 address-family ipv4 unicast
  allocate-label all
 !
 neighbor 1.1.1.1
  remote-as 100
  update-source Loopback0
  address-family ipv4 labeled-unicast
   next-hop-self
  !
 !
 neighbor 172.16.1.4
  remote-as 200
  address-family ipv4 labeled-unicast
  !
 !
!
segment-routing
 global-block 16000 23999
            
interface Loopback0
 ipv4 address 4.4.4.4 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 172.16.1.4 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 ipv4 address 20.1.1.4 255.255.255.0
!
router ospf 1
 router-id 4.4.4.4
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
  !
 !
!
router bgp 200
 bgp router-id 4.4.4.4
 bgp unsafe-ebgp-policy
 address-family ipv4 unicast
  allocate-label all
 !
 neighbor 6.6.6.6
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
  !
 !
 neighbor 172.16.1.3
  remote-as 100
  address-family ipv4 labeled-unicast
  !
 !
!
segment-routing
 global-block 16000 23999
            
interface Loopback0
 ipv4 address 5.5.5.5 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 20.1.1.5 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 ipv4 address 20.2.2.5 255.255.255.0
!
router ospf 1
 router-id 5.5.5.5
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
            
interface Loopback0
 ipv4 address 6.6.6.6 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 20.2.2.6 255.255.255.0
!
route-policy BGP_PREFIX_SID_POLICY($SID)
  set label-index $SID
end-policy
!
router ospf 1
 router-id 6.6.6.6
 segment-routing mpls
 area 0
  interface Loopback0
   prefix-sid absolute 20601
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
router bgp 200
 bgp router-id 6.6.6.6
 address-family ipv4 unicast
  network 6.6.6.6/32 route-policy BGP_PREFIX_SID_POLICY(4601)
  allocate-label all
 !
 neighbor 4.4.4.4
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
  !
 !
!
segment-routing
 global-block 16000 23999
            
設定と状態の確認
BGPの設定の確認
特定のBGPネイバーに対して、IPv4 Labeled Unicastを有効にするにはaddress-family ipv4 labeled-unicastコマンドを設定する必要があります。
次に、ルート情報をBGPプロセスに投入する際にPrefix SIDを付加するルータでは、Route Policyを定義します。Route Policyにおいて、Prefix-SIDを付加するアクションはset label-indexコマンドになります。
そして、BGPのIPv4 AFでallocate-labelコマンドを設定し、IPv4のルート情報に対するPrefix SIDの付加を有効にします。
最後にnetworkコマンドでルート情報をBGPプロセスに投入する際、route-policyオプションでPrefix SIDを付加するためのRoute Policyを指定します。
ここで、1点注意事項として、ルート情報に対しては、Prefix SIDのIndexを付加します。Absolute Valueではありません。
route-policy BGP_PREFIX_SID_POLICY($SID)
  set label-index $SID
end-policy
!
router bgp 200
 bgp router-id 6.6.6.6
 address-family ipv4 unicast
  network 6.6.6.6/32 route-policy BGP_PREFIX_SID_POLICY(4601)
  allocate-label all
 !
 neighbor 4.4.4.4
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
            
BGPプロセスにPrefix SID付きのルート情報を投入しないルータはaddress-family ipv4 labeled-unicastコマンドとallocate-labelコマンドを設定するのみです。
router bgp 200
 bgp router-id 4.4.4.4
 bgp unsafe-ebgp-policy
 address-family ipv4 unicast
  allocate-label all
 !
 neighbor 6.6.6.6
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
  !
 !
 neighbor 172.16.1.3
  remote-as 100
  address-family ipv4 labeled-unicast
            
SRの設定の確認
IOS-XRの仕様上、BGPでPrefix SID付きのルート情報をやり取りするルータでは、SRGBを明示的に設定する必要があります。
segment-routing
 global-block 16000 23999
            
BGPネイバーの状態確認
R6のBGPネイバーの状態を見ると、IPv4 Labeled Unicastが有効なことが確認できます。
RP/0/RP0/CPU0:R6#show bgp neighbor
BGP neighbor is 4.4.4.4
 Remote AS 200, local AS 200, internal link
 Remote router ID 4.4.4.4
  BGP state = Established, up for 00:05:47
  NSR State: None
  Last read 00:00:42, Last read before reset 00:06:20
  Hold time is 180, keepalive interval is 60 seconds
  Configured hold time: 180, keepalive: 60, min acceptable hold time: 3
  Last write 00:00:42, attempted 19, written 19
  Second last write 00:01:42, attempted 19, written 19
  Last write before reset 00:06:20, attempted 19, written 19
  Second last write before reset 00:07:20, attempted 107, written 107
  Last write pulse rcvd  Jun 18 20:56:47.826 last full not set pulse count 151
  Last write pulse rcvd before reset 00:06:20
  Socket not armed for io, armed for read, armed for write
  Last write thread event before reset 00:06:20, second last 00:06:20
  Last KA expiry before reset 00:06:20, second last 00:00:00
  Last KA error before reset 00:00:00, KA not sent 00:00:00
  Last KA start before reset 00:06:20, second last 00:07:20
  Precedence: internet
  Non-stop routing is enabled
  Multi-protocol capability received
  Neighbor capabilities:
    Route refresh: advertised (old + new) and received (old + new)
    4-byte AS: advertised and received
    Address family IPv4 Labeled-unicast: advertised and received
  Received 74 messages, 0 notifications, 0 in queue
  Sent 85 messages, 2 notifications, 0 in queue
  Minimum time between advertisement runs is 0 secs
  Inbound message logging enabled, 3 messages buffered
  Outbound message logging enabled, 3 messages buffered
  .
  <一部省略>
            
以下はR6がR4に送信したBGPのOPENメッセージのキャプチャになります。Labeled Unicast用のSAFIが4であることが確認できます。

BGPテーブルの確認
R6のBGPテーブル内の6.6.6.6/32を確認すると、Prefix SIDのIndexである4601を格納したExtended Communityが付加されていることが確認できます。また、ルート情報に付加されたLabelはImplicit Nullを示す3であることが確認できます。
RP/0/RP0/CPU0:R6#show bgp 6.6.6.6/32
BGP routing table entry for 6.6.6.6/32
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                  7           7
    Local Label: 3
Last Modified: Jun 18 20:44:13.299 for 00:21:01
Paths: (1 available, best #1)
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    4.4.4.4
  Path #1: Received by speaker 0
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    4.4.4.4
  Local
    0.0.0.0 from 0.0.0.0 (6.6.6.6)
      Origin IGP, metric 0, localpref 100, weight 32768, valid, local, best, group-best
      Received Path ID 0, Local Path ID 1, version 7
      Label-Index: 4601
            
R6はBGP-LUを使用して、R4に6.6.6.6/32を広報します。

以下がR6がR4に送信したBGPのUPDATEメッセージのキャプチャになります。MP_REACH_NLRIパスアトリビュートには6.6.6.6/32と一緒にLabel 3(Explicit Null)が格納されていることが確認できます。また、BGP Prefix-SIDパスアトリビュートにPrefix SID 20601のIndexである4601が格納されていることが確認できます。

R4のBGPテーブルを見ると、6.6.6.6/32を学習していることが確認できます。また、6.6.6.6/32に付加されていたSID Index(4601)と、R4自身のSRGBの先頭のSID(16000)を加算した20601が付加されていることが確認できます。
RP/0/RP0/CPU0:R4#show bgp 6.6.6.6/32
BGP routing table entry for 6.6.6.6/32
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                 12          12
    Local Label: 20601
Last Modified: Jun 18 20:51:34.638 for 00:14:23
Paths: (1 available, best #1)
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    172.16.1.3
  Path #1: Received by speaker 0
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    172.16.1.3
  Local
    6.6.6.6 (metric 3) from 6.6.6.6 (6.6.6.6)
      Received Label 3
      Origin IGP, metric 0, localpref 100, valid, internal, best, group-best, labeled-unicast
      Received Path ID 0, Local Path ID 1, version 12
      Label-Index: 4601
            
R4はBGP-LUを使用して、R3に6.6.6.6/32を広報します。

以下がR4がR1に送信したBGPのUPDATEメッセージのキャプチャになります。MP_REACH_NLRIパスアトリビュートのLabelに20601が格納されていることが確認できます。

R3のBGPテーブルを見ると、Label 20601が付加された6.6.6.6/32を学習していることが確認できます。
RP/0/RP0/CPU0:R3#show bgp 6.6.6.6/32
BGP routing table entry for 6.6.6.6/32
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                 11          11
    Local Label: 20601
Last Modified: Jun 18 20:51:39.304 for 00:14:31
Paths: (1 available, best #1)
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    1.1.1.1
  Path #1: Received by speaker 0
  Advertised IPv4 Labeled-unicast paths to peers (in unique update groups):
    1.1.1.1
  200
    172.16.1.4 from 172.16.1.4 (4.4.4.4)
      Received Label 20601
      Origin IGP, localpref 100, valid, external, best, group-best, labeled-unicast
      Received Path ID 0, Local Path ID 1, version 11
      Origin-AS validity: (disabled)
      Label-Index: 4601
            
R4と同様に、R3はMP_REACH_NLRIパスアトリビュートにSID IndexとSRGBの先頭のSIDを加算した値を格納して、R1に6.6.6.6/32を広報します。

R1のBGPテーブルを見ると、Label 20601が付加された6.6.6.6/32を学習していることが確認できます。
RP/0/RP0/CPU0:R1#show bgp 6.6.6.6/32
BGP routing table entry for 6.6.6.6/32
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                 11          11
    Local Label: 20601
Last Modified: Jun 18 20:51:33.627 for 00:14:46
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  200
    3.3.3.3 (metric 3) from 3.3.3.3 (3.3.3.3)
      Received Label 20601
      Origin IGP, localpref 100, valid, internal, best, group-best, labeled-unicast
      Received Path ID 0, Local Path ID 1, version 11
      Label-Index: 4601
            
FIBとLIFBの確認
R1のFIBを見ると、R1は6.6.6.6/32宛のパケットに対して、Prefix SID 20301 20601を付加することが確認できます。
また、R3はBGP経由で学習したPrefix SID 20601をLFIBにインポートしていることが確認できます。

RP/0/RP0/CPU0:R1#show cef 6.6.6.6/32
6.6.6.6/32, version 24, labeled SR, internal 0x5000001 0x80 (ptr 0xdfa3588) [1], 0x0 (0xe1645a8), 0xa08 (0xe807228)
 Updated Jun 18 20:51:33.443
 Prefix Len 32, traffic index 0, precedence n/a, priority 4
   via 3.3.3.3/32, 3 dependencies, recursive [flags 0x6000]
    path-idx 0 NHID 0x0 [0xd29d8d0 0x0]
    recursion-via-/32
    next hop 3.3.3.3/32 via 20301/0/21
     local label 20601
     next hop 10.1.1.2/32 Gi0/0/0/0    labels imposed {20301 20601}
            
RP/0/RP0/CPU0:R2#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20301  Pop         SR Pfx (idx 4301)  Gi0/0/0/1    10.2.2.3        10906
24000  Pop         SR Adj (idx 0)     Gi0/0/0/0    10.1.1.1        0
24001  Pop         SR Adj (idx 0)     Gi0/0/0/1    10.2.2.3        0
            
RP/0/RP0/CPU0:R3#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20601  20601       SR Pfx (idx 4601)  Gi0/0/0/1    172.16.1.4      0
24000  Pop         SR Adj (idx 0)     Gi0/0/0/0    10.2.2.2        0
24002  Pop         172.16.1.4/32      Gi0/0/0/1    172.16.1.4      2784
            
RP/0/RP0/CPU0:R4#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20601  20601       SR Pfx (idx 4601)  Gi0/0/0/1    20.1.1.5        9095
24000  Pop         SR Adj (idx 0)     Gi0/0/0/1    20.1.1.5        0
            
RP/0/RP0/CPU0:R5#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20601  Pop         SR Pfx (idx 4601)  Gi0/0/0/1    20.2.2.6        9362
24000  Pop         SR Adj (idx 0)     Gi0/0/0/0    20.1.1.4        0
24001  Pop         SR Adj (idx 0)     Gi0/0/0/1    20.2.2.6        0
            
疎通確認
R1の1.1.1.1からR6の6.6.6.6へPingを実施します。

以下はR1-R2間でキャプチャしたR1の1.1.1.1からR6の6.6.6.6へのICMP Echoになります。パケットにThimヘッダが2個付加されており、20301と20601が格納されていることが確認できます。

以下はR3-R4間でキャプチャしたR1の1.1.1.1からR6の6.6.6.6へのICMP Echoになります。R3がBGP-LU経由で学習したPrefix SID 20601をパケットに付加してR4に転送していることが確認できます。

 
  
  
  
  
コメント