今回は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に転送していることが確認できます。
コメント