Segment Routing BGP

今回は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/0
   network point-to-point
  !
  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ではありません。

R6

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コマンドを設定するのみです。

R6

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を明示的に設定する必要があります。

R1,R3,R4,R6

segment-routing
 global-block 16000 23999
            

 

BGPネイバーの状態確認

R6のBGPネイバーの状態を見ると、IPv4 Labeled Unicastが有効なことが確認できます。

R6

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であることが確認できます。

R6

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が付加されていることが確認できます。

R4

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を学習していることが確認できます。

R3

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を学習していることが確認できます。

R1

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にインポートしていることが確認できます。

R1

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}
            
R2

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
            
R3

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
            
R4

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
            
R5

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に転送していることが確認できます。

コメント

タイトルとURLをコピーしました