😇

VyOSで経路検証(ROV)を行う

2024/04/29に公開

半分自分用の備忘録※書き直しました

はじめに

VyOSで日本語のRPKI周りの資料がないので今回作ってみました。

ざっくり用語解説

RPKIとは

Resource Public-Key Infrastructureの略で、このあとのROAで利用するリソース証明書を発行するための公開鍵基盤。JPNICの解説

ROAとは

Route Origin Authorizationの略で、RPKIで作成したをもとに広報する(されている)IPアドレスとAS番号の組み合わせのデータをRPKIで作成したリソース証明書で電子署名したもの。JPNICの解説

ROVとは

Route Origin Validationの略で、ROAの情報を使って受信した経路情報がが正しいことを検証するための仕組みJPNICの解説

目的

経路の受信時に、悪意のある第三者やオペレーションミスなどで不正な経路情報を広報することが往々にして起こります。書いている現在(2024/10/28)も26経路ほどInvalidが出ています。
不正な経路を受信した場合、当該経路への到達性や対向からの到達性が失われて問題が発生します。
これを防ぐために、ROAの情報を使って経路が正しく広報されているかを確認します(ROV、Origin検証)。

事前準備

ROVを行うためにはもとのデータを保管するROAキャッシュサーバが必要になります。
そのために今回は、OSSのROAキャッシュサーバであるRoutinatorを利用します。

どんなツールか気になる方はRIPEでホストされている同ツールがあるのでそちらを触ってみてください
https://rpki-validator.ripe.net/ui/

Routinatorの設定

インストール

ROVを行うためにまず、VyOSが参照するためにROAキャッシュサーバの設定を行います。
下記のリンクを参考にインストールします。
(変化する可能性があるのでここでは記載しません)
https://routinator.docs.nlnetlabs.nl/en/stable/installation.html

Config編集

初期設定ではローカルホストしか参照できないので、外部から参照できるようにアドレスを0.0.0.0に変更します。
※参考例では0.0.0.0にしていますが必要な場合は任意のアドレスに変更してください。

/etc/routinator/routinator.conf
rtr-listen = ["127.0.0.1:3323"]
http-listen = ["127.0.0.1:8323"]

/etc/routinator/routinator.conf
rtr-listen = ["0.0.0.0:3323"]
http-listen = ["0.0.0.0:8323"]

ポート開放

FIrewallが有効な場合ポートを開放します。
開放対象ポート

  • 3323/tcp(VyOS参照用)
  • 8323/tcp(WebUI用)
サンプル
firewall-cmd --add-port=3323/tcp --per
firewall-cmd --add-port=8323/tcp --per
firewall-cmd --reload

VyOSの設定

設定環境

  • VyOS: 192.168.1.1
  • Routinator: 192.168.1.10

ROAキャッシュサーバとの接続

ROAキャッシュサーバとの接続設定を入れます

$ set protocols rpki cache 192.168.1.1 port 3323
$ set protocols rpki cache 192.168.1.1 preference 150
$ commit
$ save

設定解説

set protocols rpki cache 192.168.1.1 port 3323

  • 192.168.1.1 Routinatorの稼働しているIPアドレス
  • port 3323 RoutinatorのListenしているポート番号※通常は変える必要はない
    set protocols rpki cache 192.168.1.1 preference 150
  • preference 150 使うサーバーの優先順位

接続状態の確認

vyos@as64496:~$ show rpki cache-connection

Connected to group 150
rpki tcp cache 192.168.1.1 3323 pref 150 (connected)

リンク

VyOSのRPKI設定のリファレンス

Neighborに対してROVの設定をする

Neighborの経路を検証するためのroute-mapを作成する

ROVの状態ははvalid notfound invalidがあります

  • valid: ROAの情報を検証して正しいこと確認されている状態
  • notfound: ROAが作成されていないので検証ができない状態
  • invalid: ROAの情報を検証して不正な状態
$ set policy route-map rpki-check rule 10 action permit
$ set policy route-map rpki-check rule 10 match rpki valid
$ set policy route-map rpki-check rule 20 action permit
$ set policy route-map rpki-check rule 20 match rpki notfound
$ set policy route-map rpki-check rule 30 action deny
$ set policy route-map rpki-check rule 30 match rpki invalid

リンク

VyOSのRPKI設定のリファレンス

Neighborに先ほど作成したroute-mapを設定する

※アドレス等の設定は適宜変更すること

$ set protocols bgp neighbor <NeighborのIPアドレス> address-family ipv4-unicast route-map import 'rpki-check'
$ set protocols bgp neighbor <NeighborのIPv6アドレス> address-family ipv6-unicast route-map import 'rpki-check'
$ commit
$ save

設定を入れたうえでcommitを行うと検証が始まり検証が終わるまでプロンプトが返ってこなくなりますが気長に待ちましょう。

おわりに

VyOSはこの設定を行うことでROAによる経路検証が行えます。
設定としてはそこまで難しくないのですが、リファレンスだとざっと書かれているだけで全体像の把握が難しかったので後から同じ道を歩む人の一助になれば。
間違い等あれば指摘ください。

Discussion