hiroportation

ITの話だったり、音楽の話、便利なガジェットの話題などを発信しています

2021年 SRv6 入門

SRv6について2021年までに取集した情報を整理して入門書を作りました。 とりあえずSRv6に触れたい方向けの内容になっています。


1. SRv6 概要


1.1. SRv6 とは

SRv6とは「Segment Routing over IPv6」の略でセグメントルーティングとIPv6を合わしたNW技術になります。 2017年あたりから多くの https://www.janog.gr.jp/meeting/janog43/program/srv6 SRv6を理解するには主に「セグメントルーティング」と「IPv6」を理解する必要があります。


1.1.1. セグメントルーティング

セグメントルーティングとはソース情報(送信元)をベースとして、トラフィックを細かく管理(トラフィックエンジニアリング)することができるネットワークプロトコルです。

ざっくりとしたイメージは以下となります。

image.png

セグメントルーティングでは、ソースから様々なトラフィック制御(ルーティング、QoSなど)が可能になるため、アプリケーションなどと連携するSDNがとても容易になります。


1.1.2. IPv6

IPv6は128ビット長のパケットで 340×1兆×1兆×1兆 のIP割り当てが可能です。(IPv4は43億ほど) 事実上世界中で一意に使われても枯渇することがないとされています。

既に大規模DCやインターネット回線など広く使われており、最近では一般コンシューマ向けのIPv6に対応したモデムやルータなどもよく見かけるようになりました。

http://www.worldipv6launch.org/measurements/


1.2. どういうところで使われているのか?

既に多くのITインフラで利用がはじまってます。

  • データセンタ
  • 固定回線
  • キャリア回線(モバイル回線)

など IPv6には「拡張ヘッダー」と呼ばれる自由に機能を詰め込めるスペースがあり、これを使用することにより SRv6 が実現します。 そのため、プラットフォームがIPv6に対応していればSRv6を利用することができ、導入し易いようです。


1.3. 今どういう状況?

新しい技術でまだまだ発展途上だが、すでに採用済み、検討中の企業は多数。


2. SRv6 詳細

詳細については以下


2.1. SRv6の仕組み

SRv6の主な仕組み

  • SRv6は下記の通り、IPv6ヘッダー内の拡張ヘッダーにセグメントルーティングヘッダー(SRH)を付加することによって実現されている

image.png https://www.rfc-editor.org/rfc/rfc8754.html

  • Segment List について

www.slideshare.net

p23~p27参照


2.2. SRv6 Function

SRv6対応ルータでは様々なコントロールが可能です。

https://tools.ietf.org/html/draft-ietf-spring-srv6-network-programming-28#page-10

function 説明
End Endpoint function
The SRv6 instantiation of a Prefix SID [RFC8402]
End.X Endpoint with Layer-3 cross-connect
The SRv6 instantiation of an Adj SID [RFC8402]
End.T Endpoint with specific IPv6 table lookup
End.DX6 Endpoint with decapsulation and IPv6 cross-connect
Te.g. IPv6-L3VPN (equivalent to per-CE VPN label)
End.DX4 Endpoint with decaps and IPv4 cross-connect
Te.g. IPv4-L3VPN (equivalent to per-CE VPN label)
End.DT6 Endpoint with decapsulation and IPv6 table lookup
Te.g. IPv6-L3VPN (equivalent to per-VRF VPN label)
End.DT4 Endpoint with decapsulation and IPv4 table lookup
Te.g. IPv4-L3VPN (equivalent to per-VRF VPN label)
End.DT46 Endpoint with decapsulation and IP table lookup
Te.g. IP-L3VPN (equivalent to per-VRF VPN label)
End.DX2 Endpoint with decapsulation and L2 cross-connect
Te.g. L2VPN use-case
End.DX2V Endpoint with decaps and VLAN L2 table lookup
Te.g. EVPN Flexible cross-connect use-case
End.DT2U Endpoint with decaps and unicast MAC L2 table lookup
Te.g. EVPN Bridging unicast use-case
End.DT2M Endpoint with decapsulation and L2 table flooding
Te.g. EVPN Bridging BUM use-case with ESI filtering
End.B6.Encaps Endpoint bound to an SRv6 policy with encapsulation
TSRv6 instantiation of a Binding SID
End.B6.Encaps.Red End.B6.Encaps with reduced SRH
TSRv6 instantiation of a Binding SID
End.BM Endpoint bound to an SR-MPLS Policy
TSRv6 instantiation of an SR-MPLS Binding SID


2.3. SRv6 Control Plane

SRv6は宛先(終端)にアクセスするのに、宛先までのセグメントIDと各セグメントID間のIPv6ルーティングによって宛先に到達することができます。 あらかじめトポロジ全体のセグメントIDがわかっていれば良いですが、手動で全パターンを終端に設定していくのは大変です。 通常のIPルーティングと同じでSRv6にもコントロールプレーンがいくつか使えます。

<手動でやる場合の絵を書く>

<自動でやることのメリットを絵にする>


2.4. Flex-Algo (Flexible Algorithm)

セグメントIDをグループ化することによって、各グループに応じたルーティングが可能になります。グループ化すると広報するセグメントIDはグループ内でのやりとりになります。 またこのようなに理論的にネットワーク分割することをネットワークスライシングと呼びます。

f:id:thelarklife1021:20210430053501p:plain
ネットワークスラインシング

https://5g-innovation.com/report/networkslicing-2019-event-report2/


2.5. TI-LFA

障害発生時の高速経路切替(ここではlocal repairを想定)のことで、SRではTI-LFA(Topology Independent – Loop Free Alternate)という機能でこれを実現しています。


2.6. SRv6 OAM (Operation, Administration, and Maintenance)

ping や traceroute といったトラブルシュートなどに役立てるためのSRv6機能のこと。


2.6. 今後のSRv6

現在 SRv6 は主に以下の方法でハンズオンが可能


3.1. iproute2

iproute2 はLinuxで使えるネットワークユーティリティです。 実は日頃使っているipコマンドのことで、既にSRv6を設定するために必要な機能が備わっています。

root@linux:~# ip -6 route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR

(~ snip ~)

ENCAPTYPE := [ mpls | ip | ip6 | seg6 | seg6local ]
ENCAPHDR := [ MPLSLABEL | SEG6HDR ]
SEG6HDR := [ mode SEGMODE ] segs ADDR1,ADDRi,ADDRn [hmac HMACKEYID] [cleanup]
SEGMODE := [ encap | inline ]
ROUTE_GET_FLAGS := [ fibmatch ]

設定には以下のように全てまたは特定のethのカーネル設定が必要になります。

sysctl net.ipv6.conf.all.forwarding=1
sysctl net.ipv6.conf.all.seg6_enabled=1
sysctl net.ipv6.conf.default.seg6_enabled=1
sysctl net.ipv6.conf.eth1.seg6_enabled=1

# 以下コマンドで事後確認
sysctl -a | grep seg6
echo 100 localsid1 >> /etc/iproute2/rt_tables
echo 200 localsid2 >> /etc/iproute2/rt_tables
echo 300 localsid3 >> /etc/iproute2/rt_tables
echo 400 localsid4 >> /etc/iproute2/rt_tables

以下設定で encap、transit、decap それぞれが可能

ip -6 route add 2001:db10::/64 encap seg6 mode encap segs 2001:db2::2,2001:db5::2,2001:db8::2 dev eth1 table localsid1
ip -6 route add 2001:db2::2/128 encap seg6local action End dev eth1
ip -6 route add 2001:db2::1/128 encap seg6local action End.DX6 nh6 2001:db1::1 dev eth1 table localsid1

またコマンド変数の意味は以下になります また、Namespaceと組み合わせて使用することも可能です Namespaceと組み合わせれば一台のホスト上で仮想的に複数台のノードの定義と紐付けが可能になります

image.png


【ハンズオンツール】

以下githubハンズオンツール(構築/デモ手順はリポジトリ内にあります) https://github.com/vn-cdr/srv6-netns-demo

git clone <git repository>
cd srv6-netns-demo
vagrant up
vagrant ssh
sudo su -
bash scripts/01_create-namespaces.sh
bash scripts/02_create-quagga.sh
bash scripts/03_create-ospf6.sh
bash scripts/04_create_srv6.sh

パケットキャプチャで取得した際に下記の通りSRv6 Headerが確認できます f:id:thelarklife1021:20210430112332p:plain


3.2. VPP

FD.ioプロジェクトで管理されているOSS仮想ルータ。 様々な機能を有している仮想ルータですが、RAMを大きく使用するため、個人にて検証する際には注意。 https://docs.fd.io/vpp/17.07/srv6_doc.html


3.3. CML (Cisco Model Lab)

CMLCiscoの様々なルータを自由に構成して検証できる、サンドボックスツールです。 CMLを使えば Nexus-9000v や XRv-9000、ASAv など個人では大きな壁であった、NW-OS使用までの環境を瞬時に用意できます。 https://developer.cisco.com/docs/modeling-labs/#!faq/faq---cisco-modeling-labs-v2x

XRv9000 では利用できるバージョンが既にSRv6に対応しており、個人でSRv6環境を構築できます。

RP/0/RP0/CPU0:xrkv-0#show segment-routing srv6 manager
Fri Apr 30 01:23:03.725 UTC
Parameters:
  SRv6 Enabled: Yes
  Encapsulation:
    Source Address:
      Configured: 2001:db2::1
      Default: 2001:db22::2
    Hop-Limit: 255
    Traffic-class: Default
  Config Op Mode: SRv6
    SID Base Blocks:
        2001:db2:2200::/40
Summary:
  Number of Locators: 1 (1 operational)
  Number of SIDs: 2 (0 stale)
  Max SIDs: 8000
  OOR:
    Thresholds: Green 400, Warning 240
    Status: Resource Available (0 cleared, 0 warnings, 0 full)
Platform Capabilities:
  SRv6: Yes
  TILFA: Yes
  Microloop-Avoidance: Yes
  End Functions:
    End (PSP)
    End.X (PSP)
    End.DX4
    End.DT4
    End.OP
    uN (PSP/USD)
    uA (PSP/USD)
    uDT6
    uDT4
  Transit Functions:
    T
    T.Insert.Red
    T.Encaps.Red
  Security rules:
    SEC-1
    SEC-2
    SEC-3
  Counters:
    CNT-1
    CNT-3
  Signaled parameters:
    Max-SL          : 3
    Max-End-Pop-SRH : 3
    Max-T-Insert    : 3 sids
    Max-T-Encap     : 4 sids
    Max-End-D       : 4
  Configurable parameters (under srv6):
    Encapsulation:
      Source Address: Yes
      Hop-Limit     : value=Yes, propagate=No
      Traffic-class : value=Yes, propagate=Yes
  Max SIDs: 8000
  SID Holdtime: 30 mins
RP/0/RP0/CPU0:xrkv-0#show segment-routing srv6 ?
  locator  Locator information
  manager  SID Manager information
  sid      SID information across all locators(cisco-support)
  trace    Show trace data for SID Manager
RP/0/RP0/CPU0:xrkv-0#

XRv9000を使用したSRv6-EVPNは近日中に検証したいと思います。

以上