こんにちは、情報セキュリティ部の原田とイノベーションセンターの竹中です。この記事では、モバイルネットワークのユーザプレーン技術である SRv6 MUP(Segment Routing over IPv6 Mobile User Plane)の解説と社内で行った検証についてご紹介いたします。
モバイルネットワークのアーキテクチャとSRv6 MUP
SRv6 MUPとは、SRv6のネットワークプログラマビリティにより、モバイルネットワークのユーザープレーン (U-Plane) をシンプルかつ柔軟に構築するための技術です。
従来のモバイルネットワーク
SRv6 MUP の詳説の前に、まずは現状のモバイルネットワークのアーキテクチャについて解説します。モバイル端末が通信するとき、すべてのユーザトラフィックは基地局と交換機(UPF: User Plane Function)との間において構築されたトンネル(GTP-U)を介して、UPFから先の宛先ネットワークに転送されます。一方で、5Gでは、低遅延な処理を実現するためにMECを用いてユーザ近傍のノードで計算処理を行うユースケースや、自動運転における車車間通信のように端末同士で通信するユースケースなどが想定されています。しかし、先述のアーキテクチャだと、たとえトランスポートネットワーク的に近い距離のノード同士の通信であったとしても、User Plane Function (UPF) を介するためにパケットの転送距離は増大します。
上の図は従来のアーキテクチャにおいて UE1 から UE2 にパケットを転送する際のパケットの流れを示しています。GTP-U が基地局 (RAN) と UPF の間で構築されるため、図に示す U-Plane において UE1 発のパケットはトランスポートネットワークの先にある UPF を一度経由した上で、宛先である UE2 へ送信されます。
SRv6 Mobile User Plane
SRv6 Mobile User Plane (SRv6 MUP) は、モバイルネットワークにおける U-Plane 部分に SRv6 を適用する技術です。SRv6 の持つネットワークプログラミング機能を活用してGTP-UパケットとSRv6パケットをステートレスに相互変換したり、従来のGTP-UパケットのU-Plane処理をSRv6パケットのファンクション処理に置き換えることで、U-Plane通信を従来のアーキテクチャと比較してより柔軟に扱います。
RFC9433 では、SRv6 MUP のさまざまな U-Plane 適用手法が言及されています。本検証では IETF でも議論中である、draft-mhkk-dmm-mup-architecture-01 の MUP アーキテクチャ (以下、採用アーキテクチャ)を参考にモバイルネットワークを構築し、UE と DN 間の通信や UE 間の通信を実現しました。 採用アーキテクチャの適用によって、SRv6 ネットワークのさまざまな拠点に点在する MUP 処理可能なルータ(MUP PE)各々がモバイルネットワークのU-Planeにおける GTP-U エンドポイントの役割を担うことで、トランスポートネットワークにおける最適経路とは遠く離れた位置に存在し得る UPF を介さない通信が可能になります。 また、既存の5Gネットワークの構成要素 (5GC、gNB) をそのまま利用しつつ、U-Plane をネットワークプログラマビリティが高く柔軟にパケットを処理できる SRv6 ネットワークへと置き換えることが可能になります。
上の図は採用アーキテクチャにおいて UE1 から UE2 にパケットを転送する際のパケットの流れを示しています。MUP PE が UPF の役割を担うことによって GTP-U が基地局 (RAN) と MUP-PE の間で構築されるため、図に示すU-Planeにおいて UE1 発のパケットは SRv6 MUP ネットワークへ流入する MUP PE で折り返して宛先である UE2 へ送信されます。
5Gネットワークへの SRv6 MUP の適用
採用アーキテクチャに従って U-Plane に SRv6 MUP ネットワークを適用するためには、SRv6 MUP ネットワークにおいて以下の機能が必要になります。
- SRv6 MUP ネットワーク内のそれぞれの MUP PE が持つ N3 ネットワークセグメント、N6 ネットワークセグメント (総称して MUP Segment) の情報を共有し、
- 各 MUP PE が 5GC の管理するセッション情報を経路情報として受信した上で、
- MUP Segment とセッション情報を元に U-Plane のパケット転送用経路を作成する
採用アーキテクチャにおいては、MUP PE 間で自身が接続している N3・N6 ネットワークセグメントを BGP を用いて経路情報として共有します。
ここで N3 ネットワークセグメントは MUP Segment のうち Interwork Segment として扱われ、関連する経路情報は Interwork Segment Discovery(ISD) 経路として扱われます。 ISD 経路情報には、SRv6 ネットワークに所属する全ての MUP PE が、対応する Interwork Segment へ到達するために必要な情報が含まれます。
また、 N6 ネットワークセグメントは MUP Segment のうち Direct Segment として扱われ、関連する経路情報は Direct Segment Discovery(DSD) 経路として扱われます。 DSD 経路情報には、SRv6 ネットワークに所属する全ての MUP PE が、対応する Direct Segment へ到達するために必要な情報が含まれます。
続いて 5GC が管理するセッション情報の受信についてです。
5G ネットワークのアーキテクチャにおいて、Session Management Function (SMF) と UPF との間では Packet Forwarding Control Protocol (PFCP) を用いてセッション情報を伝達していますが、採用アーキテクチャでは セッション情報は MUP コントローラ (MUP-C) によって経路情報に変換され、BGP を用いて MUP-C から MUP PE に共有されます。 セッション情報のうち、アクセス側の情報は Type 1 Session Transformed (T1ST) 経路として、コア側の情報は Type 2 Session Transformed (T2ST) 経路として扱われます。
採用アーキテクチャにおいて、T1ST 経路情報は MUP PE が ISD と組み合わせてuplinkの経路を生成するために、T2ST 経路情報は MUP PE が DSD と組み合わせてdownlinkの経路を生成するために利用します。uplinkとdownlinkのそれぞれの経路が SRv6 MUP ネットワーク内に適用されることで E2E の通信が可能となります。
本ブログにおいては、SMF から UPF へ送信されるセッション情報に対応する経路を生成する MUPコントローラの設計・実装と、実装した MUP コントローラを 5GC と SRv6 ネットワークの中継機器として適用することで SRv6 MUP を実現します。
なお、以降では説明のために N3 ネットワークセグメントへの接続を持つ MUP PE を特に MUP GWと呼びます。
MUP コントローラの設計
MUP コントローラの構成
採用アーキテクチャにおける MUP コントローラ(MUP-C)は、 SMF と SRv6 ネットワークの中間に位置します。UE のセッション情報が含まれる PFCP パケットを解釈し、経路を決定する機能群(以下、セッション解析機能)と、実際に BGP で経路を設定する機能群(経路広告機能)からなる構成としました。 セッション解析機能部では、PFCP パケットに含まれる UE のセッション情報を取得し、T1ST 経路と T2ST 経路をそれぞれ生成します。T1ST 経路は UE の IP アドレス、TEID、QFI、gNB の IP アドレスから構成され、T2ST 経路は UPF アドレスのプレフィックスと TEID から構成されます。
経路広告機能部では、GoBGP を使用しました。SRv6 MUP のアーキテクチャでは、BGP によって経路情報を広告します。GoBGP では MUP に対応した BGP 拡張が実装されているため、これを使うことにしました[ https://github.com/osrg/gobgp/blob/master/docs/sources/srv6_mup.md ]。セッション解析機能部で生成した経路情報は、gRPC で GoBGP に投入されます。
PDU セッション確立時のシーケンス
続いて、本検証での PDU セッションが確立するまでのシーケンスについて解説します。こちらの図は UE の接続要求をトリガーとした PDU セッション確立までの流れです。通常の 5GC との差異は、N4 でやり取りする相手が UPF ではなく MUP-C な点、MUP-C と MUP PE 間で BGP を用いて経路を広告する点です。赤字の箇所が新たに追加したシーケンスとなります。
既存の 5GC を変えない形で SRv6 MUP を利用するため、SMF から見た MUP-C の振る舞いは UPF と同等になるよう実装しました。内部的には、N4 Session Establishment/Modification Requestを受け取ると、セッション解析機能部分で T1ST 経路と T2ST 経路を生成するのに必要なパラメータをパースしたのち、GoBGP に gRPC で経路情報を投入します。gRPC リクエストを受け取った GoBGP は配下の MUP PE に経路を広告します。広告が完了すると、MUP-C は SMF に対して N4 Session Establishment/Modification Response を返し、以降は通常の PDU セッション確立のシーケンスに戻ります。
検証
今回の検証で使用した機材や OSS は下記のとおりです。MUP-C におけるセッション情報取得部分は前章「MUP コントローラの設計」を元に内製開発しました。
- 5GC…free5GC
- UE/RAN…UERANSIM
- SRv6 MUP対応ルータ...古河電工 FITELnet F220 EX (検証用ファームウェア)
- MUPコントローラ(セッション解析部)...内製開発
- MUPコントローラ(経路広告部)...GoBGP、FRRouting
検証構成は下図のとおりです。
続いて、トポロジに従った SRv6 ネットワークを構成するための機器設定と状態を確認します。
なお、各種 5GC の config や各インターフェース設定などの基本設定や SRv6 利用のための初期設定などはすでに実施されているものとし、SRv6 ネットワークを構成するための IS-IS の設定と、MUP の経路情報を交換するための BGP の設定と確認を実施します。
IS-IS の設定
IS-IS を用いて、SRv6 encap されたパケットを転送するための経路情報を交換します。
なお本検証におきましては、MUP-C も FRRouting を用いて IGP domain に所属していますが、BGP セッションのための Loopback Address 広告と IPv6 (not SRv6) のパケット転送用の設定のみのため、設定の紹介は割愛します。
MUP PE
DN への接続に利用するための Locator を定義して広告します。
interface Loopback 1 ipv6 address 2001:db8::91 ipv6 address 2001:db8:91:c0a8:ac0c::5b ipv6 router isis core exit ! interface Port-channel 2 ipv6 enable ipv6 router isis core exit ! interface Port-channel 3 ipv6 enable ipv6 router isis core exit ! router isis core is-type level-2 net 49.0000.0000.0091.00 srv6 locator N6DN topology ipv6-unicast exit ! segment-routing srv6 encapsulation source-address 2001:db8:91:c0a8:ac0c::5b locator N6DN 2001:db8:0:91::/64 exit
MUP GW
DN と RAN への接続に利用するための Locator をそれぞれ定義して広告します。
interface Loopback 1 ipv6 address 2001:db8::100 ipv6 router isis core exit ! interface Port-channel 2 ipv6 enable ipv6 router isis core exit ! interface Port-channel 3 ipv6 enable ipv6 router isis core exit ! router isis core is-type level-2 net 49.0000.0000.0100.00 srv6 locator N3RAN srv6 locator N6DN topology ipv6-unicast exit ! segment-routing srv6 encapsulation source-address 2001:db8::100 locator N3RAN 2001:100::/32 locator N6DN 2001:db8:0:100::/64 exit
IS-IS の確認
IS-IS によって各ルータの Loopback Address と SRv6 Locator の経路を相互に学習していることが確認できます。
MUP PE
MUP-PE#sh ipv6 route isis Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3, B - BGP, T - Tunnel, i - IS-IS, V - VRRP track, Iu - ISAKMP SA up, It - ISAKMP tunnel route, Ip - ISAKMP l2tpv2-ppp Dr - DHCPv6-PD-relay, Dc - DHCP-client, Ds - DHCP-server, r - RA L - Local Breakout > - selected route, * - FIB route, p - stale info i > * 2001:100::/32 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:00:12 i > * 2001:db8::100/128 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:00:12 i > * 2001:db8::101/128 [115/20] via fe80::beef:beef:beef:beef, port-channel3, 00:00:12 i > * 2001:db8:0:100::/64 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:00:12
MUP GW
MUP-GW#sh ipv6 route isis Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3, B - BGP, T - Tunnel, i - IS-IS, V - VRRP track, Iu - ISAKMP SA up, It - ISAKMP tunnel route, Ip - ISAKMP l2tpv2-ppp Dr - DHCPv6-PD-relay, Dc - DHCP-client, Ds - DHCP-server, r - RA L - Local Breakout > - selected route, * - FIB route, p - stale info i > * 2001:db8::91/128 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:01:25 i > * 2001:db8::101/128 [115/20] via fe80::beef:beef:beef:beef, port-channel3, 00:01:25 i > * 2001:db8:0:91::/64 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:01:25 i > * 2001:db8:91:c0a8:ac0c::5b/128 [115/30] via fe80::beef:beef:beef:beef, port-channel3, 00:01:25
MUP Segment の設定
MUP PE には N6 に接続するための Direct Segment、MUP GW には Direct Segment に加えて、N3 に接続するための Interwork Segment をそれぞれ N6DN VRF、N3RAN VRF として定義します。
MUP PE
ip vrf N6DN description N6DN rd 65000:2 route-target import 100.0.0.101:1 route-target import 65000:2 route-target export 65000:2 segment-routing srv6 locator N6DN segment-routing srv6 mup-segment direct 65000:2 exit ! interface Port-channel 4 ip vrf forwarding N6DN ip address 192.168.60.11 255.255.255.0 ipv6 enable exit
MUP GW
ip vrf N3RAN description N3RAN rd 65000:1 route-target import 100.0.0.101:1 route-target import 65000:1 route-target export 65000:1 segment-routing srv6 locator N3RAN segment-routing srv6 mup-segment interwork exit ! ip vrf N6DN description N6DN rd 65000:2 route-target import 100.0.0.101:1 route-target import 65000:2 route-target export 65000:2 segment-routing srv6 locator N6DN segment-routing srv6 mup-segment direct 65000:2 exit ! interface Port-channel 4 ip vrf forwarding N3RAN ip address 192.168.173.13 255.255.255.0 exit
BGP による経路情報の広告
BGP によって MUP PE、MUP GW で MUP Segment と VPN 経路を広告します。本検証では N3、N6 はそれぞれ IPv4 ネットワークのため、IPv4 SRv6-MUP と VPNv4 の Address Family を広告します。 本検証においては MUP-C の GoBGP が Route Reflector も兼ねているため、GoBGP には Route Reflector 用の config を投入します。
MUP PE
router bgp 65000 bgp router-id 100.0.0.91 bgp log-neighbor-changes neighbor 2001:db8::101 remote-as 65000 neighbor 2001:db8::101 update-source loopback 1 ! address-family vpnv4 segment-routing srv6 neighbor 2001:db8::101 activate neighbor 2001:db8::101 capability extended-nexthop-encoding neighbor 2001:db8::101 send-community both exit ! address-family ipv4 srv6-mup neighbor 2001:db8::101 activate neighbor 2001:db8::101 send-community both exit ! address-family ipv4 vrf N6DN redistribute connected redistribute static exit ! exit
MUP GW
router bgp 65000 bgp router-id 100.0.0.100 bgp log-neighbor-changes neighbor 2001:db8::101 remote-as 65000 neighbor 2001:db8::101 update-source loopback 1 ! address-family vpnv4 segment-routing srv6 neighbor 2001:db8::101 activate neighbor 2001:db8::101 capability extended-nexthop-encoding neighbor 2001:db8::101 send-community both exit ! address-family ipv4 srv6-mup neighbor 2001:db8::101 activate neighbor 2001:db8::101 send-community both exit ! address-family ipv4 vrf N3RAN redistribute connected redistribute static exit ! address-family ipv4 vrf N6DN redistribute connected redistribute static exit
MUP-C (GoBGP)
MUP-C:~/gobgp$ cat conf.toml [global.config] as = 65000 router-id = "100.0.0.101" [[neighbors]] [neighbors.config] peer-as = 65000 local-as = 65000 neighbor-address = "2001:db8::91" [neighbors.transport.config] local-address = "2001:db8::101" [neighbors.route-reflector.config] route-reflector-client = true route-reflector-cluster-id = "0.0.0.1" [[neighbors.afi-safis]] [neighbors.afi-safis.config] afi-safi-name = "ipv4-mup" [[neighbors.afi-safis]] [neighbors.afi-safis.config] afi-safi-name = "l3vpn-ipv4-unicast" [[neighbors]] [neighbors.config] peer-as = 65000 local-as = 65000 neighbor-address = "2001:db8::100" [neighbors.transport.config] local-address = "2001:db8::101" [neighbors.route-reflector.config] route-reflector-client = true route-reflector-cluster-id = "0.0.0.1" [[neighbors.afi-safis]] [neighbors.afi-safis.config] afi-safi-name = "ipv4-mup" [[neighbors.afi-safis]] [neighbors.afi-safis.config] afi-safi-name = "l3vpn-ipv4-unicast"
BGP の設定確認
BGP セッションによって SRv6 MUP を実現するための MUP Segment や VPN 経路が受信できていることを確認します。
MUP GW
N6DN VRF に DN 向けの経路をインストールできているか、また MUP PE から広告された DSD 経路を受け取っているかを確認します。
MUP-GW#sh ip route vrf N6DN VRF: N6DN Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, B - BGP, T - Tunnel, i - IS-IS, V - VRRP track, Iu - ISAKMP SA up, It - ISAKMP tunnel route, Ip - ISAKMP l2tpv2-ppp Dc - DHCP-client, L - Local Breakout > - selected route, * - FIB route, p - stale info B > * 192.168.60.0/24 [200/0] via 2001:db8:0:91:45::, Tunnel1, 00:31:53 MUP-GW#sh ip route vrf N6DN 192.168.60.0/24 Routing entry for 192.168.60.0/24 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a02e50) Tunnel ID: 229 Tunnel Endpoint: 2001:db8:0:91:49:: (System VRF-ID: 0) Tunnel Parameter: (SID list) 2001:db8:0:91:49:: Last update 02w1d22h ago 2001:db8:0:91:49::, Tunnel1 (Tunnel-ID:229), RD 65000:2, System VRF-ID 2, NHD LINK Tunnel1 (36), refcnt 4 MUP-GW#sh ip bgp ipv4 srv6-mup dsd detail [Direct Segment Discovery route] Route Distinguisher: 65000:2 BGP routing table entry for 100.0.0.91 Local 2001:db8::91 from 2001:db8::101 (100.0.0.91) Origin IGP, localpref 100, valid, internal, best Extended Community: RT:65000:2 SRv6-MUP:65000:2 Originator: 100.0.0.91, Cluster list: 0.0.0.1 Path Identifier (Remote/Local): /0 Last update: Sun Nov 3 20:16:17 2024
MUP PE
MUP PE が ISD 経路を受け取れているかを確認します。
MUP-PE#sh ip bgp ipv4 srv6-mup isd detail [Interwork Segment Discovery route] Route Distinguisher: 65000:1 BGP routing table entry for 192.168.173.0/24 Local 2001:db8::100 from 2001:db8::101 (100.0.0.100) Origin IGP, localpref 100, valid, internal, best Extended Community: RT:65000:1 Originator: 100.0.0.100, Cluster list: 0.0.0.1 BGP Prefix-SID: SRv6 L3VPN 2001:100:42:: (L:16.16, F:16.0, T:0.0) End.M.GTP4.E Path Identifier (Remote/Local): /0 Last update: Sun Nov 3 20:58:48 2024
疎通確認
UE-DN 間の通信
まずは下記に示す、SRv6 ネットワークを介した UE-DN 間の通信について検証します。UE から DN の先のサーバに向けて ping を実行します。パケットはピンク色で示した経路を通ります。
UE の接続 UE を 5GC にアタッチし、PDU セッションを確立します。 MUP-C がセッション情報を T1ST/T2ST 経路に変換し、広告します。
mup-c:~$ gobgp global rib -a ipv4-mup | grep t1st *> [type:t1st][rd:100.0.0.101:1][prefix:10.10.10.1/32] 0.0.0.0 00:01:05 [{Origin: ?} {Extcomms: [100.0.0.101:1]}] mup-c:~$ gobgp global rib -a ipv4-mup | grep t2st *> [type:t2st][rd:100.0.0.101:1][endpoint-address-length:64][endpoint:192.168.172.12][teid:0.0.0.2] 0.0.0.0 00:01:07 [{Origin: ?} {Extcomms: [100.0.0.101:1], [65000:2]}]
受信した経路情報の確認 PDUセッションを確立したことにより、SRv6 MUP ネットワークにセッション情報を示す T1ST/T2ST 経路が広告されることを確認します。
MUP PE での確認例
MUP-PE#sh ip bgp ipv4 srv6-mup st1 10.10.10.1/32 [Type 1 Session Transformed route] Route Distinguisher: 100.0.0.101:1 BGP routing table entry for 10.10.10.1/32 Local 2001:db8::101 from 2001:db8::101 (100.0.0.101) Origin incomplete, localpref 100, valid, internal, best Extended Community: RT:100.0.0.101:1 Originator: 100.0.0.101, Cluster list: 0.0.0.1 TEID 00000001 (1), QFI 0x0, Endpoint 192.168.173.12 Path Identifier (Remote/Local): /0 Last update: Wed Nov 20 21:20:48 2024 MUP-GW#sh ip bgp ipv4 srv6-mup st2 192.168.172.12 [Type 2 Session Transformed route] Route Distinguisher: 100.0.0.101:1 BGP routing table entry for 192.168.172.12 Local 2001:db8::101 from 2001:db8::101 (100.0.0.101) Origin incomplete, localpref 100, valid, internal, best Extended Community: RT:100.0.0.101:1 SRv6-MUP:65000:2 Originator: 100.0.0.101, Cluster list: 0.0.0.1 Path Identifier (Remote/Local): /0 Last update: Wed Nov 20 21:21:18 2024
また、受け取った T1ST/T2ST を元に U-Plane 用の経路が生成されていることを確認します。
MUP GW (uplinkの経路情報)
N3 から受け取った GTP-U パケットのヘッダが decap されて N6DN VRF の経路情報を参照することがわかります。 BGP による経路情報の広告において N6DN VRF には MUP PE が広告する DN への経路情報が含まれているため、DN へパケットが転送されます。
MUP-GW#sh ip route vrf N3RAN 192.168.172.12/32 Routing entry for 192.168.172.12/32 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a02ae0) Tunnel ID: 229 Tunnel Endpoint: 2001:100:4c:: (System VRF-ID: 0) Last update 02w0d23h ago 2001:100:4c::, Tunnel1 (Tunnel-ID:229), RD 65000:1, System VRF-ID 1, NHD LINK Tunnel1 (38), refcnt 1 MUP-GW#sh segment-routing srv6 sid 2001:100:4c:: SID Function Context Owner State -------------------------- ------------ -------------------------------------------------- ----- --------- 2001:100:4c:: H.M.GTP4.D 'N3RAN':bsid BGP InUse Locator : N3RAN Length : 128 Nexthop : 2001:db8:0:100:41:: Link-ID : 37 Created : Mon Nov 4 20:26:40 2024 (02w1d23h ago) MUP-GW#sh segment-routing srv6 sid 2001:db8:0:100:41:: SID Function Context Owner State -------------------------- ------------ -------------------------------------------------- ----- --------- 2001:db8:0:100:41:: End.DT4 'N6DN':DN lookup BGP InUse Locator : N6DN Length : 128 VRF : N6DN Created : Tue Oct 29 17:32:14 2024 (03w1d01h ago)
MUP PE (downlinkの経路情報)
MUP GW から受け取った ISD 経路に登録されている
End.M.GTP4.E Function
を用いる経路が生成されていることが確認できます。 また、転送に利用する SID (2001:100:42:c0a8:ad0c::100
) の Argument 部分 (c0a8:ad0c::100
) には MUP GW にて GTP-U パケットに変換するための gNB アドレス (=c0a8:ad0c=192.168.173.12 )、QFI (=0)、TEID (=1) の情報が含まれています。MUP-PE#sh ip route vrf N6DN 10.10.10.1/32 Routing entry for 10.10.10.1/32 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a01930) Tunnel ID: 230 Tunnel Endpoint: 2001:100:42:c0a8:ad0c::100 (System VRF-ID: 0) Tunnel Parameter: (SID list) 2001:100:42:c0a8:ad0c::100 Last update 00:05:44 ago 2001:100:42:c0a8:ad0c::100, Tunnel1 (Tunnel-ID:230), RD 65000:2, System VRF-ID 1, NHD LINK Tunnel1 (20), refcnt 1
ping による疎通確認 UE(10.10.10.1)とサーバ(192.168.60.12)間で ping を実行した結果を示します。gNB でキャプチャしたGTP-U パケットはこちらです。
続いて、GTPカプセリングされたICMPパケットがMUP-GWを通過した際のSRv6パケットです。先程のGTP-U パケットがSRv6パケットに置き換わっていることが分かります。
downlink において MUP-PE を通過した際の SRv6 パケットです。src には UPF のアドレス(192.168.172.12→c0a8:ac0c)が、 dst には gNB のアドレス(192.168.173.12→a0c8:ad0c)、QFI(0)、TEID(1) が埋め込まれています。
downlink 方向の GTP-U パケットです。downlink の SRv6 の src/dst アドレスに埋め込まれた UPFのアドレス、gNBのアドレス、TEID が GTP-U パケットに反映されています。これで、UE に正しく ping reply が届くことを確認しました。
UE同士の折り返し通信
続いて、SRv6 MUPによって経路遅延が削減できるユースケースである、MUP GWによるUE同士の折り返しとなる通信について検証します。片方のUEからpingを実行し、もう片方のUEで受信します。トラフィックはピンク色で示した経路を通ります。
UE の接続 UE を 5GC にアタッチし、PDU セッションを確立します。 MUP-C がセッション情報を T1ST/T2ST 経路に変換し、広告します。
MUP-C:~$ gobgp global rib -a ipv4-mup | grep t1st *> [type:t1st][rd:100.0.0.101:1][prefix:10.10.10.3/32] 0.0.0.0 00:40:26 [{Origin: ?} {Extcomms: [100.0.0.101:1]}] *> [type:t1st][rd:100.0.0.101:1][prefix:10.10.10.2/32] 0.0.0.0 00:00:04 [{Origin: ?} {Extcomms: [100.0.0.101:1]}] MUP-C:~$ gobgp global rib -a ipv4-mup | grep t2st *> [type:t2st][rd:100.0.0.101:1][endpoint-address-length:64][endpoint:192.168.172.12][teid:0.0.0.4] 0.0.0.0 00:00:06 [{Origin: ?} {Extcomms: [100.0.0.101:1], [65000:2]}] *> [type:t2st][rd:100.0.0.101:1][endpoint-address-length:64][endpoint:192.168.172.12][teid:0.0.0.3] 0.0.0.0 00:40:28 [{Origin: ?} {Extcomms: [100.0.0.101:1], [65000:2]}]
経路情報の確認 UE を接続したことにより、SRv6 MUP ネットワークにセッション情報を示す T1ST/T2ST 経路が広告されることを確認します。今回は UE を2台接続したため、2種類の T1ST 経路が見えます。
MUP PE での確認例
MUP-PE#sh ip bgp ipv4 srv6-mup st1 10.10.10.2/32 [Type 1 Session Transformed route] Route Distinguisher: 100.0.0.101:1 BGP routing table entry for 10.10.10.2/32 Local 2001:db8::101 from 2001:db8::101 (100.0.0.101) Origin incomplete, localpref 100, valid, internal, best Extended Community: RT:100.0.0.101:1 Originator: 100.0.0.101, Cluster list: 0.0.0.1 TEID 00000001 (1), QFI 0x0, Endpoint 192.168.173.14 Path Identifier (Remote/Local): /0 Last update: Mon Nov 18 20:36:58 2024 MUP-PE#sh ip bgp ipv4 srv6-mup st1 10.10.10.3/32 [Type 1 Session Transformed route] Route Distinguisher: 100.0.0.101:1 BGP routing table entry for 10.10.10.3/32 Local 2001:db8::101 from 2001:db8::101 (100.0.0.101) Origin incomplete, localpref 100, valid, internal, best Extended Community: RT:100.0.0.101:1 Originator: 100.0.0.101, Cluster list: 0.0.0.1 TEID 00000002 (2), QFI 0x0, Endpoint 192.168.173.12 Path Identifier (Remote/Local): /0 Last update: Mon Nov 18 20:37:24 2024 MUP-PE#sh ip bgp ipv4 srv6-mup st2 192.168.172.12 [Type 2 Session Transformed route] Route Distinguisher: 100.0.0.101:1 BGP routing table entry for 192.168.172.12 Local 2001:db8::101 from 2001:db8::101 (100.0.0.101) Origin incomplete, localpref 100, valid, internal, best Extended Community: RT:100.0.0.101:1 SRv6-MUP:65000:2 Originator: 100.0.0.101, Cluster list: 0.0.0.1 Path Identifier (Remote/Local): /0 Last update: Mon Nov 4 20:26:05 2024
また、受け取った T1ST/T2ST 経路と MUP PE / MUP GW 間で交換した MUP Segment の情報を元に U-Plane 用の経路が生成されていることを確認します。 UE 間通信では MUP GW で折り返して通信するため、MUP GW の経路情報を確認します。
MUP GW (uplink の経路情報)
N3 から受け取った GTP-U パケットのヘッダが decap されて N6DN VRF の経路情報を参照することがわかります。 BGP による経路情報の広告において N6DN VRF には MUP PE が広告する DN への経路情報が含まれているため、DN へパケットが転送されます。
MUP-GW#sh ip route vrf N3RAN 192.168.172.12/32 Routing entry for 192.168.172.12/32 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a02ae0) Tunnel ID: 229 Tunnel Endpoint: 2001:100:4c:: (System VRF-ID: 0) Last update 02w0d23h ago 2001:100:4c::, Tunnel1 (Tunnel-ID:229), RD 65000:1, System VRF-ID 1, NHD LINK Tunnel1 (38), refcnt 1 MUP-GW#sh segment-routing srv6 sid 2001:100:4c:: SID Function Context Owner State -------------------------- ------------ -------------------------------------------------- ----- --------- 2001:100:4c:: H.M.GTP4.D 'N3RAN':bsid BGP InUse Locator : N3RAN Length : 128 Nexthop : 2001:db8:0:100:41:: Link-ID : 37 Created : Mon Nov 4 20:26:40 2024 (02w1d23h ago) MUP-GW#sh segment-routing srv6 sid 2001:db8:0:100:41:: SID Function Context Owner State -------------------------- ------------ -------------------------------------------------- ----- --------- 2001:db8:0:100:41:: End.DT4 'N6DN':DN lookup BGP InUse Locator : N6DN Length : 128 VRF : N6DN Created : Tue Oct 29 17:32:14 2024 (03w1d01h ago)
MUP GW (downlink の経路情報)
GTP-U ヘッダが decap されて N6DN に転送されてきた UE 向けのパケットは、 GTP encap されて N3RAN へ転送されます。ここで、 System VRF-ID: 1 は N3RANを示しています。
MUP-GW#sh ip route vrf N6DN 10.10.10.2/32 Routing entry for 10.10.10.2/32 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a036d0) Tunnel ID: 229 Tunnel Endpoint: 192.168.173.14 (System VRF-ID: 1) Tunnel Parameter: (GTP encap) System VRF-ID: 1 Endpoint: 192.168.173.14 TEID: 1 QFI: 0x0 Last update 01d01h29m ago 192.168.173.14, Tunnel1 (Tunnel-ID:229), RD 65000:2, System VRF-ID 2, NHD LINK Tunnel1 (36), refcnt 4 MUP-GW#sh ip route vrf N6DN 10.10.10.3/32 Routing entry for 10.10.10.3/32 Known via "bgp", distance 200, metric 0, best, redistributed Encapsulation Information: Tunnel Type: SRv6 Tunnel IF: Tunnel1 (Data: 0xf6a02388) Tunnel ID: 229 Tunnel Endpoint: 192.168.173.12 (System VRF-ID: 1) Tunnel Parameter: (GTP encap) System VRF-ID: 1 Endpoint: 192.168.173.12 TEID: 2 QFI: 0x0 Last update 01d01h28m ago 192.168.173.12, Tunnel1 (Tunnel-ID:229), RD 65000:2, System VRF-ID 2, NHD LINK Tunnel1 (36), refcnt 4
ping による疎通確認 UE 間(10.10.10.2 / 10.10.10.3)とサーバ(192.168.60.12)間で ping を実行した結果を示します。gNB でキャプチャしたGTP-U パケットはこちらです。 下側のgNBでキャプチャした結果を示します。また、SRv6 NW側にはパケットが到達せず、MUP GWで折り返して通信できていることが確認できました。
おわりに
本記事では、我々の環境にて SRv6 MUP の検証を実施した際のネットワークやコントローラの設計、そして5Gネットワークを使用した疎通確認までの一連の流れを紹介いたしました。特にSRv6 MUPによる経路遅延の削減効果が大きいUE間通信について検証し、動作を確認しました。今後もSRv6 MUPの動向について、継続的にウォッチしていきます。