😇

VyOSでROVを行う方法

2024/04/29に公開

半分自分用の備忘録

ROV・ROA・RPKI

RPKIとは、Resource Public-Key Infrastructureの略でリソースを分配された事業者が所有を証明するための証明書のこと。
ROAとは、Route Origin Authorizationの略でRPKIの証明書をもとに広報する(されている)IPアドレスとAS番号の組み合わせを示す電子署名されたデータ。
ROVとは、Route Origin Validationの略でROAの情報を使って広報しているASが正しいことを検証(オリジン検証)。

目的

経路の受信時にROAの情報を使って経路が正しく広報されているかを確認します。

事前準備

ROVを行うためにはROAキャッシュサーバが必要になります。
そのために、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用)を開放します。

VyOSの設定

VyOSへ実際に設定を入れていきます

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

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

$ set protocols rpki cache <Routinatorを入れたサーバIPアドレス> port '3323'
$ set protocols rpki cache 172.28.255.195 preference '150'
$ commit
$ save

正しく設定できると、下記の内容が返ってくる。

vyos@as64496:~$ show rpki cache-connection

Connected to group 150
rpki tcp cache <Routinatorを入れたサーバIPアドレス> 3323 pref 150 (connected)

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

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

$ 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 10 set local-preference '100'
$ 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 20 set local-preference '100'
$ 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を行うと検証が始まり検証が終わるまでプロンプトが返ってこなくなりますが気長に待ちましょう。

Discussion