サマリ
- Multi-AS の SR-MPLS + VPNv4 環境で AS 間での TE を実現するため、ASBR 間 next-hop を PE で選択する方法を検証
- next-hop ごとに VPN ラベルを生成する Nokia ASBR と、 BGP-LU で ASBR 間 next-hop をそのまま広告する Cisco ASBR の 2 通りで動作確認に成功
この記事は Multi-AS Segment Routing 検証連載の第 20 回です。 過去の記事一覧は こちら にあります。
概要
イノベーションセンターの吉田 晴信です。 業務では Multi-AS Segment Routing に関する技術検証をしています。
本記事では、Multi-AS での Segment Routing を活用した Traffic Engineering(SR-TE)の実現方法について紹介します。
Multi-AS での SR-TE で実現したい要求として、第 5 回の記事では下記の 2 点を挙げています。
- (a) AS 内で意図した経路を選択したい(AS 内での TE)
- (b) 他 AS との接続経路を選択したい(AS 間での TE)
(a) の実現方法については第 5 回の記事で説明しています。本記事では (b) の実現方法を説明します。
Inter-AS Option B における (b) の実現方法
本記事では MPLS Inter-AS Option B を前提に SR-MPLS + VPNv4 で (b) を実施する方法を紹介し動作検証を行います。
はじめに、Option B で (b) を実施する際の課題を説明します。 (b) を実施する場合、下記の 3 種のラベルが必要です。
- ASBR に到達するまでのラベル
- ASBR から先を示すラベル
- VPN を識別するラベル
ラベルの処理としては、「 ASBR に到達するまでのラベル」は ASBR 到達までに Pop されますが、 「 ASBR から先を示すラベル」と「 VPN を識別するラベル」は Pop されません。
「 ASBR から先を示すラベル」は ASBR で next-hop を選択する際に Pop され、 「 VPN を識別するラベル」は ASBR 間 で VPN を識別するのに必要であるため Swap されます。 つまり、ASBR では Pop と Swap の 2 つの処理を同時に行う必要があります。
ですが、現状 Cisco/Juniper/Nokia 機器では「 ASBR から先を示すラベル」と「 VPN を識別するラベル」を同時に ASBR で処理する機能がありません。 つまり、(b) を 1 つの ASBR につき 1 ラベルのみ処理する方法で実現する必要があります。
実現方法として、本記事では下記の 2 点を紹介します。
- (1) ASBR で next-hop ごとの VPN ラベルを生成する方法
- (2) ASBR で Egress Peer に対する EPE ラベルを生成し、 VPN ラベルは対向 AS の ASBR が生成したものを利用する方法
(1) ASBR で next-hop ごとの VPN ラベルを生成する方法
1 点目の方法では、next-hop ごとに受信した NLRI 単位で経路に異なる VPN ラベルを生成します。
これにより、VPN ラベルは ASBR 間 next-hop に対応します。 そして経路を PE に広告することで、PE で ASBR 間 next-hop を選択できます。
この方法は Nokia ASBR で使用できることを確認しています。
(2) ASBR で Egress Peer に対する EPE ラベルを生成し、 VPN ラベルは対向 AS の ASBR が生成したものを利用する方法
2 点目の方法では、自 AS の ASBR で Egress Peer に対応する EPE ラベルを生成します。
EPE ラベルを生成した経路は RFC3107 で標準化されている BGP-LU を使用し PE に広告します。
VPN 経路は対向 AS の ASBR から Inter-AS の VPN ラベルがついた状態で自 AS の ASBR で受信されます。 自 AS の ASBR から PE にこの経路を広告しますが、このとき経路の next-hop-self を使用せずそのまま広告します。 PE は 対向 AS の ASBR のアドレスを EPE ラベルがついた状態で学習できているため、 next-hop を書き換えない状態でも経路の解決が可能です。
以上により、PE で対向 AS の ASBR を選択でき、自 AS の ASBR では EPE ラベルを処理するだけなので転送可能となり、 VPN ラベルも 対向 AS の ASBR で解釈可能なため問題なく通信できます。
この方法は Cisco ASBR で使用できることを確認しています。
検証
本記事では (1) と (2) の方法で PE において ASBR 間 next-hop を選択できることを確認します。
前提である Multi-AS の SR-MPLS + VPNv4 の設定は 第 12 回の記事 をご参照ください。 また、(1) と (2) 両方で経路選択するため、ルートポリシーを用いて weight/LP を変更する方法を採用しています。
(1) の検証
(1) は下記のトポロジーで検証します。
使用した各ルーターのバージョンは下記の通りです。
- 1-PE01: IOS XR 7.9.2
- 1-PE02、1-ASBR02、1-ASBR03、1-PE04: Junos OS 22.3R1.11
- 1-PE03、1-ASBR01: SR OS 22.7.R1
検証の手順は下記の通りです。
- ルートポリシーの設定
- VPN ラベルの確認
- traceroute による VPN の通信経路確認
1. ルートポリシーの設定
1-ASBR01 から受信した経路を選択するため、各 PE でルートポリシーを設定します。 今回設定するルートポリシーは下記の 2 つです。
- BGP で vrf-100 に対して、次に経由する AS が 65002 の経路を広告されたとき、その経路の weight を 10000 にする。
- BGP で vrf-200 に対して、次に経由する AS が 65003 の経路を広告されたとき、その経路の weight を 10000 にする。
これにより、vrf-100 の通信では AS65002 に直接転送する経路が選択され、 vrf-200 の通信では AS65003 を経由して AS65002 に転送する経路が選択されます。 トラフィックの流れは下記の通りです。
1-PE01 におけるルートポリシーの設定例です。
as-path-set as-65002 neighbor-is '65002' end-set ! as-path-set as-65003 neighbor-is '65003' end-set ! route-policy asbr-selection-based-rd if rd in rds-select-65002 and as-path in as-65002 then set weight 10000 endif if rd in rds-select-65002 and as-path in as-65003 then set weight 1000 endif if rd in rds-select-65003 and as-path in as-65003 then set weight 10000 endif if rd in rds-select-65003 and as-path in as-65002 then set weight 1000 endif pass end-policy !
また、ASBR が広告した経路にルートポリシーを適用するため、下記を設定します。
router bgp 65001 neighbor-group ibgp address-family vpnv4 unicast route-policy asbr-selection-based-rd in ! ! !
本記事では紹介していませんが、1-PE02 と 1-PE03 についても同じ内容を設定します。 なお、この節で紹介した設定は経路選択するためのものであり、(1) 実現のために第 12 回の記事から追加設定はありません。
2. VPN ラベルの確認
1-ASBR01 で生成された VPN ラベルを確認します。 下記の通り ASBR 間 next-hop ごとに異なる VPN ラベルが生成されていることがわかります。
[/] A:user@1-ASBR01# /show router bgp inter-as-label =============================================================================== BGP Inter-AS labels Flags: B - entry has backup, P - entry is promoted =============================================================================== NextHop Received Advertised Label Label Label Origin ------------------------------------------------------------------------------- 10.100.1.2 36 524280 External 10.100.1.2 37 524279 External 10.100.2.2 22 524278 External 10.100.2.2 23 524277 External 10.255.1.1 24002 524284 Internal 10.255.1.1 24003 524283 Internal 10.255.1.2 16 524274 Internal 10.255.1.2 17 524273 Internal 10.255.1.3 524284 524276 Internal 10.255.1.3 524286 524275 Internal ------------------------------------------------------------------------------- Total Labels allocated: 10 ===============================================================================
1-PE01 に上記で生成された VPN ラベルが広告されているか確認します。 下記は 1-PE01 における vrf-100 の経路ですが、1-ASBR01 で確認した VPN ラベルが広告されていることがわかります。
RP/0/RP0/CPU0:1-PE01#show bgp vpnv4 unicast rd 65002:100 labels (snip) Status codes: s suppressed, d damped, h history, * valid, > best i - internal, r RIB-failure, S stale, N Nexthop-discard Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Rcvd Label Local Label Route Distinguisher: 65002:100 Route Distinguisher Version: 525 *>i192.168.4.0/24 10.255.1.4 524280 nolabel * i 10.255.1.4 524278 nolabel Processed 1 prefixes, 2 paths
vrf-200 も同じです。
RP/0/RP0/CPU0:1-PE01#show bgp vpnv4 unicast rd 65002:200 labels (snip) Status codes: s suppressed, d damped, h history, * valid, > best i - internal, r RIB-failure, S stale, N Nexthop-discard Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Rcvd Label Local Label Route Distinguisher: 65002:200 Route Distinguisher Version: 524 * i192.168.14.0/24 10.255.1.4 524279 nolabel *>i 10.255.1.4 524277 nolabel Processed 1 prefixes, 2 paths
1-PE02 と 1-PE03 の vrf-100 と vrf-200 でも同様の経路が確認できます。
3. traceroute による VPN の通信経路確認
PE から ASBR 間 next-hop が選択できているか確認するため、 traceroute コマンドを実行します。
1-PE01 vrf-100 -> 1-PE04 vrf-100
1-PE01 の vrf-100 から 1-PE04 の vrf-100 に対して traceroute を実行します。 結果、AS65002 へ直接転送されました。 また、1-PE02 と 1-PE03 の vrf-100 でも同様の結果となりました。
RP/0/RP0/CPU0:1-PE01#traceroute 192.168.4.254 vrf 100 Fri Jan 26 10:19:06.080 JST Type escape sequence to abort. Tracing the route to 192.168.4.254 1 10.100.1.1 [MPLS: Labels 16004/524280 Exp 0] 4 msec 3 msec 3 msec 2 10.100.1.2 [MPLS: Label 36 Exp 0] 3 msec 3 msec 3 msec 3 192.168.4.254 3 msec 3 msec 4 msec
1-PE01 vrf-200 -> 1-PE04 vrf-200
1-PE01 の vrf-200 から 1-PE04 の vrf-200 に対して traceroute を実行します。 結果、AS65003 を経由し AS65002 へ転送されました。 また、1-PE02 と 1-PE03 の vrf-200 でも同様の結果となりました。
RP/0/RP0/CPU0:1-PE01#traceroute 192.168.14.254 vrf 200 Fri Jan 26 10:19:10.027 JST Type escape sequence to abort. Tracing the route to 192.168.14.254 1 10.100.2.1 [MPLS: Labels 16004/524277 Exp 0] 3 msec 2 msec 2 msec 2 * * * 3 10.100.3.1 [MPLS: Label 37 Exp 0] 4 msec 3 msec 4 msec 4 192.168.14.254 4 msec 3 msec 3 msec
(2) の検証
(2) は下記のトポロジーで検証します。 なお (1) と検証時期が異なるため、環境が少し違います。
各ルーターのバージョンは下記の通りです。
- 2-PE01、2-ASBR01、2-ASBR02、2-ASBR03、2-PE04: IOS XR 7.9.2
- 2-PE02: SR OS 23.3.R3
- 2-PE03: Junos OS 22.3R1.11
検証の手順は下記の通りです。
- EPE ラベルを生成する設定
- BGP-LU の設定
- ルートポリシーの設定
- PE での EPE ラベル確認
- traceroute による VPN の通信経路確認
1. EPE ラベルを生成する設定
Egress Peer に対して EPE ラベルを生成するため、2-ASBR01 に下記を設定します。
router bgp 65001 neighbor 10.100.1.2 egress-engineering peer-node-sid index 100 ! neighbor 10.100.2.2 egress-engineering peer-node-sid index 200 ! ! mpls static interface GigabitEthernet0/0/0/2 ! interface GigabitEthernet0/0/0/3 ! !
生成された EPE ラベルは下記のコマンドで確認できます。
RP/0/RP0/CPU0:2-ASBR01#show bgp egress-engineering Mon Dec 4 19:46:30.145 JST Egress Engineering Object: 10.100.1.2/32 (0x7f38b4250e28) EPE Type: Peer Nexthop: 10.100.1.2 Version: 30, rn_version: 30 Flags: 0x00000026 Local ASN: 65001 Remote ASN: 65002 Local RID: 10.255.1.3 Remote RID: 10.255.1.3 Local Address: 10.100.1.1 First Hop: 10.100.1.2 NHID: 2 IFH: 0x1000028 Label: 15100, Refcount: 4 rpc_set: 0x7f3858002300, ID: 14 Egress Engineering Object: 10.100.2.2/32 (0x7f38b4250f20) EPE Type: Peer Nexthop: 10.100.2.2 Version: 31, rn_version: 31 Flags: 0x00000026 Local ASN: 65001 Remote ASN: 65003 Local RID: 10.255.1.3 Remote RID: 10.255.1.1 Local Address: 10.100.2.1 First Hop: 10.100.2.2 NHID: 3 IFH: 0x1000020 Label: 15200, Refcount: 4 rpc_set: 0x7f3858002570, ID: 15
2. BGP-LU の設定
生成した EPE ラベルを PE に広告するため、2-ASBR01 で BGP-LU を設定します。
router bgp 65001 address-family ipv4 unicast advertise epe-bgp labeled-unicast allocate-label all ! neighbor 10.255.1.1 use neighbor-group ibgp address-family ipv4 labeled-unicast ! neighbor 10.255.1.2 use neighbor-group ibgp address-family ipv4 labeled-unicast ! neighbor 10.255.1.4 use neighbor-group ibgp address-family ipv4 labeled-unicast
下記は 2-PE01 における BGP-LU の設定です。 本記事では紹介していませんが、2-PE02 と 2-PE03 についても同じ内容を設定します。
router bgp 65001 address-family ipv4 unicast allocate-label all ! neighbor 10.255.1.3 use neighbor-group ibgp address-family ipv4 labeled-unicast
3. ルートポリシーの設定
経路を選択するため、ルートポリシーを設定します。 設定は (1) と同じなので省略します。 トラフィックの流れは下記の通りです。
4. PE での EPE ラベル確認
2-ASBR01 で生成された EPE ラベルが BGP-LU で PE に広告されているか確認します。
2-PE01 で下記のコマンドを実行すると、 2-ASBR01 から EPE ラベルが広告されていることがわかります。
RP/0/RP0/CPU0:2-PE01#show bgp ipv4 labeled-unicast 10.100.1.2/32 Mon Dec 4 20:08:01.877 JST BGP routing table entry for 10.100.1.2/32 Versions: Process bRIB/RIB SendTblVer Speaker 3 3 Last Modified: Dec 4 19:57:00.035 for 00:11:01 Paths: (1 available, best #1) Not advertised to any peer Path #1: Received by speaker 0 Not advertised to any peer Local 10.255.1.3 (metric 20) from 10.255.1.3 (10.255.1.3) Received Label 15100 Origin IGP, localpref 100, valid, internal, best, group-best, labeled-unicast Received Path ID 0, Local Path ID 1, version 3 RP/0/RP0/CPU0:2-PE01#show bgp ipv4 labeled-unicast 10.100.2.2/32 Mon Dec 4 20:07:41.067 JST BGP routing table entry for 10.100.2.2/32 Versions: Process bRIB/RIB SendTblVer Speaker 2 2 Last Modified: Dec 4 19:57:00.035 for 00:10:41 Paths: (1 available, best #1) Not advertised to any peer Path #1: Received by speaker 0 Not advertised to any peer Local 10.255.1.3 (metric 20) from 10.255.1.3 (10.255.1.3) Received Label 15200 Origin IGP, localpref 100, valid, internal, best, group-best, labeled-unicast Received Path ID 0, Local Path ID 1, version 2
また、vrf-100 と vrf-200 の経路を確認すると、 VPN ラベルを付与する経路の次に、EPE ラベルを付与する経路が選択されることを確認できます。
RP/0/RP0/CPU0:2-PE01#show route vrf 100 (snip) C 192.168.1.0/24 is directly connected, 13w5d, GigabitEthernet0/0/0/1 L 192.168.1.254/32 is directly connected, 13w5d, GigabitEthernet0/0/0/1 B 192.168.2.0/24 [200/0] via 10.255.1.2 (nexthop in vrf default), 1d01h B 192.168.2.254/32 [200/0] via 10.255.1.2 (nexthop in vrf default), 1d01h B 192.168.3.0/24 [200/0] via 10.100.1.2 (nexthop in vrf default), 03:25:39 (snip) RP/0/RP0/CPU0:2-PE01#show route vrf 200 (snip) C 192.168.11.0/24 is directly connected, 13w4d, GigabitEthernet0/0/0/2 L 192.168.11.254/32 is directly connected, 13w4d, GigabitEthernet0/0/0/2 B 192.168.12.0/24 [200/0] via 10.255.1.2 (nexthop in vrf default), 00:01:45 B 192.168.12.254/32 [200/0] via 10.255.1.2 (nexthop in vrf default), 00:01:45 B 192.168.13.0/24 [200/0] via 10.100.2.2 (nexthop in vrf default), 00:03:15 (snip)
2-PE02 と 2-PE03 でも同じ情報が広告されています。
5. traceroute による VPN の通信経路確認
PE から ASBR 間 next-hop が選択できているか確認するため、traceroute コマンドを実行します。
2-PE01 vrf-100 -> 2-PE04 vrf-100
2-PE01 の vrf-100 から 2-PE04 の vrf-100 に対して traceroute を実行します。 結果、AS65002 へ直接転送されました。 また、2-PE02 と 2-PE03 の vrf-100 でも同様の結果となりました。
RP/0/RP0/CPU0:2-PE01#traceroute 192.168.3.254 vrf 100 Tue Dec 5 21:31:08.445 JST Type escape sequence to abort. Tracing the route to 192.168.3.254 1 10.1.1.2 [MPLS: Labels 15100/24007 Exp 0] 3 msec 2 msec 2 msec 2 10.100.1.2 [MPLS: Label 24007 Exp 0] 3 msec 2 msec 2 msec 3 10.1.1.1 4 msec * 4 msec
2-PE01 vrf-200 -> 2-PE04 vrf-200
2-PE01 の vrf-200 から 2-PE04 の vrf-200 に対して traceroute を実行します。 結果、AS65003 を経由し AS65002 へ転送されました。 また、2-PE02 と 2-PE03 の vrf-200 でも同様の結果となりました。
RP/0/RP0/CPU0:2-PE01#traceroute 192.168.13.254 vrf 200 Tue Dec 5 21:31:26.660 JST Type escape sequence to abort. Tracing the route to 192.168.13.254 1 10.1.1.2 [MPLS: Labels 15200/32004 Exp 0] 3 msec 2 msec 2 msec 2 10.100.2.2 [MPLS: Label 32004 Exp 0] 3 msec 3 msec 2 msec 3 10.100.3.1 [MPLS: Label 24009 Exp 0] 2 msec 2 msec 2 msec 4 10.1.1.1 4 msec * 4 msec
まとめ
本記事では、Multi-AS の SR-MPLS + VPNv4 環境で AS 間での TE を実現するため、 ASBR 間 next-hop を PE で選択する方法と検証結果を紹介しました。
(1) の方法では、ASBR 間 next-hop ごとに受信した NLRI 単位で経路に異なる VPN ラベルを生成し、PE に広告できました。 こちらは Nokia ASBR を使用し確認しました。
(2) の方法では、まず自 AS の ASBR で Egress Peer に対応する EPE ラベルを生成し、BGP-LU で PE に広告しました。 また、対向 AS の ASBR から広告される VPN ラベルを付与する経路の next-hop を書き換えずに PE へ広告しました。 結果、PE で対向 AS の ASBR を選択できるようになり、自 AS の ASBR では EPE ラベルを処理するだけでよくなりました。 こちらは Cisco ASBR を使用し確認しました。
以上の方法に加えて、Cisco/Juniper/Nokia PE でルートポリシーを設定し、 選択したい VPN 経路の weight を大きくすることにより、PE から次に経由する AS を選択できました。