VyOSで経路検証(ROV)を行う
半分自分用の備忘録※書き直しました
はじめに
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でホストされている同ツールがあるのでそちらを触ってみてください
Routinatorの設定
インストール
ROVを行うためにまず、VyOSが参照するためにROAキャッシュサーバの設定を行います。
下記のリンクを参考にインストールします。
(変化する可能性があるのでここでは記載しません)
Config編集
初期設定ではローカルホストしか参照できないので、外部から参照できるようにアドレスを0.0.0.0
に変更します。
※参考例では0.0.0.0
にしていますが必要な場合は任意のアドレスに変更してください。
rtr-listen = ["127.0.0.1:3323"]
http-listen = ["127.0.0.1:8323"]
↓
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)
リンク
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
リンク
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