JPNIC Blog JPNIC

roamon ~ BGP経路と異なるROAの修正を促すプロトタイプ実装~

KimuraTaiji 

ルーティングの運用上の理由により、ROA(Route Origin Authorization)が作成されている状態で、BGP経路を変更することがあります。その結果、ROAの内容と異なってしまい、ROV(Route Origin Validation – オリジン検証)を行なっているネットワークに対する到達性が失われてしまう恐れが出てきます。しかし、ROVを行うISPやIXが増えつつあり、ROA管理の重要性は高まりつつあると言えます。この記事では、ROAをモニタリングし、BGP経路と違ってしまった時にROAの修正を促すツールのプロトタイプ実装を紹介します。

■ROAとBGP経路

JPNICからIPアドレスの分配を受けている組織や個人である”IPアドレスホルダー”は、ROAを作成することで、そのIPアドレスのBGP経路を広告できるASを、ROAを通じて指定することができるようになりました。一方、インターネットにおけるドメイン間接続のためにBGP4を使っているルータ(以下、BGPルータ)は、各ASのネットワークの管理者によって設定が行われ、運用されてきました。

ROAを使った経路の検証は、IPアドレスが本来とは異なるネットワークによって使われてしまった時に、設定によっては、自動的にその不正なBGP経路を無効化できるようになることを意味します。つまり運用上の都合でBGP経路を変えた時には、合わせてROAを直さなければ、無効なBGP経路として扱われてしまう恐れがあります。

■ROVで到達性がなくなる事例

BGP経路がROAと異なってしまったために特定のネットワークに対する到達性が失われてしまった事例は、日本でいち早く報告されました[1]。これによって、ROAの管理と起きる問題への対処方法は、単純なものではないことが分かってきました。

技術的な仕組みの運用において、齟齬がまったく起きないということはあり得ませんので、課題は、いかに早く異常に気付いて迅速に復旧できるか、ということになります。しかしROVによって到達性が失われる状況は、何の兆候もなく、特定のネットワークに対してのみ発生し、多くはユーザのネットワークで起こります。ROAを作成したIPアドレスホルダーと、ROVをしている通信事業者とは、ビジネス上の関係がないことがほとんどで、原因を探るためには連絡手段を探すところから始めなければならないことがあります(*1)。

(*1) ご紹介した事例ではROV以外のさまざまな原因を想定して調査が行われました。

ROAの普及を図ることが国際的に良しとされていた2019年前半に、ROAとROVの導入にはそれらを合わせていく注意が必要であり、導入数だけがセキュリティの指標ではないと発表したものが”Long chopsticks in Heaven”でした[1][2]。本稿で紹介するツールは、これに対して技術的な対策を取るために考案されたものです。

[1] Long Chopsticks in Heaven – When Packets Dropped Using ROA, Taiji Kimura,
https://ripe78.ripe.net/presentations/154-RIPE78-LT-taiji-k-04-talk.pdf

[2] Long Chopsticks in Heaven: the Importance of Cooperating when it comes to ROA, Taiji Kimura — 10 Jul 2019,
https://labs.ripe.net/Members/taiji_kimura/long-chopsticks-in-heaven-the-importance-of-cooperating-when-it-comes-to-roa

■開発の背景

ROAはIPアドレスホルダーの方が作成するもので、BGP経路の設定はBGPルータを運用されている方が行います。また、ROAに近い情報を持つデータベースであるIRRへの登録は、BGP運用をされている方によって長らく行われてきました。この役割の異なる人たちの間をつなぐにはどうすればいいのか、という検討から始めました。

検討と開発には、早稲田大学の学生さんが積極的に関わってくださり、IPアドレスホルダーの業務に注目したカスタマージャーニーマップを作って、何回かに分けて検討を行いました。その結果から、次節で述べるようなお知らせをするツールになったのです。

開発チームには慶應義塾大学の学生さんにも入っていただけました。GitHubを利用した開発やバックログを使ったスクラム開発は、JPNICにおいてはちょっと新鮮でした。結果として、目標としていた2020年2月のAPRICOT2020に間に合い、無事にプレゼンテーションを通じてリリースすることができました[3]。

[3] “JPNIC roamon project”, Taiji Kimura,
https://2020.apricot.net/assets/files/APAE432/jpnic-roamon-project.pdf

■roamon でできること

roamon は verify, alert, web の三つのツールの集まりです。まず roamon-verify はROVの結果をIPアドレスプレフィックスやAS番号を指定してみることができるコマンドラインツールです。RoutinatorからROAを検証した結果であるVRP(Validated ROA Payloads)を取得し、オレゴン大学のBGP経路のアーカイブと比較しています。alert は予めAS番号を指定しておいて、そのASから経路広告されているBGP経路が異なった場合にメールかSlackで通知を投げるツールです。web は alert の通知先を管理するユーザ・インターフェースを提供します。

roamon-verify の利用方法を以下に示します。

〇BGP経路(RouteViews)とRoutinator生成のVRPをダウンロード。
$ python3 roamon_verify_controller.py get --all
〇指定されたIPアドレス・プレフィックスに対するROV結果を表示。
$ python3 roamon_verify_controller.py rov --ip
〇コマンドで指定されたASをオリジンASとするすべての経路についてROV結果を表示。
$ python3 roamon_verify_controller.py rov --asn <AS番号...>

roamon-alert は連絡先の管理を行うことができます。

〇デーモンを起動
$ sudo python3 roamon_alert_controller.py daemon --start
〇コンタクト先を追加
$ sudo python3 roamon_alert_controller.py add --asn 3333 --type email --dest example3333@example.com
〇コンタクト先をリスト表示
$ sudo python3 roamon_alert_controller.py list

現在のところ、web はシンプルな機能を提供するに留まっていますが、拡充していきたいと思っています。詳しくはREADME.mdをご覧いただければと思います[4][5][6]。

roamon-web 通知先の管理画面

[4] roamon-verify, https://github.com/taiji-k/roamon-verify
[5] roamon-alert, https://github.com/taiji-k/roamon-alert
[6] raamon-web, https://github.com/taiji-k/roamon-web

■インストール手順

roamon-verify のインストール方法を例に紹介します。

〇必要なパケッケージをインストール
$ sudo apt install rsync build-essential python3-pip $ pip3 install netaddr pyfiglet tqdm pyasn beautifulsoup4 requests
〇Routinatorをインストール (https://rpki.readthedocs.io/en/latest/routinator/installation.html を参照のこと)
PATHを設定 ~/.local/bin:~/.cargo/bin
〇roamon-verifyをインストール
$ git clone https://github.com/taiji-k/roamon-verify.git

git cloneしたディレクトリで前述のコマンドを実行します。/var/tmp/ にVRPとBGP経路の一時ファイルが作られます。アンインストールする際には、そちらも削除していただければと思います。

■roamon のこれから

roamonは、いわばプロトタイプシステムのつもりで公開しています。複雑なことを行なっているプログラムではないこともお分かりいただけると思います。今後、ROA管理のためにROAとBGP経路の比較を行われる際には、何らかのご参考になればと思います。

今後は、BGP経路と異なるROAを通知するだけでなく、ROAを作成することで不正な経路からどれほど守られているのかといった効果が見えるような実装について考えていきたいと思います。

開発や検討にご興味のある方は是非ご連絡をいただければ幸いです。

JPNIC RPKI担当
rpki-query at nic.ad.jp

※この活動は総務省からの受託事業の一環として行われました。
roamonはオープンソース・ソフトウェアとして開発されています。