Webアプリケーション出身エンジニアがネットワーク制御ソフトの開発に挑戦したときの苦労話

ご挨拶と今回の記事について

こんにちは、BBSakura NetworksでOCX開発グループに所属している渡邉です。
私の担当開発はOCXのバックエンド部分、つまりソフトウェア周りの開発になります。
以前、弊社の川畑の記事にありました制御システム、ソフトウェア部分になります。

blog.bbsakura.net

過去、私も本ブログで数記事執筆させていただいていますので興味のある方は名前などで記事検索していただければと思います。

以前投稿した記事でも触れましたが、私は元々WebアプリケーションエンジニアでNW周りについて何も知らない状態でした。
今回は BBSakura Networks Advent Calendar 2024 の 23日目として、Internet GatewayにBGP対応を行った際の苦労話について記事にしました。

※Internet Gatewayのサービス解説記事はこちら

blog.bbsakura.net

ここから本題が始まりますが、本記事はBGPというものについて個人の見解や理解に基づいた内容になっており、実態に即していない可能性があります。
まだまだ理解が追いついていない、足りていない部分もたくさんあると思いますので、何卒温かく見守っていただければ幸いです。

そもそもBGPって何?というところからのスタート

Internet Gatewayのロンチ後、SaaS Connectionの開発とInternet GatewayのBGP対応が始まりました。
ちなみにSaaS ConnectionはInternet Gatewayとは違いStatic Routeは対応しておらず、BGPのみになります。
当時は「BGPって何?」「Static Routeが無いのにどうやってルートを??」状態でした。
※SaaS Connectionの開発の苦労話についてはまた別の機会に触れられればと思います。
※SaaS Connectionのサービス解説記事はこちら

blog.bbsakura.net

やはり頼りになるのは先人の知恵

開発にあたってBGPとは何かを調べるところから始まります。
SaaS ConnectionとInternet Gatewayは基本的な作りは同じ。
Internet GatewayにStatic Routeがあるのに対し、SaaS ConnectionはStatic Routeが無いのであれば、BGPはStatic Routeと対にもしくは類似の機能なのだろう、という予測はつきました。
インターネットで先人の知恵を借り(いつもありがとうございます)、Static Routeが静的なルート構築に対し、BGPは動的なルート構築(Dynamic Routing)ということはわかりました。
(余談ですが、ネットワーク系のシステム開発を行っていて、対になる機能でも言葉として対になっていないことが多く、パッと理解が難しいなと実感しますね)

なんとなく理解が進んでいく

さて、Dynamic Routingというのはわかったぞ、ということでIPアドレスをよしなに使うのかなと思いきや、AS番号が出てきました。
つまりBGPはIPアドレスを意識せず、AS番号でもってルーティングを動的に行う機能なのか、と理解できました。
対してStatic Routeはルーティングを行う人がIPアドレスを一つ一つ設定して構築していく。と

AS番号の沼にハマる

段々と「ふむふむ、AS番号を用いた動的なルーティング機能であり、運用上の負荷が下がる」のがBGPなのかと理解が深まってきました。
もうちょい深堀りすると深淵を覗くというのは詳しい方(@paina )が言っていたのでこのあたりで開発を始めていこう、と開発を開始しました。

とはいえゼロから作るのではなくOCXで提供しているサービスの一つであるOCX-Router(v1)にはBGP機能がありますので、これを参考に開発を進めます。
「ん?リモートAS番号とローカルAS番号???」

今回BGPを対応するサービスはお客様NW環境と接続先(Internet/SaaS事業者様)を閉域で繋ぐサービス。つまりローカルAS番号がお客様NW環境側で、リモートAS番号が接続先のAS番号かな?となりました。

仕様「リモートAS番号はお客様が自由に設定できるAS番号です」 ←接続先のAS番号じゃないのかな?いや、そもそもInternetにAS番号とは?
仕様「ローカルAS番号も同様にプライベートAS番号の範囲で自由に設定可能です」 ←これはなんとなくわかる

自分の理解と、仕様の記載が一致していない状態。

振り返ることの重要さ

一度ここでInternet GatewayやSaaS Connectionがどういったサービスなのかを改めて確認します。
同時にそもそも経路交換の仕組みやインターネットって上り下りがあるよねというのを復習していきました。

すると「リモートAS番号はお客様NWのAS番号」「ローカルAS番号はInternet GatewayやSaaS ConnectionのAS番号」というのが理解できてきました。
が、ここで次の問題が出てきます。
「接続先のAS番号はどこで使うのか」
BGPというのはAS番号を用いてルート構築を動的に行う機能。であるならば接続先のAS番号も知っていないといけないのでは?となりました。
しかしOCX利用者はどうやって接続先のAS番号を知るんだろうか、という状態です。

そこで、Internet GatewayやSaaS ConnectionがNWにおいてどういった立ち位置のサービスなのかということ振り返ります。
2つのサービスは接続先は違えど大きく言うとお客様NW環境と接続先(Internet/SaaS事業者様)を繋ぐ役割を果たしています。
つまり、接続先のAS番号はお客様が知っている必要がない(=すでにOCXが接続先と経路交換している)のです。
お客様はあくまでInternet GatewayやSaaS Connectionまでの経路を構築していただくだけで良い、ということです。
これでバックエンドのシステムとしてBGPに必要な各種項目をどのようにconfigしていけば良いかというのがわかり、開発が進んでいきました。

"SaaS ConnectionとInternet Gatewayは利用者様環境と接続先SaaS事業者、インターネットを繋ぐ役割をしており利用者様がconfigで意識するのは利用者様の環境からSaaS ConnectionとInternet Gatewayまでで、SaaS ConnectionとInternet Gatewayから接続先SaaS事業者様、インターネットへの経路は気にしなくて良い" Internet GatewayとSaaS Connectionの簡易イメージ

ネットワークを構築するためのシステムを開発することの難しさ、楽しさ

ほかにもiBGPやeBGPの違いなどで調べながらの開発をしていきましたが、今回は割愛させていただきます。
ともあれ、こうして苦労もありつつ無事にInternet GatewayのBGP対応とSaaS Connectionがリリースされました。
思えば、BBSakuraにジョインしてからまもなく丸2年が経ちます。
これまで自分が開発してきたものとはまるで異なる分野でのシステム開発のため、難しさを感じる一方、新しいことへ挑戦できることへの楽しさも感じています。
まだまだ力不足に感じる点だらけですが、それでも少しは貢献できていれば幸いです。

最後に

OCX開発グループは新規のサービスの開発だけでなく、すでにリリースしたサービスについてもお客様のニーズにあわせて日々機能強化を進めております。
少しでもOCXを利用されるお客様にご満足頂けるようこれからも新規サービスの開発、既存サービスの機能強化に努めてまいります。
最後の最後の余談ですが、私はInteropなどのイベントにエンジニアスタッフとしてOCXブースに立たせていただくことがよくあります。
もしOCXやBBSakuraという組織に興味がある方がいましたらぜひブースに足に運びいただき、お声がけ頂ければと思います。