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
  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
  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
  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)
  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 とは何か︖の解説から︕
  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 仕様と実装 〜ハマった例も交えて〜” [資料] – ⽥島 弘隆
  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
  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)
  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 のモック作成や実装のアドバイスをいただきました︕ありがとうございます︕
  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
  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
  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 をパケットキャプチャを⽬的とし利⽤
  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
  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
  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
  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
  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 を取得
  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
  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 での実装例
  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
  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/
  22. © 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
  23. © NTT Communications Corporation All Rights Reserved. 24 まとめ •

    ⾃作のIPFIX exporter、Fluvia Exporter を開発し、OSS として公開 ◦ SRv6 フロー情報のエクスポートが可能 • ⾼度な TE など、今後の活⽤を期待 ◦ PCE と組み合わせた、遅延 metric の活⽤ ◦ フロー毎のトレース、障害時の解析 • 今後は on-path delay や各種 IE の追加実装を⽬指す • 是⾮お⼿元の SRv6 ネットワークでご活⽤ください︕ ◦ PR もお待ちしています︕
  24. © 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ベンダを⽤いた相互接続検証 ▪ 隔週で連載中︕