はじめに
こんにちは、田啓文と申します。NTTコミュニケーションズで開催された2週間のインターンシップに参加させていただきました。 普段はSDNアーキテクチャにおけるDDoS検知法について研究しています。
今回のインターンシップでは「次世代のサービスを生み出す検証網Testbedの設計構築業務」をテーマとして、Segment Routingという技術を中心とした様々な検証をしました。
私は学部時代にInter-AS MPLS VPNに関して研究していたため、今回は経験を活かしてL3VPN over SRv6 を検証しました。この記事では、その体験談を記載します。
インターンシップに参加するまでの経緯
日本へ留学する前のことですが、2018年に中国でNTTの求人情報(NTT communications China)を拝見しました。 その時はまだ日本語が流暢に話せず、日本に関する知識もあまりありませんでしたが、そのNTTの求人情報をきっかけに日本の通信企業への関心が高まり、日本への留学を決めました。 そのため、今回インターンシップに参加する際、迷わずNTTコミュニケーションズのインターンに申し込みました。
インターンシップで取り組んだこと
今回のインターンシップでは、Segment Routing(SR)技術とIPv6を融合するSRv6という新しいルーティング技術をCisco機器にて検証しました。
まず前半ではSegment Routingの概要と動作原理を紹介します。
Segment Routing
Segment Routingでは、ネットワークドメインにあるそれぞれのノード、パスなどの転送対象をセグメントという単位で扱い、各ノードはSegment ID(SID)で指示された処理を行いながらパケットを転送します。 パケットに経路制御用のヘッダーを追加して、ノードはそのヘッダーの中にあるラベルを使用した上でフォワーディングを行います。
従来のMPLSには、中間ノードのステートが増加するという課題があります。 そこでSegment Routingを利用することで、ネットワークを簡素化して中間ノードの持つステートを削減し、ネットワークの管理と運用を容易にできます。 更に既存のコントロールプレーンとデータプレーンとの親和性があるために、最近では各領域に幅広く使われ始めています。
以下の図がSRで転送する一例となっています。
SRv6
SRv6は、専用のIPv6ヘッダーを利用し、Segment Routingを実現する技術です。
ヘッダーに含まれる各SIDには、パケットの宛先を示すLocator Field、パケットに適用する機能を示すFunction Fieldが用意されています。
Function Fieldに各種の指示を埋め込むことで、SIDを参照した際に各ノードがどのような処理を行うかを指定できます。
Decap後の処理により、End.DT4、End.DT6、End.DX6、End.DX2などのFunctionが定義されています。
SRv6の利点としてはIPv6ネットワークと共存しつつ、128bitのSIDを用いてFunctionを自由に定義できることによる高い拡張性が挙げられます。
実装内容
Ciscoの環境においてSRv6プロトコルを検証するために、まずはシンプルなネットワークトポロジーを構築します。
SRv6に関わるサービスの中で、今回の検証にはIPv4 L3VPN over SRv6 を選びます。以下の図に作成した検証環境を示します。
最初に軽く検証機器について説明します。HostにはUbuntu20.04.3を2台を使います。Provider Edge(PE)としてCisco IOS-XRv 9000 Router を2台使います。
ルーターにはIOS XR Release 7.4.1を使用するため、コマンドは下記のリンクを参照しました。
Cisco IOS XR 7.4.xConfiguration Guides
検証環境を構築するために、以下の手順に従ってセットアップします。
- 事前準備として各機器のIP addressをセットアップする
- 2つのPEルーターにベーシックなIntermediate System to Intermediate System(IS-IS)をセットアップする
- SRv6用にIS-ISプロトコルへLocatorを発行する追加コマンドを設定する
- L3VPN用のBorder Gateway Protocol(BGP)環境をセットアップする
Host間はIPv4 addressを使用し通信します。簡略化のために、Customer Edge(CE)を省略して、SRv6 domainにPEとするルーター2台のみを用意しました。 各PEにIS-ISプロトコルをInterior Gateway Protocol(IGP)としてセットアップし、VPNのためにBGPもセットアップします。
SRv6が正しく動かせるかどうかを検証するために、Host1からHost2へパケットが正常に発送できることを確認します。 また、SRv6 domainにLocatorとSIDが正しく発行、共有されるかどうかも確認します。
結果
インターンシップ最終日までの取り組みと結果を説明します。
まずはIS-ISを確認します。
以下がPEにおけるLocatorの学習状況です。本ルーターのLocatorの状態がup
となって、さらに反対側のLocatorも学習できています。
この状態が確認できるとIS-ISのセットアップが成功となります。
次にPE側でSIDの発行状況を表示させた結果です。End.DT4
のSIDが存在することを確認できると、BGPのコンフィグに成功したことがわかります。
次のステップはPE2でDecapするEnd.DT4
SIDがPE1に正しく交換されたことを確認します。
以下の図の通り正しく交換されたことが確認できます。ここで、Behavior:19
はEnd.DT4に対応する番号です。
最後はVPN 経路構築について確認します。 上記のCisco Configuration Guidanceを参照すると、SID 情報が載るはずですが、下記の図では載っていません。
最終日でその原因を考えた結果、恐らくIPv4 packetをSRv6 domainを経由し相手へフォワーディングする際に、SRv6のヘッダーが正しくEncapされないのではないかと推測しました。 このEncapが実施できた場合、当初の期待通りIPv4 L3VPN over SRv6 が実現できると推測しています。
インターンシップの感想
インターンシップ前に何回も日本の職場の雰囲気をイメージしましたが、実際に体験するまでは色々と心配していました。 しかし、先輩社員と一緒に過ごした2週間の体験によって、日本に就職したいという気持ちがさらに湧いてきました。 本当にありがとうございます。
今回テーマとして選択したSRv6は最先端の技術です。 そのため、正しく検証するためにはまずSRv6の動作原理を明確に把握しなければ、問題等がありうまく動かない時に、実際にどの部分が足りていないかがわかりません。
一方、SRv6の情報はベンダーのテキスト以外参照できる文献も少ないという現状もあります。エラーが発生した際には、従来の経験が問題点の把握や対応にあたって大変役に立ちました。
今回のインターンを通じて、仕事上では様々な業務やコミュニケーション、経験、また思考力などが非常に大事なことを再発見いたしました。 特にコミュニケーションについては、外国人なので、専門用語や省略語などが難しく、意識して学習する必要があると感じました。
また、今回のインターンをきっかけとして、本物の職場の雰囲気も体験できました。
メンターの竹中さんには、いつも理解しやすい言葉で複雑な専門用語を説明して頂き本当に感謝いたします。
トレーナーとしてではなく、休憩時間の雑談でも親身にアドバイスやお話をして頂きました。
人見知りの私は飲み会の前にずっと心配していましたが、皆様が本当に親切に接してくれましたので、本番の時にチームの方々と盛り上がってたくさんお話ができました。
最後になりますが、二週間のインターンを通じて貴重な経験をさせていただき、改めて竹中さん、三島さん、木村さんに感謝いたします。
メンターからのコメント
メンターを担当したイノベーションセンターの竹中です。2週間のインターンシップお疲れ様でした。
今回のインターンシップにおいて、田さんには我々のチームでの取り組みを理解していただいた後に、興味を持ってもらった部分である Cisco 機器での L3VPN over SRv6 の動作検証に取り組んでいただきました。
インターンシップ初日には SRv6 に関する知識はあまりないとお聞きしていたのですが、持ち前のネットワークに関する知識と探求心、情報を整理し説明/質問する力を存分に活用し、
SRv6 の動作について正確に理解しつつ機器への設定やトラブルシューティングを行い、成果として検証内容を資料にまとめていただきました。
馴染みのない技術に触れながらも、楽しんで次々と技術理解や検証に取り組んでいただけたようでメンターとしても嬉しく思います。
作成いただいた資料は config 例や verificaiton を参考として、今後私たちが行う SRv6 の実用網へのデプロイにおいて活用させていただきます。
このインターンシップを通して得られた様々な経験が今後の田さんの取り組みや意思決定のお役に立てると幸いです。
改めて、インターンシップへのご参加とご活躍、ありがとうございました!