新卒がCCNAを取得した話

こんにちは、BBSakura Networks株式会社(以降BBSakura)にてOCXサービスのクラウド直接接続まわりを担当してるキムです。

今回は新卒の私がCCNA取得に向けてネットワークの勉強をしたときの話をしようと思います。
私自身、大学・大学院とも情報系であり、ネットワークの授業を取ったことはあるものの、ほぼ忘れかけているくらいのベースで準備を始めました。 (ちなみに、学生時代の時はネットワークはまったく得意ではなく、ネットワークエンジニアになるとは思ったことなかったです)

CCNAとは?

CCNA(Cisco Certified Network Associate)は、Ciscoが主催する資格試験です。(https://www.cisco.com/c/ja_jp/training-events/training-certifications/certifications/associate/ccna.html)
レベルとしてはCCNA(アソシエイト) < CCNP(プロフェッショナル) < CCIE(エキスパート)となっていて、ネットワークエンジニアになるための基礎的な資格という位置付けになっています。試験時間は120分で、ネットワーク基礎からネットワーク自動化まで幅広い範囲から出題されます。

CCNAの出題範囲。"Network Fundamentals 20%, Network Access 20%, IP Connectivity 25%, IP Services 10%, Security FUndamentals 15%, Automation and Programmability"と記載されている。
CCNA出題範囲

問題形式には一択選択問題、多肢選択問題、Drag&Drop問題、シミュレーション問題があります。シミュレーション問題では直接コマンドを打つ必要があるのでコマンドを覚える必要があります。
受験料は2023年8月時点で税込42,900円でした。(去年までは36,960円だったらしいですがまた値上がりしていました、、)
認定期間は取得から3年間となり、資格を維持するためには再試験または高いレベルの資格を取得する必要があります。

CCNAの勉強方法

  • 講義
    会社の研修で受けることができました。CCNAの出題範囲の全体的なイメージを掴むことができてとても役に立ちました。

  • 問題集&過去問サイト
    会社の先輩から問題集をいただきました!(ありがとうございます!)
    勉強した内容の概念の復習から新しい概念を学ぶこともできて、問題集のおかげでだいぶ理解を深めることができました。
    ただ問題集だけでは不安だったため、過去問サイトも利用しました。一日200問ずつ解いて、自分の得意・不得意な問題を確認しました。特に私は書きながら勉強することが好きなタイプなので、不正解だった問題の概念をまとめたりしていました。

    勉強に使ったノート。用語やコマンドについてメモしてある。同じく勉強ノート
    CCNAノート

苦労したところ

  • 出題範囲が広い
    ネットワークの基礎的な知識が出題されるとはいえ、出題範囲が広いため勉強し続けても新しい用語が出てきて苦労しました。特に私は決まった日までにCCNAを取得したいという目標があったため、試験日が近づいてもわからない内容が出てきて不安になったりしていました。
    ただ、勉強し続ければ、どんどん「前見たことある!」が増えてくるので、諦めず勉強し続けるときっと大丈夫だと思います!

  • コマンドを覚えるのが難しい
    ネットワークのコマンドとしてはipconfigくらいしか分かっていなかったので、いきなり多くのコマンドを覚えることが大変でした。特にshow系に似たようなコマンドが多く、このコマンドを入力すればどういう情報が出力されるのかについてがなかなか覚えられなかったです。私の場合何度もコマンドを打つ練習をすることで覚えるようになったので、私みたいに短期間でいろんなコマンドを覚えるためには、とりあえず何回も繰り返して試してみることが重要だと思います。

  • 受験料が高い
    受験料が高いため、落ちたらどうしようというプレッシャーが結構ありました。ただ、そのプレッシャーのおかげで集中して勉強できる面もあったとは思います!

CCNAの準備するあたりで感じたこと

  • 一回で完璧に理解しなくても大丈夫
    勉強する途中で、私の理解能力が低いせいか一度説明を読んだだけでは理解できない部分が多々ありました。最初は頑張ってその説明を完璧に理解してから次に進もうとしていましたが、勉強を続けるにつれて理解できなかった概念は必ずまた出てくるので、出た時に少しずつ理解を深めれば良いという結論に至りました。実際にそうした方が同じ内容をいろんな角度の説明で理解するようになり、効果的に学習することができたと思います!

  • 学んだことあるからこその誤解
    ネットワークを勉強したことがあるという背景はもちろんCCNA取得するためのアドバンテージになりますが、勉強したことあるからこそ注意しなければいけない点もあります。
    私の場合、今まで「分かってるつもり」の知識が却って邪魔になることもありました。例えば、デフォルトゲートウェイとデフォルトルートが一緒だと思っていたので、デフォルトゲートウェイとデフォルトルートの両方が選択肢に出ると両方正解なんじゃないの?ってなって迷ってました。私みたいに概念が曖昧になっていなければ大丈夫だと思いますが、少し不安な方は「分かっているつもり」の概念を見返してもらうと大変勉強になると思います!

  • 略語は英語の意味まで把握しておこう
    ネットワークに限った話ではありませんが、ネットワークを勉強する時にはいろんな英語の略語が出てきます。単に略語自体を覚えるのではなく、英語での意味を理解しておいた方が記憶が長く続きました。(逆に知らない略語が出てきてもどういう単語からきている略語なのかを推測することにも役立つかと思います)

CCNAに挑戦してよかった点

  • 会社のミーティングの話の理解度が格段に上がった!
    CCNAの準備する前には、社内のミーティングで出てくる用語が理解できず、会話の流れを把握することがなかなか難しかったです。
    CCNAの準備をし始めてからは、前より用語が何を理解するのかが分かってきて、(まだまだわからないことはいっぱいですが)だいぶ会話の流れを理解できるようになりました。この点がCCNAに挑戦して一番よかったと感じている部分です。

  • 他の資格にも挑戦する気になった
    CCNA取得前には、資格取得を目標にするつもりはありませんでしたが、CCNAに合格したことをきっかけに他の資格にも興味を持つようになりました。 CCNA取得をスタートに、次はクラウドの資格を取りたいのでAWS Cloud Practitionerに挑戦したいと思っています!

まとめ

CCNAは、ネットワークの幅広い範囲の基礎的な知識を取得するためにおすすめな資格なので、ネットワーク業界で働くことになる新卒の方は是非チャレンジしてみてください!
私もまだまだ初心者であり、一例に過ぎない記事になりますが、少しでも役に立てればと思います。 読んでいただきありがとうございました!

OCXを支える技術 番外編 BBSakuraのCEOがOCX(Open Connectivity eXchange)にかける想い

ご覧いただきありがとうございます。BBSakura Networks CEOの佐々木(@sbsasa)です。

OCX(Open Connectivity eXchange)とは?

OCXはBBSakura Networksが開発したネットワーククラウドのサービスです。

WebのポータルやAPIを通じてオンデマンドにネットワークを作るのに必要なリソースを組み合わせて利用することが可能です。

OCXのイメージ。OCXにDC拠点、インターネット、クラウドサービスなどが接続されている。
OCXのイメージ

OCXの開発を始めたきっかけ

当社の親会社のBBIXでは、2013年、大手携帯事業者、ISP、データセンター/クラウド事業者、コンテンツ事業者の皆様と、クラウドコンピューティングやスマートフォンが中心となる時代に向けた理想的なトラフィックの流通を目的とし、Cloud IX研究会 を立ち上げておりました。

このCloud IX研究会の中で討議されていたアイテムの一つが、BBIXのIX Fabric上で、Cloudやソーシャルゲームプラットフォーマー等の間をオーバーレイのSDN(Software-Defined Network)でオンデマンドに結ぶサービスでした。以下は2013年当時に議論の内容をBBIX社内で説明した際の資料ですが、実はOCXの今のアーキテクチャに非常に似通っております。(笑)

ネットワーク概念を説明するスライド。BBIXのL2IXの上にCloud IX(SDN)が載っていて「論理的に別面で提供」と説明されている。

研究会での議論や実験結果をもとに、BBIX社内で2013年から継続して、事業化の検討を行っていたのですが、「通信事業者」を母体とするBBIXではプラットフォームのソフトウェア開発力が足りず、時間だけが経過した状況でした。そんな中、2019年にBBSakura Networksを設立し、さくらインターネットからのメンバーを受け入れた混合チームができたことで、急速に開発プロジェクトが進むことになります。

通信ネットワークの今後

従来通信ネットワークは人間が人間とコミュニケーションを取るために使われるインフラでしたが、約10年ほど前から、人がデータにアクセスするトラフィック量(North-South Traffic)より、サーバー/データセンター間の通信(East-West Traffic)の方が多くなってきたと言われております。 つまり、これからの通信インフラというのは、人間が使うという観点より、コンピューター・ソフトウェアにとって使いやすいインフラであるべきだと考えております。そこでAPIで制御可能なSoftware-Defined Networkの仮想ネットワークの構築を始めました。

これからデジタルツインと言われる時代を迎え入れるにあたり、現実空間の様々なデータを仮想空間(クラウド)へリアルタイムにアップロードをし、そのシミュレーション結果を現実空間へフィードバックする環境が求められるはずです。そういったデータの流通を実現するための基盤となるネットワークインフラにしていきたいと考えております。

現実空間と仮想空間が、情報収集とフィードバックのループを回している図

OCXで目指す世界

とはいえ、AIやソフトウェアを顧客としたビジネスを始める時代にはまだ少し早いと思っており、まずは「人」が簡単にポータルからオンデマンドに、クラウド、データセンター、アクセスラインや仮想アプライアンスを柔軟に組み合わせてas a ServiceとしてNetworkを構築できるサービスを目指して以下の3つのコンセプトを意識してサービス開発を始めました。

  • 全国カバーのネットワーク
  • 地域を主人公にしたビジネスモデル
  • 「モノ」が中心となった世界におけるNaaS*1のあり方

全国をカバーするネットワーク

OCXはどこでも、誰でも、どんなものでも接続できるプラットフォームを目指しており、「全国網」としてのプラットフォームを構築することを前提にサービスを開始しております。

全国に設置するアクセスポイントにおいて、全地域同一の価格・品質のサービスを提供し、地域間格差のない、クラウドネイティブな通信環境の実現を目指しております。

日本地図上の複数箇所にピンが立っている図

参考: OCX提供拠点一覧

地域発のDX推進

全国をカバーするネットワークを整備するにあたり、自社だけでの展開には限界があります。そこで考えたのが協業によるアクセスポイントの整備です。OCXのOpenという言葉には、全国の様々なエリア・規模・資本の事業者様と協業することで、一つの大きな接続基盤と作り上げたいという思いを込めております。

地域固有の課題を発見し、それをDXにより解決をかけていくため、様々な地域・業種の事業者様と協業し、拠点を開設しております。

政府の掲げる、デジタル田園都市国家構想 を実現するには東京や大阪で享受できる環境と同等のインフラを地域に整備する必要があると考えております。また、そのインフラは税金や補助金などに頼らなくても持続できるものでなければなりません。 OCXでは様々な事業者様の協力のもと、民間の力を結集することで、このインフラ整備を実現し、各地域に東京・大阪同等のインフラを整備することで、地方からのイノベーションを促進し、地方にいるソフトウェア、ネットワークエンジニアの力を借りて、日本のデジタルの力を底上げしていきたいと考えてます!

日本地図上の複数箇所にOCXの拠点が示され、その周りでソフトウェアエンジニアとネットワークエンジニアが働いている絵

コンピューターとネットワークの融合

全国に面としてのネットワークを整備できたら、コンピューターとネットワークサービスのより緊密な融合を図っていきたいと考えております。昔Sun Microsystemsが"The Network is the Computer"という提唱を行なっておりましたが、まさにこの世界を実現していきたいと考えております。 ソフトウェア、コンピューターのためのネットワークの始まりです。 様々なサービスをネットワークと融合されたコンピューターリソースで処理できるよう、これらに必要なソフトウェアの開発も行なっていきます。

様々なデバイス、モノが全てネットワークに接続されるとき、それらのデバイスがニューロンとなり、まるで一つの大きな脳のようになり、自律分散的に自己判断・推論できるようなそんな世界が作れるのではないでしょうか?OCXが完成する時、デジタルツインの実現ができていると信じております。

地球の上空に人間の脳が浮かび、その中にPC、車、信号などが示されているイメージ図

最後に

最後までお読み頂き、ありがとうございました。

連載記事はこの記事についているタグ OCXを支える技術 からお読みいただけます。

我々はまだ入り口でもがいている状況ですが、この基盤を完成させ、また世界へ展開していきたいと考えております。

一緒にサービス・ソフトウェアを作っていくことにご興味いただける方がいらっしゃいましたら、お問い合わせフォームなどから是非ご連絡くださいませ。

*1:NaaSはみずほリサーチ&テクノロジーズ株式会社の商標で、当社は商標の使用許可を得ております。

OCXを支える技術 #2 OCXのネットワークを制御するソフトウェアの仕組み

記事をご覧頂きありがとうございます!BBSakuraにてOCXの開発をリードしている川畑です。

OCXを支える技術の連載2記事目です。

連載記事一覧は、この記事についているタグ #OCXを支える技術 からご覧いただけます。

制御システム・ソフトウェアの構成

制御システムの構成図。フロントエンド、バックエンド、ネットワークの箱が示されており、バックエンドの中にAPI、DB、Workerが描かれており、APIからDBへは「パラメータ投入指示」、WorkerとDBのあいだには「投入指示取」、「投入結果記録」と書かれている。

前回の記事では代表的なOCXのネットワーク接続の機能について紹介しましたが、ここではそのネットワークを制御する心臓部にあたる部分についてお話します。 システムは大きく フロントエンド/認証バックエンド の2つに分けられます。前者はポータルのログイン機能やリソースの購入・設定などのUIを具備したもの、後者はお客様構成情報を管理し、課金を行ったり商用網のネットワーク機器を入力通り間違いなく制御するためのプログラムです。

図をご覧ください。クライアント(お客様のブラウザ)から操作され、ネットワーク機器に設定が投入される一連のフローが記されています。 これを見ると、特にバックエンドについては2つの制御機構があることが分かります。内部の呼称としてそれぞれ APIWorker と呼んでいます。 APIが担っている主な機能は、以下の通りです。

  • システム全体のマスターデータ(物理ポートやVLANなどの在庫となる情報)の管理
  • お客様からのリソース購入・変更・削除の要求を受け付け、適切に精査し、内容に異常が無ければ必要に応じてネットワークへの設定指示情報を生成すること
  • 購入した履歴を管理し、課金データを作りお客様に請求を行うこと

Workerが担っている主な機能は、以下の通りです。

  • データベースに登録された設定指示情報に基づき、担当するネットワーク機器へのconfigを適切に行うこと
  • 同様に、お客様のリソースの開通・閉塞時のデータベース上の状態遷移を取り扱い、適切に情報を更新すること

ネットワーク機器のconfigにはある一定の時間がかかることや、クラウド化されたサービスにおいてリクエスト受付時のリアルタイム性や待ち行列問題を考えたときに、 APIではリクエストを受理・精査した上で「作成や変更・削除要求を問題なく受け付けた」旨のレスポンスは即座に返し、非同期に設定を行うアーキテクチャを考案しました。 マイクロサービス的な構成で行こうという考えも私個人の開発者思想としてありましたが、「同期的にやった場合の平均待ち時間のストレス度合い」についての議論した結果がそれを後押しし、結果的にAPI/Workerで役割を完全に棲み分けた形になりました。

苦労するポイント

システムにおける処理の責任範囲が書かれており、サービスに近いシステムほど責任が増える

同期・非同期に関わらず、受け取るパラメータはお客様による入力値です。最終的にパラメータを受け取るのはサービス網に接続されているサーバやネットワーク機器、はたまたクラウド事業者のAPIであり、受け入れられるパラメータには制限があります。 つまり、お客様の入力値が最終的に投入する機器・APIにおいて受け入れられる値かどうか精査する必要があります。精査には2種類あり、1つ目はパラメータが受け入れられる範囲を超えていないかをチェックすること。2つ目は、既に設定済みの値や同じ値やその範囲に含まれるパラメータを2個以上持つことができない場合のチェックです。開発においては意図的に前者をバリデーション、後者をコンシステンシー(整合性)チェックと呼んでいます。

これら2つの分かりやすい例を紹介します

  • バリデーション
    • 入力されたIPアドレスが 192.168.0.256 の場合(IPアドレスとしてフォーマットが異常値)
    • 入力された帯域の値が 0Gbps の場合(設定できる帯域値として0は許可していない)
    • 入力が必須項目なのに、入力されていない場合(パラメータが無いと機器の設定が受け付けられない)
    • オプションの入力項目について、入力が中途半端な場合(オプションは全て入力するか、しないかの2択の場合がある)
  • コンシステンシーチェック
    • 既に 192.168.0.1/24 のIPアドレスが設定されているルータに、新たに別のインタフェースに 192.168.0.10/24 を設定した場合にはエラーを返す(同じセグメントに属するIPアドレスを、複数のインタフェースに設定できない)
    • ルータのインタフェースに 192.168.0.0/24 のIPアドレスを設定した場合にはエラーを返す(IPアドレスとしてのフォーマットは正しいが、ネットワークアドレスはインタフェースに設定できない)

OCXではお客様の入力値をポータル画面を介して受け付けているため、まずはここで入力値のバリデーションを行います。事前にUIチームに「この範囲から外れた値は異常値なので受け付けないで欲しい」という値を共有し、入力画面での異常値を受け付けないように開発してもらいます。 しかし開発途中で受け入れる値が変わることもあり、共有が漏れると異常値がそのままAPIへ渡ることがあります。

加えて、パラメータの中には「組み合わせ」でバリデーションを行うものもあり、単体で見ると正常値なのに組み合わせると異常値であるという場合もあり、バリデーションも一筋縄ではいきません。 更にコンシステンシーチェックまでやるとコード量が膨大になるため、入力画面はプレチェックとして捉え、本格的なチェックはAPIが担当しています。

APIやWorkerのバリデーション・整合性チェックの図が書かれている

さて、ここにきて非同期アーキテクチャを採用した最大の難関が待ち受けます。 フロントのバリデーションをすり抜けた値はAPI側で95%程度は救うことができるのですが、稀に5%くらいは考慮漏れ等によって機器まで到達してしまうことがあります(これをエッジケースと呼んでいます) こうなった場合が凶悪で、「機器に入らなかった設定値が、設定されたことになっている」という現象が発生します。設定されたことになっているというのは、ポータル画面で異常な入力値が確定値として表示されてしまっている状態です。 これが「APIは正常に処理をして設定指示情報を生成し、ユーザにも成功の値を返したが、Workerからネットワーク機器に設定を投入するときに失敗した・ネットワーク機器が受け付けなかった」という非同期処理特有の難しさです。

つまり、バリデーション及びコンシステンシーチェックは、投入するネットワーク機器と同じ機構・要領で値を精査しなければならないということを意味します。 普段何気なくネットワーク機器をコンソールで操作しているとき、間違った値を入れると即座ににエラーが返ってきますが、あれが本当にありがたいものだと痛感します。 同期的にやればネットワーク機器のエラーをそのままパラメータ投入結果のエラーとして返せばいいものの、応答の快適性を重視した結果、この問題が常に付きまとうことになりました。 実際、OCX-Router(v1)開発におけるコード量のうち半分以上はバリデーション及びコンシステンシーチェックに費やしました。

おわりに

このように、サービスの開発においてはシステムでの涙ぐましい工夫やサービスの提供仕様・運用・様々な観点でデメリットを許容できる範囲まで落としてチーム一丸で開発を進めています。

そんな工夫を支えるソフトウェア技術としては、フロントエンドはNext.js、バックエンドはGolangを採用しており、モダンなウェブアプリケーションに仕上がっています。 それぞれの技術の詳細については連載にて開発者が赤裸々にお話しますので、楽しみにお待ち下さい。

OCXを支える技術 #1 OCXの概要と構成要素

記事をご覧頂きありがとうございます!BBSakuraにてOCXの開発をリードしている川畑です。

概略

BBSakuraでは、BBIXがサービス提供を行っているOpen Connectivity eXchange(以下、OCX)のソフトウェア開発を行っています。

IaaSの台頭によってサーバがクラウド化され仮想マシンとしてオンデマンドに(必要な時に必要な分だけ)利用できるようになったように、OCXでは NaaS(Network as a Service) *1としてデータセンター間接続、ルーティング、クラウド事業者との接続などネットワークの様々な機能をクラウド化し、UIを具備したプラットフォームサービスとして提供しています。

2023年8月現在、OCXではデータセンター間接続をはじめ、国外・国内クラウド事業者との接続や、ルーティング機能、インターネット接続機能が利用できます。インターネット接続機能を除いた全ての通信はOCXの網内で行われ、インターネットを通さないことから第三者による通信の窃取やDDoS攻撃を防ぎ、安心・安全なネットワークを提供しています。

OCXの拠点となるデータセンターは首都圏のみならず、その特異なビジネスモデルから日本全国へ展開を進めています。将来的には47都道府県全てに展開し、皆様のありとあらゆる通信を支え、誰一人デジタルに取り残されない社会基盤の一つになることを、本気で目指しています。

本記事では、OCXを構成するネットワーク及びその機能についてかいつまんでご紹介します。また、この全体のアーキテクチャ紹介を皮切りに、実務を担当しているエンジニアメンバーが寄稿し、次のメニューで連載します。

この記事についているタグ #OCXを支える技術 から連載記事一覧をご覧いただけます。

  • ネットワークを制御するソフトウェア
  • フロントエンドおよび認証・認可周り
  • バックエンドシステム
  • ネットワーク
    • クラウド事業者との接続
    • コアのネットワーク
  • CEOによる「OCXにかける想い 」
  • その他、状況によって増えます!

OCX構成概要

"OCX構成概要図。中央にBBIXバックボーンがあり、その周りに展開拠点A~C、Router、Cloud NNIが接続されている。"

OCXのネットワークは、BBIXのバックボーンを軸に展開し、オーバーレイ方式の通信アーキテクチャを採用しています。

バックボーンはアンダーレイに徹し、青箱で示した 拠点ネットワークの機能 はお客様の通信を直接捌く と捉えることで、互いの責任分界点を明確にしています。面を単一の構成にでき、容易にスケールできる設計です。

また、ネットワーク特有の機能として、お客様の通信識別にVC(Virtual Circuit)と呼ばれるものを提供しています。 VCはOCX網内で単一のブロードキャストドメインとして機能し、拠点でお客様を収容しているVLANやクラウド接続、ルーティングリソースなどをレイヤ2で接続することができます。 Point-to-Pointはもちろんのこと、Point-to-MultiPoint構成も可能にしており、お客様のネットワーク構成にあわせて柔軟に接続できます。

これらのネットワークはソフトウェアをベースに制御されており、総合するとOCXはいわゆるSDN(Software Defined Network)に該当します。 OCXのお客様には各種接続やリソースの購入・変更・削除を行う機能を具備した専用のポータル画面を提供しており、そこからのリクエストを バックエンドのAPIが受け取り・処理をして、更に機器を制御する機構へ設定情報を渡すフローになっています。

データセンター間接続

データセンター間接続の図。BBIXバックボーン内のVirtual Circuitを介して展開拠点A~C内のCPE同士が線で結ばれている。

OCXで提供している基本機能の一つが、データセンター間のレイヤ2接続です。

お客様にはOCX拠点スイッチの物理ポートを Physical Port として、VLANに相当する論理回線を VCI(Virtual Circuit Interface) としてリソースを提供しています。 既にお客様がOCX展開拠点と同じデータセンター・ビル内に居る場合、安価で高速な拠点間接続としてご利用頂くことを想定しています。 購入したVCI(VLAN ID1つに相当する)を先述のVCに紐付けることで、各拠点をまるでひとつのレイヤ2スイッチに接続している感覚で通信することが可能になります。

クラウド接続

クラウド接続の図。BBIXバックボーン内のVirtual Circuitを介して展開拠点A内のCPEとさくらのクラウドが線で結ばれている。Virtual Circuitからさくらのクラウドまでの線はCloud NNI内のOCXNNI SWを経由する。

もう一つの基本機能として、各種パブリッククラウド事業者とのレイヤ2接続が可能です。 2023年8月現在の対応クラウド及びサービスは、下記の通りです。

クラウド事業者 サービス
さくらのクラウド プライベートリンク
Amazon Web Service Direct Connect
Microsoft Azure ExpressRoute
Google Cloud Partner Interconnect
Oracle Cloud Infrastructure FastConnect

これらはOCX(BBIX)がクラウド事業者の認定パートナーとなっており、ポータル画面からクラウド接続を申し込むと、我々パートナー事業者を通してお客様の クラウドアカウントに閉域接続設定を直接デプロイすることで、OCXネットワークとの間に専用のレイヤ2のパスが用意されます。 このレイヤ2リンクをOCX内でお客様専用とし、VCに接続することで拠点からクラウド事業者(のBGPルータ)まで閉域で接続できるようになります。

ルーティング機能

ルーティング機能の図。展開拠点A内のCPEからVirtual Circuitを介してOCX Routerにつながる線と、同じOCX Routerから別のVirtual Circuitを介してさくらのクラウドにつながる線が表現されている。

直接的なネットワークの機能として、ルーティングの機能も提供しています。 各所を直接レイヤ2で接続する機能の他に、自身でルータを持たなくてもOCXネットワーク内を自由にルーティングすることが可能になります。

クラウド事業者との接続(Direct Connect等)は全てBGPを使用して接続しなければならず、お客様の中にはご自身でBGPルータの運用やオペレーションを行いたくないという方もおられます。拠点とクラウド間のBGP接続をこの OCX-Router(v1) に任せることも可能ですし、異なるパブリッククラウド間をこのルータを介して接続することも可能です。 機能としてはStatic/BGPのルーティングに対応している上に、標準で1ペア2インスタンス・拠点冗長で提供しています。保持できる経路数も10,000経路と、通常利用ではほぼ困らない性能です。

論理的な見え方を説明する図。CPE、Virtual Circuit、ルータ、Virtual Circuit、さくらのクラウドが直列につながっている。

VCを2つ用意し、拠点とルータ、ルータとクラウドを接続すると、論理的にはこのようなネットワークとして構成することが可能です。

上記、論理的な見え方の図の中のルータからクラウドの区間について「BGP終端(=CPEの負担を減らす)」と記載されている

メインの使い所は、BGPに対応している点からクラウド接続でのBGP接続の終端にお役立て頂くことを想定して開発しました。

おわりに

本記事では、OCXのサービス概要・構成要素と今後の連載記事の概要について記載しました。 これらの機能を利用したネットワークを制御する仕組みについて、次の記事でお話しします。

*1:NaaSはみずほリサーチ&テクノロジーズ株式会社の商標で、当社は商標の使用許可を得ております。

JANOG52 Hackathon に参加して Winner Team になった話

概要

こんにちは、BBSakura Networks のシステム管理部に所属している蟹江( @kanix2929 )です。
普段は BBIX から委託されているシステムなどの開発・運用をメインに業務しています。

2023/07/05 ~ 2023/07/07 で長崎にて開催されていた JANOG52 に参加してきました(JANOG 参加自体がはじめて!)。
そのプログラムの 1 つである ハッカソン(Hackathon) に参加してきたので、それについての感想を述べていきます。
( BBIX の一員として JANOG に参加してきましたが、BBSakura にも出向しているので BBSakura のブログに投稿しています )

JANOG Hackathonとは

JANOG Hackathon については、公式ページがあるのでそちらを参考にしていただければと思います。
要は、日々の悩みや課題をそれぞれ持ち寄って、1 日開発の時間に充ててみようぜ!というイベントです。

これまで参加したことのあるハッカソンでは「共通のテーマが与えられてチームで競う」というタイプだったので、それぞれがテーマを持ち寄って別の課題に対して解決方法を提示する、という形式は新鮮でした。
(僕のなかでは「ハッカソン=競争」みたいなイメージでしたが、「ハッカソン」自体の言葉の意味は「短期集中開発」なんですね)

ハッカソンに参加するまで

僕がハッカソンに参加した理由は以下です。

  • せっかく現地参加するなら他社の人と密に会話してみたい!
  • 公式ページから JANOG 初心者でも Welcome な雰囲気を感じる!
  • 「うちの会社のエンジニアももっとコミュニティ活動していこうよ」という社内の風潮
  • JANOG のプログラム委員をしている人から声掛け

特に、新卒で今の会社に入社してからのこの 2 年間は、コロナの影響でオフラインイベント自体が少なかった & 業務で社外の人と関わる機会がほとんどなかった、ということが参加する一番の動機だったかなと思っています。

〜 社内での仲間集め 〜

いざハッカソンに参加すると決めたものの

  • 1 人で参加しにいくのは寂しい
  • 開発時間的に 1 人だと厳しい(当日開発メンバーを募ることもできますが)

と考えていたので、社内の同年代エンジニアを誘って即決で承諾もらいました。
業務で直接関わりがあるわけではなかった(話したことすらなかった)のですが、ハッカソンきっかけで 社内の他部署メンバーともチームになれる 、というのもこういったイベントに参加する良さだと思います。

社内の協力者を集められたことに安心したのもあって、ハッカソン開催前には社内の課題や使ってみたい技術とかについて少しだけ相談して、ふわっとしたテーマを決めただけです。

ハッカソン当日

ハッカソン当日の流れは以下です。

  1. 軽い自己紹介
  2. 参加者が持ち寄ってきたテーマの共有 & チームビルディング
  3. 開発
  4. 成果発表

すでに開発テーマが決まっているチーム、興味のあるテーマで開発する別チームに参加したい人、普段開発に携わる機会が少ない人、など多様な参加者がいました。

僕らのチームは、開催前に相談していたふわっとしたテーマを共有したところ、興味を持っていただいた方 1 人にうちのチームに参加していただきました。
僕らのチーム以外でも、当日作られていたチームが多かった印象です。 「社外の人と一緒に開発する」という経験をしたい方にはもってこいのイベント ですね。

チームビルディング後は、デモ環境としてどのくらい作りこむかのような要件整理をして、ひたすら開発です。

チームビルディングの様子

開発の様子

開発内容

今回開発したものはざっくりと以下です。

  1. Ansible を使ってスイッチの構成情報を LLDP で取得
  2. 取得したデータをパースして良い感じに整形
  3. inet-henge を使って可視化

ところどころ躓いたりしつつ助け合ってのワイガヤ開発でとても楽しかったです!

全くの余談ですが、飛行機の都合で少し遅れてくるメンバーには飛行機内でチーム名を考えてもらったりしていました w

発表

ある程度開発ゴールの目処がたってきたところで、発表資料も並行で作っていました。6,7 時間程度で、環境作って / デモ開発して / 発表資料を作る ので、時間は結構タイトです。
僕のチームが発表した 資料はこちら にあがっているので興味がある方は見てみてください。

他チームがどういう開発をしていたか、どんなツール使っているか、ということを聞けたりするのは面白かったです(他チームの資料は こちら)。
JANOG のネットワークを運用している学生主体のチームも参加していたのですが、成果物 が素晴らしくとても刺激受けました。

結果

結果としては Winner Team として JANOG 3 日目の Hackathon Wrap-Up にて登壇・発表させていただきました。
(正直言うと、上記のネットワーク運用チームには負けてしまったのですが、大人の事情で発表の機会をいただきました、、、)

Wrap-Upでの発表の様子

1 日という短い時間での開発だったこともあり、大したものを作ったわけではないですが、このように発表する機会を頂いたのはとてもいい経験になりました。
8/18 18:00 までは アーカイブ配信 があるので、興味があればぜひ見てみてください。

現地で挨拶もさせていただきましたが、inet-henge 作者の Kojima さんにも反応していただけました。JANOG 参加者同士で盛り上げていけるのは良いですね!

まとめ

総じて、ハッカソンに参加してとても良かったです!とてもいい経験になりました。
JANOG の運営をしてくださった方、特にハッカソンを運営してくださった皆さま、本当にありがとうございました!

次回の JANOG53 では NETCON が開催されるらしい?ので、興味ある方はチェックしてみると良いかもです。
僕は今後も JANOG に参加することはもちろん、スタッフとしての参加も楽しそうだな、と思っているので、もし JANOG 会場で見かけたらぜひお声がけください。

※ すべての写真は JANOG52 ミーティング フォトアルバムより

OCXで「Internet Connection」をリリースしました

こんにちは。BBSakura Networks株式会社の神山です。私は現在、OCX開発チームのフロントエンドエンジニアとして、弊社が注力しているサービスであるOCX(Open Connectivity eXchange)ポータルサイト開発を担当しております。

今回は、私たちが開発しているOCXの簡単なご紹介と、最近リリースされた「Internet Connection」について、UI開発の目線も少し交えて投稿させていただこうと思います。

OCX(Open Connectivity eXchange)とは?

まずはじめに、このブログでは過去にOCXに関して述べた記事があまりなさそうでしたので、改めて簡単にご紹介したいと思います。

弊社では、OCX(Open Connectivity eXchange) というクラウド型ネットワークサービスを開発しております。昨年2022年5月に正式リリースし、1年ほどが経過しました。

OCXは、法人のお客様向けにデータセンターやクラウドサービス、インターネットなど、ありとあらゆるネットワーク間を誰でも簡単に接続出来る基盤を目指して開発されました。お客様専用のポータル画面で、高セキュリティ、低遅延かつ拡張性のある接続サービスをオンデマンドに提供しています。これにより、お客様側でのネットワーク機器の購入や維持管理の必要がなくなるため、購入コストや維持管理コストを削減することができます。

OCXポータル画面のスクリーンショット
OCXポータル

このOCXポータルサイトのUI開発においてはTypeScriptNext.jsを用いており、CSSフレームワークとしてTailwind CSSを使用しています。

「Internet Connection」について

OCXに、データセンター、オフィスビル、SaaS、DC間接続と並んで Internet が接続されている図
Internet Connection イメージ図

このようなOCXの新たなリソースメニューとして、「Internet Connection」を2023年5月にリリースしました。これは、OCXネットワーク網を介してインターネット接続を行う機能です。お客様側でデータセンターなどにインターネット回線をご用意いただく必要なく、簡単にインターネット接続を行うことができます。

OCX ポータル内の Internet Connection 設定画面のスクリーンショット
Internet Connection 作成画面

「Internet Connection」のUI開発にあたっては、Next.js 13.4で安定版となったApp Router方式を採用して実装を行なっています。これは以前からのPages Router方式とは異なり、ディレクトリ構造と実際のURLのパスが対応していることもあり開発がしやすくなっていると感じています。とはいえ実装では複雑なことはしていません。ユーザエクスペリエンスの観点から、シンプルで使いやすい画面操作を実現することを目指しています。

Internet Connectionリソース作成時の入力項目は1つだけです。リソース名として任意の名前を入力すればリソースを作成できます。あとはVirtual Circuit(VC)と呼ばれる仮想L2スイッチにアタッチすれば、同じVCに接続された他リソースをインターネットに接続できます。詳しい操作方法などは、OCXのInternet Connectionに関するドキュメントサイトをご覧いただければと思います。

現在は、従来の実装はPages Router方式、新実装はApp Router方式と共存させていますが、今後は新実装に統一していく予定です。新方式採用にあたっての苦労や戦略については別の機会に紹介できたらと思います。

最後に

今回は、OCXと「Internet Connection」についてご紹介しました。そんな私も、BBSakura NetworksのOCX開発チームにジョインしたのはちょうど1年ほど前になります。それまでは、このようなフロントエンド開発にはまったく携わっていませんでしたが、そのような私でも、今こうしてフロントエンドエンジニアとしてなんとかやれているのは、周りの方々の多くのサポートがあってこそだなと感じています。

BBSakura Networks株式会社では、このようなUI開発に携わるフロントエンドエンジニアの方を募集しております。またバックエンドエンジニアの方々も随時募集しておりますので、インターネットやネットワーク技術にご興味をお持ちの方がいらっしゃいましたら、お気軽にお問い合わせいただければと思います。

IETF 116 Hackathon に参加して SRv6 の開発をしてきました

こんにちは。テックリードでモバイルコアを開発しているチームのリーダーの日下部 (@higebu) とチームメンバーの早坂 (@takemioIO) です。

IETF 116 Hackathon にて、以下の二つのHackathonに参加してきましたので何をしてきたのかなどをご報告したいと思います。

  • BGP-MUP SAFI Implementation and Interop (日下部、早坂)
  • SRv6 Data-Plane Visibility (早坂)

IETF 116 Hackathon について

IETF 116 Hackathonについて知らない方もいると思いますので、簡単に紹介すると、無料で参加できる IETF 116 の中のイベントの1つで、RFC、ドラフトの著者などと開発者や運用をしている人などが集まって、実装してみたり、相互接続テストをしてみたりして、仕様に対する理解を深めたり、議論したりするための場です。

今回は 3/25(土)(9時30分~20時)と3/26(日)(9時30分~13時, 14時から結果報告)の2日間開催され、会場はパシフィコ横浜ノースでした。

飲み物、昼食、夕食(ビール付き)も無料で供給され、ずっと会場でハッカソンしていられるようになっており、スポンサー企業やスタッフの皆様にはとても感謝しております。

スケジュールやスポンサー企業について、詳しくは IETF 116 Hackathon Wiki を見てください。

IETF 116 Hackathon Project Map

BGP-MUP SAFI Implementation and Interop について

BGP-MUP SAFI Implementation and Interop

標準化中の BGP-MUP SAFIのインターネットドラフト を参考に実装した製品やOSSを持ち寄って相互接続テストを行ったり、詳細な仕様を確認したり、バグを直したりする会です。

詳しくは IETF 116 Hackathon WikiのBGP-MUP SAFI Implementation and Interop を参照してください。

BBSakuraから参加した二人は下記の3つのOSS実装で参加しました。以下に参加開始時点での実装状況と実装者を示します。

  • ExaBGP (@takemioIO)
    • CLIで設定した4つのルートタイプの送受信ができる状態
  • GoBGP (@higebu)
    • CLIで設定した4つのルートタイプの送受信ができる状態
  • FRR (@higebu)
    • 4つのルートタイプのencode/decodeができそうでできない状態 😇

GoBGPでの実装については下記の記事もご参照ください。

blog.bbsakura.net

他に、Arrcusさん、Ciscoさん、Furukawaさんの開発版の製品がエントリーされていました。

BGP-MUP SAFI Implementation and Interopハッカソンの様子

1日目

Breakfast

簡単な挨拶と、各チームの紹介の後、相互接続テストの結果を書くスプレッドシートと、テスト環境として使う CML2 (Cisco Modeling Labs) へのアクセス方法が共有されました。

相互接続テストをすぐに始められるようにするため、日下部と早坂は事前にCML2でGoBGPやExaBGPを動かすための cloud-initYAML ファイルを作っていました。

(補足:CML2で使えるUbuntuイメージは cloud-init によってネットワークの設定やパッケージのインストールなどが行えるようになっています。)

しかし、今回利用したのが3/3にリリースされたばかりの CML 2.5 で、普段使っていたのが CML 2.4 だったためか、 GoBGP, ExaBGPを動かすためのcloud-init がうまく動かず、何とか動かないかと格闘しているうちに、午前中が終了しました。。。

結局、 cloud-init では default_user cisco の設定と、ネットワークの設定のみに絞ってVMを起動し、コンソールから GoBGP などをインストールする方式に変更しました。

最終的な cloud-init のYAMLやGoBGP, ExaBGPのコンフィグやアンチョコは下記のgistに記載しています。

FRRについては前述の通り動作がまだ不完全だったため、Hackathonらしく現地で開発をしていました。 そのために並行して、SoftBankの藤田さんに開発に参加してもらい、FRRのデバッグを進めていただくため、開発環境を整えていただいていました。

いろいろやっているうちに、昼ご飯のカレーがなくなっていたことが悲しかったのを覚えています。

午後にとある実装と接続テストを行ったところ、Attribute Length Errorが返されてしまいました。

そこで、いろいろと切り分けをしていった結果、Next hopをIPv6アドレスにするとType 2、3、4(Direct Segment Discovery Route、Type 1 & 2 Session Transformed Route)は受け取ってもらえることがわかりました。

さらに Type 1(Interwork Segment Discovery Route) では Prefix が IPv4 の場合は /32IPv6 の場合は /128 のみ受け取ることができるということがわかりました。

この仕様の認識の違いは翌日には修正されていました。スピード感が早くHackathonらしいなと非常に驚きました。

FRRの状況はさらにSoftBankの堀場さんがCML2上で開発に途中参戦し、夜までには Type 3、4(Type 1 & 2 Session Transformed Route)の受信ができるようになっていました。

そのときのコミットが こちら です。

2日目

前日に問題があった実装との相互接続テストを実施し、問題が解消されていることを確認していきました。

当日はType 4(Type 2 Session Transformed Route)に含まれるTEIDの処理に問題があった実装もあり、仕様に関する認識の違いもありましたが最終的には相互接続を達成しました。

Arrcusさんでは ルートリフレクタとしても動作するMUP-CとMUP-GW、MUP-PEを用意し、MUP-C経由でMUP-GWやMUP-PEにRoute Targetを使って、Type 3、4(Type 1 & 2 Session Transformed Route)の経路情報がimportされるように設定されていて、さすがだなと思いました。

また、FRRの開発では、慶応SFCの澤田さんも参加し、主に Prefix Length の扱いについてソースを追って、正しい実装はどうなるかを考えていました。

最終的にFRRを除いた他の実装については全ての Route Type の相互接続テストをパスできました。

FRRについては、Type 3、4(Type 1 & 2 Session Transformed Route)を10個ずつ受けても1個しか表示されないという状態からスタートでしたが、SoftBankの堀場さん、藤田さん、慶応SFCの澤田さんのお力で全て表示されるところまで進みました。ありがとうございました 🙇

FRRのBGP-MUP SAFI対応は完成までまだまだやることがたくさんある状態なので、引き続き協力してくれた方々と一緒に実装していきたいと思っています。

BGP-MUP SAFI Implementation and Interop の結果

前述の通りFRR以外の全ての実装が相互接続を完了することができました!

Project results presentations については松嶋さんの発表資料を貼っておきますので、こちらをご参照ください。

このハッカソンからBGP-MUP開発者が勘違いや失敗しやすい注意点の洞察も得れました。 以下にその知見を共有したいと思います。

RFC 8950 Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop

RFC 8950 Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next HopRFC 5549 が更新されたものです。

今回のテスト環境ではBGPのトランスポートプロトコルIPv6です。

しかし広報する経路情報に含まれるプレフィックスIPv4(つまりAFIがIPv4)の場合があります。その場合にNLRIに含まれるNext hopにIPv6のみを受け入れる実装とそうでない(IPv4も受け入れる)実装がありました。

GoBGPでは最初はコマンドでIPv4のNext hopを入れてしまっていたため、エラーを返されていました。

経路を広報する際に何らかの方法で Next hop を決める実装をしている場合は、 AFI が IPv4 でもトランスポートプロトコルIPv6 の場合は IPv6 の Next hop を入れるようにしましょう。

RFC 8950 には SAFI = 128,129 のときにRDを付けるということが書いてあり、 SAFI = 85 のときはどうする?という話もありましたが、その場ではなしで全実装が動いたので、一旦なしで良いと思っています。

Type 1: Interwork Segment Discovery Route (ISD) の Prefix
         +-----------------------------------+
         |           RD  (8 octets)          |
         +-----------------------------------+
         |       Prefix Length (1 octet)     |
         +-----------------------------------+
         |        Prefix (variable)          |
         +-----------------------------------+

ISD の Prefix は明確に Prefix Length (1 octet)Prefix (variable) と書いてあるのですが、 3GPP 5G の場合は gNodeB の N3 インターフェースのアドレスになるということからか、 /32 固定で実装してしまうことがあります。

書いてある通り、BGPで一般的に使われている Prefix として実装しましょう。

Type 4: Type 2 Session Transformed Route (ST2) の TEID
      +-----------------------------------+
      |           RD  (8 octets)          |
      +-----------------------------------+
      |      Endpoint Length (1 octet)    |
      +-----------------------------------+
      |      Endpoint Address (variable)  |
      +-----------------------------------+
      | Architecture specific Endpoint    |
      |         Identifier (variable)     |
      +-----------------------------------+

Endpoint Length が BGP でよくある Prefix Length と同等に見えますが、これには Architecture specific Endpoint Identifier (variable) のビット長も含んでいます。

また、 Architecture Type が 3GPP 5G の場合の TEID は下記の通りですが、これも Prefix のように1ビット単位の可変長になっています。

      +-----------------------------------+
      |          TEID (0-4 octets)        |
      +-----------------------------------+

こちらは複数の実装で、仕様通りに実装できておらず、ExaBGPGoBGPでもハッカソンの数日前に修正しました。

モバイルネットワークをやっていると TEID も Prefix のように扱って集約できるようにするという発想にならない感じがしますが、経路として扱えば集約できるので、そのように実装しましょう。

SRv6 Data-Plane Visibility

このHackathonは標準化中の SRv6のIPFIXに関するインターネットドラフト を参考に実装を行う会です。

詳しくは IETF 116 Hackathon WikiのSRv6 Data-Plane Visibility を参照してください。

ここでは他社のチームと一緒に行なっており NTTCom の三島さんからのお誘いでBGP-MUP SAFI Implementation and Interopと並行して早坂(@takemioIO)が参加しました。

SRv6 Data-Plane Visibility の結果

成果物がこちらです https://github.com/watal/ietf116_srv6_data-plane_visibility

このプロジェクトの中では、XDPでSRv6パケットのSRHを受け取りそれをIPFIXに詰める仕組みを実装しようとしました。

XDPの採用理由としてはそもそもこのHackathonはVPPを利用した実装を行うチームがあり、それなら同じパケット高速化の仕組みを持つXDPでも使えるようにしたいな!ということで僕らはXDPの採用に至りました。

チームなので分担して開発を行なっており、自分はこの中でもXDPを利用したSRv6のパケットを受け取ってパースしてユーザーランドに渡す部分の実装を行い実装を完了させました。

ですが最終的な結果としては残念ながら IPFIXのテンプレートの中にSRHの情報を入れて渡す統合の部分が終わらずデモは出来ませんでした。 しかし時間があればできるものだったと思いますので今後も実装を続けていこうと思います!

最後に

BGP-MUP SAFI Team の皆様、相互接続テストを実施していただき大変お世話になりました。 GoBGP、ExaBGPでは相互接続テストを通過させることができ、仕様理解も深まりました。

BGP-MUP SAFI Implementation and Interop の Champion でドラフトの著者の松嶋さんには、 ハッカソンに誘っていただきました。また期間中何度も仕様を確認させていただきました。ありがとうございます。

古河の林さんには、GoBGP、ExaBGPの実装について多くのご指摘をいただきました。 林さんのおかげで期間中に相互接続テストが完了できたと思います。大変感謝しております。

また、NTT Comの三島さん、深川さんには、SRv6 Data-Plane Visibility に誘っていただきました。ありがとうございました。

皆様のおかげで大変良い経験になりました。

SRv6 MUP や SRv6 Data-Plane Visibility 関連の活動は続けていくつもりですので、引き続きよろしくお願いいたします :bow:

Wrap up