It is the top of the page

Link for moving within the page
To text (c)

このウェブサイトではサイトの利便性の向上のためにクッキーを利用します。サイトの閲覧を続行されるには、クッキーの使用にご同意いただきますようお願いします。
お客様のブラウザの設定によりクッキーの機能を無効にすることもできます。詳細はこちら

The main part starts here.

  1. ナレッジセンター
  2. 匠コラム

「Segment Routing over IPv4ってどうなの?」の詳細

匠コラム
自動化
ネットワーク
データセンター

【目次】

はじめに

2022/10/14(金)に開催されたJANOG50+のライトニングトークにて、「Segment Routing over IPv4ってどうなの?」というタイトルで登壇させて頂いていました。
本記事では、当日の発表にて紹介しきれなかった事項のうち、特に掘り下げたい部位を補足したいと思います。

■イベント概要(JANOGサイトより引用)

名称    JANOG50+ Meeting
日時    2022年10月14日(金) 13:30~18:30 ミーティング(12:30 開場) 19:00~20:30 懇親会
場所    ベルサール渋谷ガーデン
主催    日本ネットワーク・オペレーターズ・グループ
ホスト   インターネットマルチフィード株式会社
登録    "JANOG50+" 参加登録

■登壇プログラム

タイトル  Segment Routing over IPv4ってどうなの?
発表者   平河内 竜樹 (ネットワンシステムズ株式会社)
日時    2022年10月14日(金) 14:00-14:10 (10分)

目次に戻る

発表の概要

発表内容は「IPv4-onlyの環境でTE(Traffic Engineering)/FRR(FastReroute)したい」という要望を想定し、Segment Routingの視点から実現を検討したものでした。
末尾にプレゼンテーション資料の全体があり、必要に応じてご覧頂ければと思います。

紹介した検証データを並べてみると、以下のようになりました。

[1] SR-MPLS over IP

[2] VXLAN over GRE

[3] VXLAN with multiple tunnel endpoint

[1]は、RFC 8663の実装がIPv4 transportにて利用可能であることの確認で、機能の動作検証でした。

この結果では、Egress PEのPrefix-SIDが、UDP上のIPv4アドレスとしてエンコーディングされていることが窺えます。
ただ、この試験ではSIDのスタックによるTE/FRRは確認の範囲外でした。


[2]と[3]は、IPv4のVXLAN Fabricを対象とし、任意のパス選択およびそのTEパスに対するFRRが可能なことの確認でした。

[2]は32-bit SIDのスタックを想定したもので、機能の組み合わせで部分的に模擬した構成に相当します。
[3]は32-bit SIDの使い分けを想定したもので、VXLANのトンネルエンドポイントをVNI単位で指定可能な実装を利用しています。


[2]と[3]のどちらにおいても、IPv4-onlyのトランスポートネットワーク上で、TEパスの形成とその保護が実現されていました。

[3]の構成では、SID段数は一段の範囲内であることが前提になる反面、ECMPのエントロピーもVXLANのUDPでカバーされます。
こちらをSegment Routing的アプローチと呼ぶには些か強引な気もするのですが、[2]と比較して実現のハードルも低いと考えられます。
以降では[3]の構成について、発表当日に割愛してしまった情報を含めて紹介したいと思います。

なお[2]および[3]におけるトポロジの補足事項として、Spineノードの間に直結のリンクが存在しています。
これが無い場合、Spineノードにおけるバックアップパスのネクストホップは宛先ではないLeafノードへ向くことになります。
現在データセンターネットワークで主流と言えるClosトポロジは、同じ階層のノードを結ぶリンクが存在しない構成です。
一方、このリンクがあると、端ではないノード上でローカルリペアを行う際も効率良く転送することができます。
ClosトポロジにフォーカスしたRIFT()では、このリンクはEast-West (E-W) Linkと呼ばれ、オプションとして位置づけられている要素です。

目次に戻る

構成の詳細

前述の試験は、[1]ではJuniper Networks社のvMX、[2][3]ではCisco Systems社のCSR 1000Vを用いて行っていました。

以降では、[3]の構成に関する検証データを紹介します。
まず、トポロジと収容サービスが同一の条件下で、収容対象のVLANが全てECMPで分散される構成についての情報となります。
これはTEを実現する構成との比較という観点で掲載しています。

図1は構成図、表1・表2は各ノードにおける設定の抜粋、表3は設定後の状態情報となります。
IPv4のトランスポートネットワーク上で、各Leafに相当するノード(図1中のR10・R20)が収容するVLANを接続する構成です。
今回はstatic ingress replicationのVXLANを利用し、VNIの値には延伸対象のVLAN IDに5000加算したものを使用しています。

表1:基本設定の抜粋(トランスポート関連)

R1
interface GigabitEthernet2
 mac-address 0000.0000.0001
 load-interval 30
interface GigabitEthernet2.110
 encapsulation dot1Q 110
 ip address 10.1.10.1 255.255.255.0
interface GigabitEthernet2.120
 encapsulation dot1Q 120
 ip address 10.1.20.1 255.255.255.0
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
router bgp 65000
 bgp router-id 10.0.0.1
 network 10.0.0.1 mask 255.255.255.255
 neighbor 10.1.10.10 remote-as 65001
 neighbor 10.1.20.20 remote-as 65002
R2
interface GigabitEthernet2
 mac-address 0000.0000.0002
 load-interval 30
interface GigabitEthernet2.210
 encapsulation dot1Q 210
 ip address 10.2.10.2 255.255.255.0
interface GigabitEthernet2.220
 encapsulation dot1Q 220
 ip address 10.2.20.2 255.255.255.0
interface Loopback0
 ip address 10.0.0.2 255.255.255.255
router bgp 65000
 bgp router-id 10.0.0.2
 network 10.0.0.2 mask 255.255.255.255
 neighbor 10.2.10.10 remote-as 65001
 neighbor 10.2.20.20 remote-as 65002
R10
interface GigabitEthernet2
 mac-address 0000.0000.0010
 load-interval 30
interface GigabitEthernet2.110
 encapsulation dot1Q 110
 ip address 10.1.10.10 255.255.255.0
interface GigabitEthernet3
 mac-address 0000.0000.0010
 load-interval 30
interface GigabitEthernet3.210
 encapsulation dot1Q 210
 ip address 10.2.10.10 255.255.255.0
interface Loopback0
 ip address 10.0.0.10 255.255.255.255
router bgp 65001
 bgp router-id 10.0.0.10
 network 10.0.0.10 mask 255.255.255.255
 neighbor 10.1.10.1 remote-as 65000
 neighbor 10.2.10.2 remote-as 65000
 maximum-paths 32
R20
interface GigabitEthernet2
 mac-address 0000.0000.0020
 load-interval 30
interface GigabitEthernet2.220
 encapsulation dot1Q 220
 ip address 10.2.20.20 255.255.255.0
interface GigabitEthernet3
 mac-address 0000.0000.0020
 load-interval 30
interface GigabitEthernet3.120
 encapsulation dot1Q 120
 ip address 10.1.20.20 255.255.255.0
interface Loopback0
 ip address 10.0.0.20 255.255.255.255
router bgp 65002
 bgp router-id 10.0.0.20
 network 10.0.0.20 mask 255.255.255.255
 neighbor 10.1.20.1 remote-as 65000
 neighbor 10.2.20.2 remote-as 65000
 maximum-paths 32

表2:基本設定の抜粋(サービス)

R10
bridge-domain 5002
 member vni 5002
 member GigabitEthernet1 service-instance 2
bridge-domain 5003
 member vni 5003
 member GigabitEthernet1 service-instance 3
bridge-domain 5004
 member vni 5004
 member GigabitEthernet1 service-instance 4
interface GigabitEthernet1
 load-interval 30
 service instance 2 ethernet
  encapsulation dot1q 2
  rewrite ingress tag pop 1 symmetric
 service instance 3 ethernet
  encapsulation dot1q 3
  rewrite ingress tag pop 1 symmetric
 service instance 4 ethernet
  encapsulation dot1q 4
  rewrite ingress tag pop 1 symmetric
interface nve1
 source-interface Loopback0
 member vni 5002
  ingress-replication 10.0.0.20
 member vni 5003
  ingress-replication 10.0.0.20
 member vni 5004
  ingress-replication 10.0.0.20
R20
bridge-domain 5002
 member vni 5002
 member GigabitEthernet1 service-instance 2
bridge-domain 5003
 member vni 5003
 member GigabitEthernet1 service-instance 3
bridge-domain 5004
 member vni 5004
 member GigabitEthernet1 service-instance 4
interface GigabitEthernet1
 load-interval 30
 service instance 2 ethernet
  encapsulation dot1q 2
  rewrite ingress tag pop 1 symmetric
 service instance 3 ethernet
  encapsulation dot1q 3
  rewrite ingress tag pop 1 symmetric
 service instance 4 ethernet
  encapsulation dot1q 4
  rewrite ingress tag pop 1 symmetric
interface nve1
 source-interface Loopback0
 member vni 5002
  ingress-replication 10.0.0.10
 member vni 5003
  ingress-replication 10.0.0.10
 member vni 5004
  ingress-replication 10.0.0.10


図1:試験の構成図

表3:転送テーブルの状態(追加設定前)

R1

R2

R1#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback0
B        10.0.0.10/32 [20/0] via 10.1.10.10, 00:08:27
B        10.0.0.20/32 [20/0] via 10.1.20.20, 00:08:27
C        10.1.10.0/24 is directly connected, GigabitEthernet2.110
L        10.1.10.1/32 is directly connected, GigabitEthernet2.110
C        10.1.20.0/24 is directly connected, GigabitEthernet2.120
L        10.1.20.1/32 is directly connected, GigabitEthernet2.120
R1#
R2#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
C        10.0.0.2/32 is directly connected, Loopback0
B        10.0.0.10/32 [20/0] via 10.2.10.10, 00:08:15
B        10.0.0.20/32 [20/0] via 10.2.20.20, 00:08:15
C        10.2.10.0/24 is directly connected, GigabitEthernet2.210
L        10.2.10.2/32 is directly connected, GigabitEthernet2.210
C        10.2.20.0/24 is directly connected, GigabitEthernet2.220
L        10.2.20.2/32 is directly connected, GigabitEthernet2.220
R2#

R10

R20

R10#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
B        10.0.0.1/32 [20/0] via 10.1.10.1, 00:08:07
B        10.0.0.2/32 [20/0] via 10.2.10.2, 00:07:55
C        10.0.0.10/32 is directly connected, Loopback0
B        10.0.0.20/32 [20/0] via 10.2.10.2, 00:07:55
                      [20/0] via 10.1.10.1, 00:07:55
C        10.1.10.0/24 is directly connected, GigabitEthernet2.110
L        10.1.10.10/32 is directly connected, GigabitEthernet2.110
C        10.2.10.0/24 is directly connected, GigabitEthernet3.210
L        10.2.10.10/32 is directly connected, GigabitEthernet3.210
R10#
R20#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
B        10.0.0.1/32 [20/0] via 10.1.20.1, 00:08:07
B        10.0.0.2/32 [20/0] via 10.2.20.2, 00:08:06
B        10.0.0.10/32 [20/0] via 10.2.20.2, 00:08:06
                      [20/0] via 10.1.20.1, 00:08:06
C        10.0.0.20/32 is directly connected, Loopback0
C        10.1.20.0/24 is directly connected, GigabitEthernet3.120
L        10.1.20.20/32 is directly connected, GigabitEthernet3.120
C        10.2.20.0/24 is directly connected, GigabitEthernet2.220
L        10.2.20.20/32 is directly connected, GigabitEthernet2.220
R20#

図2はこの状態でトラフィックを印加した結果です。

図2:追加設定前の伝送路(左:R1を経由するプライマリパス上の通信、右:R2を経由するセカンダリパス上の通信)

R10・R20が収容する各VLANの通信が、R1とR2の双方を経由して疎通していることが確認できました。
この時、各VLANの全ての通信はフローベースで分散していることが窺えます。

上記を比較対象として、表4の方針で伝送路を指定するために、各ノードの設定と一部のトポロジを編集しました。

表4:伝送路制御の方針

対象の通信

経由して欲しい伝送路

VLAN 2の通信

R1のノード

(R2は経由しない)

VLAN 3の通信

R2のノード

(R1は経由しない)

VLAN 4の通信

R1およびR2のノード

(R1とR2の間でロードシェアリングを行う)

表5・表6は各ノードにおける設定の抜粋、表7は設定後の状態情報となります。

表5:追加設定の抜粋(トランスポート関連)

R1

interface GigabitEthernet2.12
 encapsulation dot1Q 12
 ip address 10.1.2.1 255.255.255.0
router bgp 65000
 bgp additional-paths install
 neighbor 10.1.2.2 remote-as 65000
 neighbor 10.1.2.2 next-hop-self
 neighbor 10.1.10.10 route-map OUT out
 neighbor 10.1.20.20 route-map OUT out
access-list 2 permit 10.0.0.2
access-list 2 permit 10.0.2.0 0.0.0.255
route-map OUT permit 20
 match ip address 2
 set metric +100
route-map OUT permit 90
 set metric +10

R2

interface GigabitEthernet2.12
 encapsulation dot1Q 12
 ip address 10.1.2.2 255.255.255.0
router bgp 65000
 bgp additional-paths install
 neighbor 10.1.2.1 remote-as 65000
 neighbor 10.1.2.1 next-hop-self
 neighbor 10.2.10.10 route-map OUT out
 neighbor 10.2.20.20 route-map OUT out
access-list 1 permit 10.0.0.1
access-list 1 permit 10.0.1.0 0.0.0.255
route-map OUT permit 10
 match ip address 1
 set metric +100
route-map OUT permit 90
 set metric +10

R10

interface Loopback1
 ip address 10.0.1.10 255.255.255.255
interface Loopback2
 ip address 10.0.2.10 255.255.255.255
router bgp 65001
 bgp additional-paths install
 network 10.0.1.10 mask 255.255.255.255
 network 10.0.2.10 mask 255.255.255.255

R20

interface Loopback1
 ip address 10.0.1.20 255.255.255.255
interface Loopback2
 ip address 10.0.2.20 255.255.255.255
router bgp 65002
 bgp additional-paths install
 network 10.0.1.20 mask 255.255.255.255
 network 10.0.2.20 mask 255.255.255.255

表6:追加設定の抜粋(サービス関連)

R10

no interface nve1
interface nve1 source-interface Loopback1 member vni 5002 ingress-replication 10.0.1.20 interface nve2 source-interface Loopback2 member vni 5003 ingress-replication 10.0.2.20 interface nve3 source-interface Loopback0 member vni 5004 ingress-replication 10.0.0.20

R20

no interface nve1
interface nve1 source-interface Loopback1 member vni 5002 ingress-replication 10.0.1.10 interface nve2 source-interface Loopback2 member vni 5003 ingress-replication 10.0.2.10 interface nve3 source-interface Loopback0 member vni 5004 ingress-replication 10.0.0.10

表7:転送テーブルの状態(追加設定後)

R1

R2

R1#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 14 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback0
B        10.0.0.2/32 [200/0] via 10.1.2.2, 00:01:44
B        10.0.0.10/32 [20/0] via 10.1.10.10, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
B        10.0.0.20/32 [20/0] via 10.1.20.20, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
B        10.0.1.10/32 [20/0] via 10.1.10.10, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
B        10.0.1.20/32 [20/0] via 10.1.20.20, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
B        10.0.2.10/32 [20/0] via 10.1.10.10, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
B        10.0.2.20/32 [20/0] via 10.1.20.20, 00:01:44
                      [RPR][20/0] via 10.1.2.2, 00:01:44
C        10.1.2.0/24 is directly connected, GigabitEthernet2.12
L        10.1.2.1/32 is directly connected, GigabitEthernet2.12
C        10.1.10.0/24 is directly connected, GigabitEthernet2.110
L        10.1.10.1/32 is directly connected, GigabitEthernet2.110
C        10.1.20.0/24 is directly connected, GigabitEthernet2.120
L        10.1.20.1/32 is directly connected, GigabitEthernet2.120
R1#
R2#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 14 subnets, 2 masks
B        10.0.0.1/32 [200/0] via 10.1.2.1, 00:01:44
C        10.0.0.2/32 is directly connected, Loopback0
B        10.0.0.10/32 [20/0] via 10.2.10.10, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
B        10.0.0.20/32 [20/0] via 10.2.20.20, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
B        10.0.1.10/32 [20/0] via 10.2.10.10, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
B        10.0.1.20/32 [20/0] via 10.2.20.20, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
B        10.0.2.10/32 [20/0] via 10.2.10.10, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
B        10.0.2.20/32 [20/0] via 10.2.20.20, 00:01:41
                      [RPR][20/0] via 10.1.2.1, 00:01:41
C        10.1.2.0/24 is directly connected, GigabitEthernet2.12
L        10.1.2.2/32 is directly connected, GigabitEthernet2.12
C        10.2.10.0/24 is directly connected, GigabitEthernet2.210
L        10.2.10.2/32 is directly connected, GigabitEthernet2.210
C        10.2.20.0/24 is directly connected, GigabitEthernet2.220
L        10.2.20.2/32 is directly connected, GigabitEthernet2.220
R2#

R10

R20

R10#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 12 subnets, 2 masks
B        10.0.0.1/32 [20/10] via 10.1.10.1, 00:01:16
                     [RPR][20/100] via 10.2.10.2, 00:01:16
B        10.0.0.2/32 [20/10] via 10.2.10.2, 00:01:39
                     [RPR][20/100] via 10.1.10.1, 00:01:39
C        10.0.0.10/32 is directly connected, Loopback0
B        10.0.0.20/32 [20/10] via 10.2.10.2, 00:01:16
                      [20/10] via 10.1.10.1, 00:01:16
C        10.0.1.10/32 is directly connected, Loopback1
B        10.0.1.20/32 [20/10] via 10.1.10.1, 00:01:16
                      [RPR][20/100] via 10.2.10.2, 00:01:16
C        10.0.2.10/32 is directly connected, Loopback2
B        10.0.2.20/32 [20/10] via 10.2.10.2, 00:01:16
                      [RPR][20/100] via 10.1.10.1, 00:01:16
C        10.1.10.0/24 is directly connected, GigabitEthernet2.110
L        10.1.10.10/32 is directly connected, GigabitEthernet2.110
C        10.2.10.0/24 is directly connected, GigabitEthernet3.210
L        10.2.10.10/32 is directly connected, GigabitEthernet3.210
R10#
R20#show ip route repair-paths
~(snip)~
      10.0.0.0/8 is variably subnetted, 12 subnets, 2 masks
B        10.0.0.1/32 [20/10] via 10.1.20.1, 00:01:16
                     [RPR][20/100] via 10.2.20.2, 00:01:16
B        10.0.0.2/32 [20/10] via 10.2.20.2, 00:01:39
                     [RPR][20/100] via 10.1.20.1, 00:01:39
B        10.0.0.10/32 [20/10] via 10.2.20.2, 00:01:16
                      [20/10] via 10.1.20.1, 00:01:16
C        10.0.0.20/32 is directly connected, Loopback0
B        10.0.1.10/32 [20/10] via 10.1.20.1, 00:01:16
                      [RPR][20/100] via 10.2.20.2, 00:01:16
C        10.0.1.20/32 is directly connected, Loopback1
B        10.0.2.10/32 [20/10] via 10.2.20.2, 00:01:16
                      [RPR][20/100] via 10.1.20.1, 00:01:16
C        10.0.2.20/32 is directly connected, Loopback2
C        10.1.20.0/24 is directly connected, GigabitEthernet3.120
L        10.1.20.20/32 is directly connected, GigabitEthernet3.120
C        10.2.20.0/24 is directly connected, GigabitEthernet2.220
L        10.2.20.20/32 is directly connected, GigabitEthernet2.220
R20#

図3はこの状態でトラフィックを印加した結果です。

図3:追加設定後の伝送路(左:R1を経由するプライマリパス上の通信、右:R2を経由するセカンダリパス上の通信)

各VLANで複数のフローがある中、VLAN 2における全ての通信はR1、VLAN 3における全ての通信はR2を経由していました。
また、VLAN 4の通信はR1とR2の双方を経由しており、フローベースの分散も同時に提供していることが窺えます。

合わせて、VXLANのトンネルエンドポイントに対しては、トランスポートネットワーク上の全ノードでバックアップとなるネクストホップのエントリが保持されていました。
なおBGP ECMPの部位は、BGP PICと同様に、実装次第で規模の依存性は排除される状態となります。
トンネルエンドポイントが膨大な数となる環境や、非オーバーレイのサービスを同時収容する環境に適用した際にも、障害イベントに対しては安定的な高速復旧が期待されます。

上記の結果から、IPv4トランスポートのVXLAN環境でTE/FRRが実現されるパターンを確認できました。
オーバーレイ環境において、エッジノードに複数のアドレスを割り当てた上でそれぞれ個別のメトリック操作を行うことによって伝送路を制御し、IPのFRR機能でバックアップパスを保持する格好です。

実際に適用を検討する際には、「トンネルエンドポイントに割り当て可能なアドレスの数」「マッピング可能なサービスの単位」「コントロールプレーンの対応状況」といった要素を勘案することになり、対応状況は実装によって分かれることが想定されます。
一方、機能や環境条件が噛み合えば、MPLSやコントロールプレーンの拡張を伴わない、IPv4-onlyの環境でもTE/FRRを実現可能なことが示唆される結果となりました。

目次に戻る

おわりに

Traffic Engineeringの要件は、データセンターネットワークにおいても、一定程度挙がる印象です。
本記事で掘り下げた実現手段の一つは、IPネットワークデザインの伝統的なテクニックに行き当たった感はあったものの、発表当日はVXLAN等で利用可能なデータセンタースイッチ製品が存在するのか追い切れていない状態で行っていました。

本記事作成時点も同様の状況ですが、何かしらの経緯でEVPN over SRv6が適用不可といった様な状況下では検討の選択肢になることもあるかと思い、取り急ぎ紹介させていただきました。何かの参考になれば幸いです。

目次に戻る

【Appendix】当日のプレゼンテーション資料

EoF

目次に戻る

Webからのお問い合わせはこちらから

ピックアップ

ナレッジセンターを検索する

カテゴリーで検索

タグで検索