MPLS網にSegment Routingを適用してみよう ③SRの独自機能

ビジネス開発本部 第3応用技術部
第3チーム
高田 聡士

Segment Routing(以下、SR)も登場からそこそこ年月が経過し、その概要や利点もかなり広まってきています。特にMPLS環境に関しては仕様/定義が出揃い、機器への実装も進んでいるため、使用に対してReadyな状態となっています。実際、国内においてもSegment Routingを使用した商用Network構成に関するニュースリリースも見受けられる様になりました。しかしながらSRの概要は知っていても実際にどの様に適用していくのかについては曖昧な方も多いかと思います。本コラムではその様な方を対象に、MPLS環境にSRを適用する手法について3回に渡って出来るだけ具体的に伝えて行きたいと考えています。

連載インデックス

前回はSRでTE環境を実現するための手法としてRouter自身でPathを制御する方法とPCEPを使って外部のControllerからPathを制御する方法の2つのパターンについて説明しました。
連載最後となる今回はMPLS網でこれまで用いられてきたLDP及びRSVP-TEには無いSRの独自機能について見ていきます。

[SR適用の流れ]

今回も各手順の説明と合わせてコア系Networkで良く使用されるCisco ASR9000(6.4.2)、Juniper MX(18.1R1.9)、Nokia7750 SR(16.0.R5)での設定方法についても簡単に紹介します。
(注意)
各機器の設定内容は括弧内のOS version時のものとなります。
そのため、最新version の内容とは異なっている場合もあります。

ⅰ.Anycast-SID

■機能概要
Anycast-SID はPrefix-SID の一種であり、複数の異なる Prefix に同一の SID を割り当てることが出来る機能です。
Anycast-SID を使用すると、例えば2つの事なる Node に対して同じ SID を割り当てることが可能となります。

<Anycast-SID の適用例>

MPLS の transport label として Anycast-SID が指定されている場合、Packet を受け取ったRouterは同じ Anycast-SID が適用されている Prefix(Node に適用している場合には Node)のうちmetric が小さい方の Prefix(Node)に向けて Packet を転送します。
この特性を利用して、通信に対して次のような制御を行うことが可能となります。

① 負荷分散
ある宛先への通信に対して transport label にAnycast-SID を含める事により、同じ Anycast-SID を適用された Prefix(Node)間での負荷分散を実現することが出来ます。
下の図を使って具体的に説明します。


Site A への通信を行う packet に対して Node2 と Node3 に適用した Anycast-SID:20001 の label を付与します。
この Packet が Node1 に到達した場合、同じ Anycast-SID を持つ Node2 と Node3 のうちNode1 から見てより小さいmetric を持つ Node2 に向けてPacket を転送します。
Packet が Node4 に到達した場合は同じ理由で Node3 に向けて Packet を転送します。
この様な動きになるため、Node2 と Node3 での負荷分散を実現することが可能となります。

② 冗長構成
先の負荷分散と同じ様にある宛先への通信に対して transport label に Anycast-SID を含める事により、同じ Anycast-SID を適用された Prefix(Node)間での冗長構成を実現することが出来ます。
こちらも下の図を使って具体的に説明します。


Anycast-SID:20001 の label を使用してNode4 から Node3 経由で Site A へ通信を行っているとします。
この状況でNode4 から Node3 への通信が行えなくなる様な障害が発生すると、Node4 はNode3 と同じ Anycast-SID を持つNode2 に Packet の転送先を切り替えることができます。
この様な動きにより、Node2 と Node3 とで冗長構成を組むことが可能となります。

■Anycast-SID 設定コマンド
(例:IS-ISの場合)
各機器での具体的な設定コマンドを紹介します。

<Cisco ASR9000>

interface Loopback1
 ipv4 address 1.1.1.100 255.255.255.255
!
router isis 1
 interface Loopback1
  address-family ipv4 unicast
   prefix-sid index 100 n-flag-clear
 !
!

・loopback0 では無いloopback interface に対して ip address を設定
(ここではloopback1)
・interface loopback1 に対してSID を設定
・n-flag-clear を付けることでNode-SIDでは無いことを示す
・複数のNode に同じ設定を行うことで Anycast-SID として動作

<Juniper MX>

interfaces {
 lo0 {
  unit 0 {
   family inet {
    address 1.1.1.100/32;
   }
  }
 }
}
policy-options {
 policy-statement anycast-sid {
  term 1 {
   from {
    route-filter 1.1.1.100/32 exact;
   }
   then {
    prefix-segment index 100;
    accept;
   }
  }
 }
}
protocols {
 isis {
  export anycast-sid;
 }
}

・lo0.0 にAnycast-SID 用の ip address を設定
・policy 設定を使用してAnycast-SID 用のip address に対してSID を割り当て
・protocolに Anycast-SID のpolicy を適用
・複数のNode に同じ設定を行うことで Anycast-SID として動作

<Nokia 7750SR>

#————————————————–
echo “IP Configuration”
#————————————————–
interface “anycast-sid”
 address 1.1.1.100/32
 loopback
 no shutdown
exit
#————————————————–
echo “ISIS Configuration”
#————————————————–
isis 0
 interface “anycast-sid”
  ipv4-node-sid index 100 clear-n-flag
  exit
  no shutdown
 exit
 no shutdown
exit

・Anycast-SID 用のInterface を作成し、loopback として動作する様に設定
・作成したInterface に対してSID を設定
・clear-n-flag を付けることでNode-SIDでは無いことを示す
・複数のNode に同じ設定を行うことで Anycast-SID として動作

ⅱ.LDP interworking

■機能定義
LDP interworking と言っていますがこれはその様な単一の機能がある訳ではありません。
本コラム内では ”SR で構成された Network(以下 SR-NW) と LDP で構成された Network(以下 LDP-NW) との間で相互に通信することを可能にするための機能の総称” を ”LDP interworking” と定義して説明させていただきます。

■機能概要
SR-NW と LDP-NW の間で相互接続を実現するためには3つの解決すべき問題があります。
この3つの問題の内容とそれらを解決する LDP interworking 機能について順に説明していきます。

Ⅰ.LDP-NW にあるNodeに対するNode-SID割当と学習
SRでは通信を行う際に宛先となる Node の Node-SID を指定する必要があります。
しかしながら宛先となる Node が LDP-NW に存在する場合は Node-SID の設定が行われないため、宛先として指定することが出来ません。
結果としてそのままではSR-NW から LDP-NW 方向の通信は行えない事となります。

この問題を解決するための機能が SRMS (Segment Routing Mapping Server) になります。
SRMS はLDP-NWにある Node のloopback addressにNode-SIDを割り当て、その情報をSR-NW にある 各Nodeに知らせることが出来ます。
SR-NWのNodeはSRMSから受け取ったNode-SIDの情報を使ってLDP-NW のNode を宛先とした通信を行うことが可能となります。

 

Ⅱ.SR-NW にある Node に対するLDP label binding
LDP では通信を行うために、宛先を含む FEC (Forwarding Equivalence Class) の label binding 情報を上流の Node から受け取る必要があります。
しかしながら宛先となる Node が SR-NW に存在する場合はこのlabel bindingとその情報の下流への伝達が行われないため、宛先として指定することが出来ません。
結果としてそのままでは LDP-NW から SR-NW 方向の通信は行えない事となります。

この問題を解決するためには、SRとLDPの両方を動作させているNode(以下 境界ルータ)にSR-NWのprefix 情報(含む 宛先Node)をFEC としてlabel binding を行い、その情報を下流に伝達する機能が必要となります。
この機能があればLDP-NWのNodeは上流Nodeから受け取ったlabel bindingの情報を使ってSR-NW のNode を宛先とした通信を行うことが可能となります。

Ⅲ.SRとLDP の繋ぎ合わせ(stitch)
SR-NW と LDP-NW は MPLS という同じ Forwarding Plane を使用していますが Control Plane は異なっているためそのままでは境界ルータを超えてお互いに通信することが出来ません。

この問題を解決するためには、境界ルータでSRとLDPの繋ぎ合わせ(stitch)を行う機能が必要となります。
この機能があれば SR-NW と LDP-NW の間で境界ルータを越えて相互に通信することが可能となります。

これら3つの問題を全て解決することで SR-NW と LDP-NW の相互接続が実現します。

■LDP interworking 設定コマンド
(例:IS-ISの場合)
各機器での具体的な設定コマンドを紹介します。

<Cisco ASR9000>
◆SRMS設定

segment-routing
 mapping-server
  prefix-sid-map
   address-family ipv4
    1.1.1.1/32 1 range 3

・LDP-NWにあるNodeのloopback addressにNode-SID情報(label番号)を設定
・label番号はindexで指定
・rangeで範囲指定可能
・上記設定では1.1.1.1, 1.1.1.2, 1.1.1.3 に対してそれぞれ index 1, 2, 3 の label 番号が付与される

router isis 1
 address-family ipv4 unicast
  segment-routing prefix-sid-map advertise-local

・SRMSで設定したlabel情報をISIS を通じて配信

◆LDP label binding
・自動で行われるため設定は無し

◆SR LDP stitch
・自動で行われるため設定は無し

<Juniper MX>
◆SRMS設定

routing-options {
 source-packet-routing {
  mapping-server-entry MS {
   prefix-segment-range RG1 {
    start-prefix 1.1.1.1/32;
    start-index 1;
    size 3;
   }
  }
 }
}

・LDP-NWにあるNodeのloopback addressにNode-SID情報(label番号)を設定
・label番号はindexで指定
・rangeで範囲指定可能
・上記設定では1.1.1.1, 1.1.1.2, 1.1.1.3 に対してそれぞれ index 1, 2, 3 の label 番号が付与される

protocols {
 isis {
  source-packet-routing {
   mapping-server MS;
  }
 }
}

・SRMSで設定したmapping-server-entry を指定し、label情報をISIS を通じて配信

◆LDP label binding

protocols {
 ldp {
  interface all;
   sr-mapping-client;
  }
 }

・SR-NWのFECにLDP label をbinding する様に設定
※本コマンドはメーカ資料に記載が見つからないため、正式にサポートされていない可能性があります

◆SR LDP stitch

protocols {
 isis {
  source-packet-routing {
   ldp-stitching;
  }
 }
}

・ISIS にて LDP とのstitch を行う様に設定
※本コマンドはメーカ資料に記載が見つからないため、正式にサポートされていない可能性があります

<Nokia 7750SR>
◆SRMS設定

#————————————————–
echo “ISIS Configuration”
#————————————————–
isis 0
 segment-routing
  mapping-server
   sid-map node-sid index 1 range 3 prefix 1.1.1.1/32 level 2
   no shutdown
  exit

・LDP-NWにあるNodeのloopback addressにNode-SID情報(label番号)を設定
・label番号はindexで指定
・rangeで範囲指定可能
・上記設定では1.1.1.1, 1.1.1.2, 1.1.1.3 に対してそれぞれ index 1, 2, 3 の label 番号が付与される
・SRMSで設定したlabel情報をISIS を通じて配信
・SRMSで設定したmapping-server-entry を指定し、label情報をIGP を通じて配信

◆LDP label binding

#————————————————–
echo “Policy Configuration”
#————————————————–
policy-options
 begin
 policy-statement “bind
  entry 10
   from
    protocol isis
   exit
   action accept
   exit
  exit
 exit
 commit
exit

・ISIS の情報(SR-NWの情報)の受け取りを許可するpolicy を設定

#————————————————–
echo “LDP Configuration”
#————————————————–
ldp
 export-tunnel-table “bind

・LDP に policy を適用し、SR-NW のFEC を label binding の対象として設定

◆SR LDP stitch

#————————————————–
echo “ISIS Configuration”
#————————————————–
isis 0
 segment-routing
  export-tunnel-table ldp

・ISIS にて LDP とのstitch を行う様に設定

ⅲ.EPE

■機能概要
EPE (Egress Peer Engineering) は 自身の Domain から他の Domain へ出ていく通信に対して出口となるNode (Egress Node) が複数ある候補のうちどのBGP Peer経由で通信を行うかを制御することが出来る機能です。
同じ様なことはPBR (Policy Base Routing) などの既存技術でも出来ますが、SRを用いるとより簡単に適用・運用することが出来ます。
SR では Egress Node での他のDomain との BGP Peer を BGP Peering Segment として定義し、この Segment に対する SID 情報を使用することで EPE を実現しています。
SR での EPE の具体的な動作について以下で説明します。

●SR での EPE 動作
まず送信元となるNode (ここではNode A) が EPE に必要な SID 情報を取得するまでの動きを順に見ていきます。

<SID 情報の取得>

① Egress Node にて Node B と Node C に対する BGP Peer を BGP Peering Segment として認識させ、それぞれに対して SID の割当を行う
(ここでは 24001 と 24002)
② Egress Node から BGP Peering Segment の SID 情報と自身の Node-SID 情報を BGP-LS を使って EPE Controller に渡す
③ EPE Controller は Node A から Node B もしくは Node C 経由での通信経路を計算し、必要な label 付与情報を BGP-LU を使って Node A に伝える

続いて EPE により制御される実際の通信の動きを見てみます。

<EPE により制御された通信>

上図の様に Node B を経由する通信に対しては Edge Node の Node-SID を示す ”19002” の label の後に Node B への BGP Peering Segment の SID を示す “24001” の label が付与されます。
対してNode C を経由する通信に対しては同様にEdge Node の Node-SID を示す ”19002” の label の後にこちらはNode C への BGP Peering Segment の SID を示す “24002” の label が付与されます。
どちらの通信も最初の label により Egress Node まで到達し、その後2つ目の label を見てNode B もしくは Node C のどちらかに転送されます。

■EPE 設定コマンド
(例:IS-ISの場合)
各機器での具体的な設定コマンドを紹介します。

<Cisco ASR9000>

router bgp 65001
 neighbor 11.4.6.6
  remote-as 65004
   egress-engineering

・remote-as の下に egress-engineering を設定

<Juniper MX>

protocols {
 bgp {
  group EPE {
   type external;
   family inet {
    unicast;
   }
   peer-as 65200;
   neighbor 200.200.200.20 {
    egress-te;
   }
  }
 }
}

・neighbor の下に egress-te を設定

<Nokia 7750SR>
・メーカ資料より設定情報、及びEPEに関連するIETF draft 「draft-ietf-idr-bgpls-segment-routing-epe」への対応情報を見つけることが出来なかった事から、非対応であると考えられます

LDP及びRSVP-TEには無いSRの独自機能のうち、代表的なものとして Anycast-SID, LDP interworking, EPE の3つを紹介しました。

● Anycast-SID はSR の特徴である ECMP 対応との相乗効果で MPLS 網をこれまでより柔軟に構成することを可能にします。
● LDP interworking は SR-NW と LDP-NW の相互接続を実現することにより、既存 MPLS 網の SR への移行や SR-NW との統合を比較的容易に実現させることを可能にします。
● EPE はユーザやアプリケーションによって接続する ISP を使い分ける様な柔軟なトラッフィク制御を可能にします。

これらの機能を使用できるというのは MPLS 網に SR を適用することで得られるメリットの中でも大きなものではないかと考えています。

まとめ

今回が本連載の最終回となります。
MPLS 網に SR を適用する際の考慮点や手順、実現できる機能などについて3回に渡ってなるべく具体的に説明したつもりですがいかがだったでしょうか。
この記事が皆さんの SR に関する調査や、実際に設定を行われる際の一助となれたなら幸いです。

関連記事

RFC 8402
Segment Routing Architecture
https://www.rfc-editor.org/authors/rfc8402.txt

draft-ietf-spring-segment-routing-ldp-interop-15
https://datatracker.ietf.org/doc/draft-ietf-spring-segment-routing-ldp-interop/?include_text=1

draft-ietf-idr-bgpls-segment-routing-epe-17
https://datatracker.ietf.org/doc/draft-ietf-idr-bgpls-segment-routing-epe/?include_text=1

 

執筆者プロフィール

高田 聡士
ネットワンシステムズ株式会社 ビジネス開発本部 第3応用技術部 第3チーム
SP事業会社のコアネットワークにNIerとして7年弱携わる
当時の主な担当製品はCisco社のCRSシリーズ
6年ほど前に現部署に異動し、Cisco社含めたハイエンドルータ製品を担当
現在はSP-SDN分野に注力中
・情報処理「ネットワークスペシャリスト」
・CCIE RS #50857

イベント/レポート

pagetop