Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SRv6 対応の IPFIX exporter を開発した話 / Development of an IPFIX Exporter Supporting SRv6

SRv6 対応の IPFIX exporter を開発した話 / Development of an IPFIX Exporter Supporting SRv6

2023年8月23日のENOG79で発表した「SRv6 対応の IPFIX exporter を開発した話」の講演資料です。
講演詳細についてはこちらをご覧ください。(https://enog.jp/archives/2763

NTT Communications

August 23, 2023
Tweet

More Decks by NTT Communications

Other Decks in Technology

Transcript

  1. © NTT Communications Corporation All Rights Reserved.
    SRv6 対応の IPFIX exporter を開発した話
    NTT コミュニケーションズ株式会社 イノベーションセンター
    三島 航
    2023/08/25 ENOG79

    View Slide

  2. © NTT Communications Corporation All Rights Reserved. 2
    ● 三島 航(watal)
    ○ NTT コミュニケーションズ イノベーションセンター
    ○ 業務内容はネットワーク全般の技術検証と Testbed の開発・運⽤
    ○ ⾼いスケーラビリティを持つ Multi-AS Segment Routing アーキテクチャを開発中
    ■ Keyword: TE / VPN / Service Function Chaining / EPE / Delay Measurement / Pub/Sub
    ■ 要素技術: SR (SRv6/SR-MPLS) / Telemetry / xFlow / MP-BGP / PCEP
    ■ eBPF/XDP ベースの IPFIX exporter を公開中︕本⽇はこちらをご紹介します︕
    • Fluvia Exporter︓https://github.com/nttcom/fluvia
    ○ 過去のENOG
    ■ ENOG74︓Segment Routing ⽤ Stateful-PCE をフルスクラッチで開発した話(三島航)
    ■ ENOG77︓Segment Routing を⽤いた EPE の活⽤事例と GoBGP への実装(三島航, 豊⽥安信, ⾦⾕光⼀郎)
    ⾃⼰紹介
    watal_i27e
    https://github.com/watal

    View Slide

  3. © NTT Communications Corporation All Rights Reserved. 3
    ● 背景
    ○ 開発の経緯 - SRv6 フロー解析の要求
    ● IP Flow Information eXport(IPFIX)
    ○ IPFIX の役割と仕組み
    ○ Export of Segment Routing over IPv6 Information in IPFIX
    ● ⾃作 IPFIX exporter 実装 - Fluvia Exporter
    ○ 設計・実装
    ■ eBPF/XDP
    ■ IPFIX Library
    ○ ユースケース
    ○ 動作デモ
    ● まとめと今後の展望
    ⽬次
    Import
    the library
    Get flow information
    Capture packets and
    aggregate them by flows.
    Send
    records
    (via channel)
    Launch multiple
    goroutines
    Driver
    XDP
    entrypoint
    eBPF
    (capturer.c)
    eBPF maps
    meter.go exporter.go
    CLI fluvia command
    IPFIX
    Library
    Export IPFIX packet
    User land
    Kernel land
    NIC NIC
    Receive
    IP traffic

    View Slide

  4. © NTT Communications Corporation All Rights Reserved. 4
    背景
    ● SRv6 網のフローを取得&解析したい︕
    ○ SR Policy やスライス情報を含めたフロー解析
    ■ E2E のトレーサビリティ
    ■ Fast ReRoute を含めた障害時の追跡など
    ○ フロー毎の遅延 metric を⽤いた⾼度な TE の実現
    ● いくつかの関連技術が存在
    ○ IPFIX on-path Telemetry(draft-ietf-opsawg-ipfix-on-path-telemetry)
    ■ IPFIX を利⽤し hop-by-hop な遅延を計測する技術。draft-ietf-opsawg-ipfix-srv6-srh で SRv6 にも対応
    ■ IOAM (RFC9378) が必要。計測対象は IPv6/NSH/BIER/GRE/Geneve/SR-MPLS/SRv6 のいずれか
    ○ SRv6 Path Tracing(draft-filsfils-spring-path-tracing)
    ■ SRH に中継デバイス・インターフェース ID・per-hop な遅延を記録する技術。計測対象は SRv6 のみ
    ○ Two-Way Active Measurement Protocol(TWAMP, RFC 5357)
    ■ ある区間の遅延を測定し、IGP(IS-ISやOSPF)で広告& metric として利⽤可能な技術。フロー毎の遅延特性を得るには不向き
    → 機能と汎⽤性を考慮し IPFIX on-path Telemetry に期待︕
    CE CE
    ASBR
    P ASBR ASBR
    P
    ASBR
    SFC
    Proxy
    Network
    Function
    PE ASBR PE
    P
    PE
    CE
    CE
    PE PE
    P
    ASBR
    CE
    SR-MPLS domain
    SR-MPLS domain
    SR-MPLS domain
    SRv6 domain
    AS
    AS AS
    AS
    multi-AS SR(JANOG50, JANOG52)

    View Slide

  5. © NTT Communications Corporation All Rights Reserved. 5
    IPFIX exporter を作ろう︕
    ● IETF 116 Hackathon でぴったりのテーマを発⾒︕
    ○ SRv6 Data-Plane Visibility︓IPFIX の SRv6 対応と on-path delay の取得
    ■ 既に FD.io VPP と Huawei VRP には実装が存在
    ■ ⾃分たちの SRv6 ネットワークでは⼀部で Linux + FRRouting をソフトウェアルータとしてを利⽤中
    →eBPF/XDP で動く IPFIX Exporter を作成し、SRv6 機能を搭載しよう︕
    ○ 以降では、我々が作成した実装を元に、IPFIX Exporter の作り⽅と活⽤⽅法をご紹介します
    ○ まずは IPFIX とは何か︖の解説から︕

    View Slide

  6. © NTT Communications Corporation All Rights Reserved. 6
    IP Flow Information eXport(IPFIX)
    ● ネットワーク上の IP フローをエクスポートするプロトコル
    ○ トラフィックの監視・分析のために利⽤
    ○ sFlow・NetFlow・IPFIX などのフロー技術をまとめて xflow と呼称
    ● フローデータは Record と呼ばれる単位で構造化
    ○ フローの各要素は、Information Element(IE)と呼ばれる単位で扱われる
    ■ IE⼀覧︓https://www.iana.org/assignments/ipfix/ipfix.xhtml
    ○ Record には Template Record・Options・Template Record・Data Record の3種が存在(詳細は P.7)
    ■ Template は定期的、あるいは Data と共にエクスポートされる
    ● Transport は UDP・TCP・SCTP が選択可能(ポート番号︓4739)
    ○ UDP 実装が多い
    ● 過去の ENOG資料を発⾒︕(ENOG12)
    ○ “IPFIX 関連の RFC を読んでみよう” [資料] – 浅間 正和
    ○ “IPFIX 仕様と実装 〜ハマった例も交えて〜” [資料] – ⽥島 弘隆

    View Slide

  7. © NTT Communications Corporation All Rights Reserved. 7
    IPFIX - Template Record と Data Record
    ● Template Record
    ○ フローのフォーマットを定義するための Record。基本的なフロー情報を定義
    ● Options Template Record
    ○ そのフローに付随する追加の情報を扱うための Template Record
    ● Data Record
    ○ 実際のフロー情報。Template で定義されたフォーマットでデータを格納
    ○ 異なるフローを1つの Data Record に格納可能
    Set ID︓2 (Template Record)
    Template ID はこの例では256
    Set ID は対応する Template
    ID
    (この例では256)
    Template に従いデータを格納。
    この例では3つのフローを
    1つの Data Record で送信
    フローに含まれる IE とLength

    View Slide

  8. © NTT Communications Corporation All Rights Reserved. 8
    Export of Segment Routing over IPv6 Information in IPFIX
    ● https://datatracker.ietf.org/doc/draft-ietf-opsawg-ipfix-srv6-srh/
    ○ SRv6 のフローを扱うため、下記11種の IE を定義
    ■ srhFlagsIPv6︓SRH の Flags フィールド
    ■ srhTagIPv6︓SRH の Tag フィールド
    ■ srhSegmentIPv6︓SID(ipv6address)
    ■ srhActiveSegmentIPv6︓Active Segment
    ■ srhSegmentIPv6BasicList︓Segment List(basicList)
    ■ srhSegmentIPv6ListSection︓Segment List(octetArray)
    ■ srhSegmentsIPv6Left︓SRH の Segment Left
    ■ srhIPv6Section︓SRH 全体(octetArray)
    ■ srhIPv6ActiveSegmentType︓Active Segment の学習⽅式
    ■ srhSegmentIPv6LocatorLength︓Locator ⻑
    ■ srhSegmentIPv6EndpointBehavior︓SID が表す behavior の番号
    ● 参考︓IPFIX のデータ型について
    ○ basicList︓同じデータ型の IE を複数まとめるためのデータ型。データは構造化されている
    ○ octetArray︓バイト列を格納するためのデータ型。データはバイト列がそのまま格納される
    参考︓SRH format(RFC 8754)

    View Slide

  9. © NTT Communications Corporation All Rights Reserved. 9
    IETF Hackathon
    ● IETF 標準の実験的な実装を作成するための Hackathon
    ○ 各⾃がテーマを選びチームを作成、I-D の実装を作成
    ● IETF116 Yokohama と IETF117 San Francisco に参加
    ○ IETF116︓SRv6 Data-Plane Visibility
    ○ IETF117︓IPFIX Exporter (SRv6 / On-path delay) w/eBPF
    ● IETF116 では 0 から Fluvia Exporter を実装、
    IETF117 では srv6-srh の相互接続(WireShark, nfacct)を完遂 & on-path delay に着⼿︕
    ● IETF116 では BBSakura Networks 株式会社の早坂さん(@takemio)に協⼒いただき、
    eBPF のモック作成や実装のアドバイスをいただきました︕ありがとうございます︕

    View Slide

  10. © NTT Communications Corporation All Rights Reserved. 10
    Fluvia Exporter
    ● Linux など eBPF/XDP 環境で動作する IPFIX exporter + Go の IPFIX Library
    ○ capturer・meter・exporter の3つのコンポーネントによるシンプルなデザイン
    ● OSS 公開済み(MIT)
    ○ https://github.com/nttcom/fluvia
    ● SRv6 対応
    ○ packetDeltaCount & 下記の srv6-srh IE に対応
    ■ srhActiveSegmentIPv6
    ■ srhSegmentsIPv6Left
    ■ srhFlagsIPv6
    ■ srhTagIPv6
    ■ srhSegmentIPv6BasicList

    View Slide

  11. © NTT Communications Corporation All Rights Reserved. 11
    ● IPFIX exporter の構造を下記のコンポーネント群として整理
    ○ capturer︓IP Traffic を取得し、meter に送信
    ○ meter︓フローをまとめ、Record を作成、exporter に送信
    ○ exporter︓IPFIX Library を参照し、UDP でサーバに向けて IPFIX をエクスポート
    ○ IPFIX Library︓IE の構造や Template/Data の作成、UDP の送信など IPFIX exporter に必要な機能を提供
    Fluvia Exporter - 設計
    NIC NIC
    capturer meter exporter
    IPFIX
    Library
    Import
    the library
    Design of Fluvia Exporter

    View Slide

  12. © NTT Communications Corporation All Rights Reserved. 12
    eBPF/XDP
    ● extended Berkeley Packet Filter(eBPF)︓カーネル内でプログラムを実⾏する技術の⼀つ
    ○ カーネルの変更やモジュールを追加することなく、パケットフィルタ処理を記述可能
    ■ BPF プログラムはカーネルランドの仮想マシンで実⾏される
    ○ eBPF map と呼ばれる仕組みで、他 eBPF プログラムやユーザランドのプログラムと情報交換可能
    ● eXpress Data Path(XDP)︓⾼速なネットワークパケット処理を⾏うための基盤
    ○ NIC Driver 等にアタッチし、カーネルの network stack をバイパスした⾼速パケット処理を実現
    ○ eBPF 経由でのパケット操作を提供
    ● Fluvia Exporter では、eBPF/XDP をパケットキャプチャを⽬的とし利⽤

    View Slide

  13. © NTT Communications Corporation All Rights Reserved. 13
    ● eBPF/XDP を利⽤し、Go(+ ⼀部 C)で実装
    ○ fluviaコマンド︓Fluvia Exporter の起動コマンド。meter.go、exporter.goを⽴ち上げる
    ○ capturer︓NIC アタッチした eBPF プログラムで パケットをキャプチャし、key/value を eBPF map に書き込み
    ○ meter︓key/value の組を Record ごとの構造体を作成し、exporter に送信
    ○ exporter︓サーバとセッションを構築し、channel から受信した Record を IPFIX としてエクスポート
    Fluvia Exporter - 実装
    Import
    the library
    Get flow information
    Capture packets and
    aggregate them by flows.
    Send
    records
    (via channel)
    Launch multiple
    goroutines
    Implementation of Fluvia Exporter
    Driver
    XDP
    entrypoint
    eBPF
    (capturer.c)
    eBPF maps
    meter.go exporter.go
    CLI fluvia command
    IPFIX
    Library
    Export IPFIX packet
    User land
    Kernel land
    NIC NIC
    Receive
    IP traffic

    View Slide

  14. © NTT Communications Corporation All Rights Reserved. 14
    IPFIX Library - IE 実装例
    ● IE の実装には、取得したパケットのパースと、Data/Template Record の⽣成処理が必要
    ○ パース処理の追加、eBPF map key value の追加
    ■ src/main.c, src/xdp_struct.h
    ○ Element ID の定義と IE ごとの Data/Template Record ⽣成処理の追加
    ■ pkg/packet/ipfix/field_value.go
    pkg/packet/ipfix/field_value.go︓例は srhSegmentsIPv6Left の追加例
    src/xdp_struct.h
    src/main.c

    View Slide

  15. © NTT Communications Corporation All Rights Reserved. 15
    ● go install から利⽤可能
    ○ 公式 QuickStart︓https://github.com/nttcom/fluvia/blob/main/docs/sources/getting-started.md
    ■ IPFIX Exporter Daemon としての使い⽅と、IPFIX Exporter Library としての使い⽅が存在
    ○ Fluvia Exporter as a IPFIX Exporter Daemon
    1. go install github.com/nttcom/fluvia/cmd/fluvia@latest
    2. yaml に collector のアドレス・ポート番号と計測対象のインターフェースを指定
    3. sudo fluvia -f fluvia.yaml
    ○ Fluvia Exporter as a Native IPFIX Exporter Library
    ■ Library をインポートすることで、IPFIX Exporter 機能を利⽤可能
    ■ example を tools/exporter で公開
    On-Path Telemetry
    / SRv6 domain
    Fluvia Exporter の使い⽅
    IPFIX collector
    IPFIX
    IPFIX exporter
    & P Router

    View Slide

  16. © NTT Communications Corporation All Rights Reserved. 16
    IPFIX collector - nfacct
    ● pmacct project(http://www.pmacct.net/)が作成する flow collector の OSS
    ○ Github repo︓https://github.com/pmacct/pmacct
    ■ 公式 QuickStart︓https://github.com/pmacct/pmacct/blob/master/QUICKSTART
    ○ NetFlow v5, v9 と IPFIX に対応
    ○ pmacct project にはその他複数の collector ツールが存在
    ○ pcap collector の pmacct
    ○ Streaming Telemetry collector の pmtelemetry
    ○ BMP collector の pmbmpd
    ● データベース(mysql, sqlite3)・Kafka・AMQP など複数のアウトプットプラグインを保有
    ○ conf ファイルで指定し、実⾏時に読み込み
    On-Path Telemetry
    / SRv6 domain
    IPFIX collector
    IPFIX
    IPFIX exporter
    & P Router

    View Slide

  17. © NTT Communications Corporation All Rights Reserved. 17
    ● multi-AS SR を管理するコントローラ兼セルフマネージポータル
    ○ マルチベンダ対応の PCE&Telemetry Collector、複数の metric を⽤いた CSPF
    ○ 可視化とセルフマネージを⽬的とした Web ポータル
    SR domain
    Use Case 1 - マイクロサービスコントローラ
    Telegraf
    w/ module
    SR-MPLS or
    SRv6
    PE Routers
    BGP-LS
    SR-MPLS or
    SRv6
    P Routers
    Kafka
    ZooKeeper
    Publish Subscribe
    InfluxDB Grafana
    Webhook
    Publisher Broker Subscriber
    Data Shaper
    Subscribe
    & Publish
    Self-managing
    User & Operator
    PCEP
    Streaming Telemetry
    / IPFIX / Syslog
    Streaming
    Telemetry
    / IPFIX / Syslog
    Web Proxy
    GoBGP Pola PCE
    Telegraf
    Topology
    Visualizer
    gRPC gRPC
    Subscribe
    SR Controller
    Stateful-PCE
    gRPC
    ⼤規模SR網の運⽤を効率化するネットワークコントローラの開発 (NTT Tech Conference 2022)
    https://speakerdeck.com/watal/da-gui-mo-srwang-falseyun-yong-woxiao-lu-hua-surunetutowakukontororafalsekai-fa-ntt-tech-conference-2022
    各機器から IPFIX を取得

    View Slide

  18. © NTT Communications Corporation All Rights Reserved. 18
    ● IPFIX on-path delay(+IOAM)と PCE との連携
    ○ フロー毎に⽚⽅向の hop-by-hop な遅延を取得、経路計算の metric として利⽤
    ■ フロー単位での SR Policy 適⽤と組み合わせ、アプリケーション毎に最適化を実現
    ■ cf. SRv6 Path Tracing
    Use Case 2 - コントローラでの遅延 metric の利⽤
    On-Path Telemetry domain / SRv6 domain
    PE Router 1 P Router
    with Fluvia Exporter
    PE Router 2
    IPFIX collector
    PCE
    SR Controller
    PCEP
    BGP-LS
    metric
    IPFIX
    SRv6 Packet

    View Slide

  19. © NTT Communications Corporation All Rights Reserved. 19
    ● フロー毎の hop-by-hop 遅延を IPFIX で広告する技術
    ○ https://datatracker.ietf.org/doc/draft-ietf-opsawg-ipfix-on-path-telemetry/
    ○ IOAM の Timestampと組み合わせて利⽤
    IPFIX collector (nfacct)
    On-Path Telemetry Domain / SRv6 Domain
    参考︓IPFIX on-path delay
    PE P (Linux Router)
    with Fluvia Exporter
    IPFIX
    (SRv6 & on-path delay Ext.)
    SRv6 Packet with
    IOAM Timestamp
    D1
    D2
    D3
    P (Linux Router)
    with Fluvia Exporter
    P (Linux Router)
    with Fluvia Exporter
    図は Fluvia Exporter + nfacct での実装例

    View Slide

  20. © NTT Communications Corporation All Rights Reserved. 20
    ● Fluvia Exporter を⽤いた SRv6 Packet のフロー情報取得
    1. P ルータで Fluvia Exporter を起動し、IPFIX をエクスポート
    2. collector で IPFIX パケットを取得し、WireShark で解析
    デモ
    On-Path Telemetry domain / SRv6 domain
    PE Router 1 P Router
    with Fluvia Exporter
    PE Router 2
    IPFIX
    IPFIX collector
    IPFIX パケットを解析
    SRv6 パケットを送信
    SRv6 Packet

    View Slide

  21. © NTT Communications Corporation All Rights Reserved. 21
    参考︓SRv6 フローの例
    ● I-D には Template Record と Optional Template Record が存在(例は Template のみ)
    ○ Template Record(SET ID = 2)を確認
    ■ 対象の IE は図中にある srhFlagsIPv6・srhTagIPv6・srhActiveSegmentIPv6・srhSegmentIPv6BasicList
    ● また、VPP・VRP が実装済の srhSegmentsIPv6Left も併せて実装済
    ● packetDeltaCount でパケット数を確認
    出典︓https://datatracker.ietf.org/doc/draft-ietf-opsawg-ipfix-srv6-srh/

    View Slide

  22. © NTT Communications Corporation All Rights Reserved. 22
    デモ
    当⽇のみ公開

    View Slide

  23. © NTT Communications Corporation All Rights Reserved. 23
    Future Work
    ● On-path delay の実装︓Export of On-Path Delay in IPFIX
    ○ IOAM 情報の取得と delay の計算(Use Case 2)
    ● 各種 IE の追加実装
    ○ 特に IS-IS・BGP・ICMP など、必要な機能の追加
    ○ eBPF プログラムの追加実装(パケットのパース処理・eBPF map の key/value を追加)
    ● PCE との連携
    ○ より⾼度な TE の実現(Use Case 1・2)
    ○ gRPC を介した情報共有
    https://github.com/nttcom/pola

    View Slide

  24. © NTT Communications Corporation All Rights Reserved. 24
    まとめ
    ● ⾃作のIPFIX exporter、Fluvia Exporter を開発し、OSS として公開
    ○ SRv6 フロー情報のエクスポートが可能
    ● ⾼度な TE など、今後の活⽤を期待
    ○ PCE と組み合わせた、遅延 metric の活⽤
    ○ フロー毎のトレース、障害時の解析
    ● 今後は on-path delay や各種 IE の追加実装を⽬指す
    ● 是⾮お⼿元の SRv6 ネットワークでご活⽤ください︕
    ○ PR もお待ちしています︕

    View Slide

  25. © NTT Communications Corporation All Rights Reserved. 25
    最後に
    ● ⼀緒に開発業務に取り組む仲間を募集中︕
    ○ ジョブ型採⽤: https://hrmos.co/pages/nttcom0033/jobs/1692786
    ○ ⼤規模なネットワーク開発、Multi-AS SRアーキテクチャに興味がある⽅
    ○ コントロールプレーン・データプレーン技術の開発に興味がある⽅
    ○ ぜひ⼀緒に最先端ネットワークの技術開発に取り組みましょう︕
    ● Multi-AS SR 連載記事再開︕
    ○ 各種 SR 技術(TE/VPN)の概要から検証までを紹介
    ■ 実機に投⼊したコンフィグや show 結果も併せて掲載
    ■ Cisco・Juniper・Nokia の3ベンダを⽤いた相互接続検証
    ■ 隔週で連載中︕

    View Slide