2023年8月23日のENOG79で発表した「SRv6 対応の IPFIX exporter を開発した話」の講演資料です。 講演詳細についてはこちらをご覧ください。(https://enog.jp/archives/2763)
© NTT Communications Corporation All Rights Reserved.SRv6 対応の IPFIX exporter を開発した話NTT コミュニケーションズ株式会社 イノベーションセンター三島 航2023/08/25 ENOG79
View Slide
© 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_i27ehttps://github.com/watal
© 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○ ユースケース○ 動作デモ● まとめと今後の展望⽬次Importthe libraryGet flow informationCapture packets andaggregate them by flows.Sendrecords(via channel)Launch multiplegoroutinesDriverXDPentrypointeBPF(capturer.c)eBPF mapsmeter.go exporter.goCLI fluvia commandIPFIXLibraryExport IPFIX packetUser landKernel landNIC NICReceiveIP traffic
© 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 CEASBRP ASBR ASBRPASBRSFCProxyNetworkFunctionPE ASBR PEPPECECEPE PEPASBRCESR-MPLS domainSR-MPLS domainSR-MPLS domainSRv6 domainASAS ASASmulti-AS SR(JANOG50, JANOG52)
© NTT Communications Corporation All Rights Reserved. 5IPFIX 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 とは何か︖の解説から︕
© NTT Communications Corporation All Rights Reserved. 6IP 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 仕様と実装 〜ハマった例も交えて〜” [資料] – ⽥島 弘隆
© NTT Communications Corporation All Rights Reserved. 7IPFIX - 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 はこの例では256Set ID は対応する TemplateID(この例では256)Template に従いデータを格納。この例では3つのフローを1つの Data Record で送信フローに含まれる IE とLength
© NTT Communications Corporation All Rights Reserved. 8Export 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)
© NTT Communications Corporation All Rights Reserved. 9IETF 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 のモック作成や実装のアドバイスをいただきました︕ありがとうございます︕
© NTT Communications Corporation All Rights Reserved. 10Fluvia 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
© 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 NICcapturer meter exporterIPFIXLibraryImportthe libraryDesign of Fluvia Exporter
© NTT Communications Corporation All Rights Reserved. 12eBPF/XDP● extended Berkeley Packet Filter(eBPF)︓カーネル内でプログラムを実⾏する技術の⼀つ○ カーネルの変更やモジュールを追加することなく、パケットフィルタ処理を記述可能■ BPF プログラムはカーネルランドの仮想マシンで実⾏される○ eBPF map と呼ばれる仕組みで、他 eBPF プログラムやユーザランドのプログラムと情報交換可能● eXpress Data Path(XDP)︓⾼速なネットワークパケット処理を⾏うための基盤○ NIC Driver 等にアタッチし、カーネルの network stack をバイパスした⾼速パケット処理を実現○ eBPF 経由でのパケット操作を提供● Fluvia Exporter では、eBPF/XDP をパケットキャプチャを⽬的とし利⽤
© 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 - 実装Importthe libraryGet flow informationCapture packets andaggregate them by flows.Sendrecords(via channel)Launch multiplegoroutinesImplementation of Fluvia ExporterDriverXDPentrypointeBPF(capturer.c)eBPF mapsmeter.go exporter.goCLI fluvia commandIPFIXLibraryExport IPFIX packetUser landKernel landNIC NICReceiveIP traffic
© NTT Communications Corporation All Rights Reserved. 14IPFIX 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.gopkg/packet/ipfix/field_value.go︓例は srhSegmentsIPv6Left の追加例src/xdp_struct.hsrc/main.c
© 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 Daemon1. go install github.com/nttcom/fluvia/cmd/fluvia@latest2. 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 domainFluvia Exporter の使い⽅IPFIX collectorIPFIXIPFIX exporter& P Router
© NTT Communications Corporation All Rights Reserved. 16IPFIX 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 domainIPFIX collectorIPFIXIPFIX exporter& P Router
© NTT Communications Corporation All Rights Reserved. 17● multi-AS SR を管理するコントローラ兼セルフマネージポータル○ マルチベンダ対応の PCE&Telemetry Collector、複数の metric を⽤いた CSPF○ 可視化とセルフマネージを⽬的とした Web ポータルSR domainUse Case 1 - マイクロサービスコントローラTelegrafw/ moduleSR-MPLS orSRv6PE RoutersBGP-LSSR-MPLS orSRv6P RoutersKafkaZooKeeperPublish SubscribeInfluxDB GrafanaWebhookPublisher Broker SubscriberData ShaperSubscribe& PublishSelf-managingUser & OperatorPCEPStreaming Telemetry/ IPFIX / SyslogStreamingTelemetry/ IPFIX / SyslogWeb ProxyGoBGP Pola PCETelegrafTopologyVisualizergRPC gRPCSubscribeSR ControllerStateful-PCEgRPC⼤規模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 を取得
© NTT Communications Corporation All Rights Reserved. 18● IPFIX on-path delay(+IOAM)と PCE との連携○ フロー毎に⽚⽅向の hop-by-hop な遅延を取得、経路計算の metric として利⽤■ フロー単位での SR Policy 適⽤と組み合わせ、アプリケーション毎に最適化を実現■ cf. SRv6 Path TracingUse Case 2 - コントローラでの遅延 metric の利⽤On-Path Telemetry domain / SRv6 domainPE Router 1 P Routerwith Fluvia ExporterPE Router 2IPFIX collectorPCESR ControllerPCEPBGP-LSmetricIPFIXSRv6 Packet
© 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 delayPE P (Linux Router)with Fluvia ExporterIPFIX(SRv6 & on-path delay Ext.)SRv6 Packet withIOAM TimestampD1D2D3P (Linux Router)with Fluvia ExporterP (Linux Router)with Fluvia Exporter図は Fluvia Exporter + nfacct での実装例
© 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 domainPE Router 1 P Routerwith Fluvia ExporterPE Router 2IPFIXIPFIX collectorIPFIX パケットを解析SRv6 パケットを送信SRv6 Packet
© 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/
© NTT Communications Corporation All Rights Reserved. 22デモ当⽇のみ公開
© NTT Communications Corporation All Rights Reserved. 23Future 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
© NTT Communications Corporation All Rights Reserved. 24まとめ● ⾃作のIPFIX exporter、Fluvia Exporter を開発し、OSS として公開○ SRv6 フロー情報のエクスポートが可能● ⾼度な TE など、今後の活⽤を期待○ PCE と組み合わせた、遅延 metric の活⽤○ フロー毎のトレース、障害時の解析● 今後は on-path delay や各種 IE の追加実装を⽬指す● 是⾮お⼿元の SRv6 ネットワークでご活⽤ください︕○ PR もお待ちしています︕
© 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ベンダを⽤いた相互接続検証■ 隔週で連載中︕