2024-07-16 RPKI 機能検証

提供:hkatou_Lab
2024年7月14日 (日) 08:45時点におけるHkatou (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

最近実網でも実装されつつある、RPKI について、CSR1000V で検証を実施しました。

このページにラボシナリオとして、コンフィグや確認コマンド、疎通確認のポイントなどをまとめています。

用語

RPKI = Resource Public Key Infrastructure

  • 電子証明書を用いて、リソースの正当性を担保する

ROA = Resource Origin Authorization

  • AS 番号と経路情報が正しい組み合わせであることを示す、電子署名が施されたデータ

ROV = Resource Origin Validation

  • BGP 経路の Origin AS が正しいか検証する

機能概要

  1. RPKI で電子証明書を用いて信頼性の高い AS 番号と経路情報を各 AS で作成する
  1. ROA で RPKI のデータを取得する
  2. ROV で BGP ルート情報を検証し、不正なルートをテーブルから削除する

という機能です。

目的

ROA 情報の取得

RPKI ROA キャッシュ サーバから正当な AS 番号と IP アドレスの組み合わせ情報を取得できること。

ROV の動作確認

正常系

RPKI で不正な経路を BGP テーブルとルーティング テーブルから削除できること。

AS 番号と IP アドレスの組み合わせが正当な場合、BGP テーブルとルーティング テーブルに登録されること。

オプション

RPKI のデータを受信するが、バリデーションを無効化し、不正な経路でもルートを登録できること。

例外処理

ROA に存在しないルートを受信したときに、ルートを登録すること。

  • 2024 年現在、ROA は登録していない AS も多数存在する

検証環境

EVE-NG Community Edition

Cisco CSR1000V 17.03.04a

構成図

  • PE01 : プロバイダ エッジルータ 1
    • パブリック ROA サーバへの経路を持つ
      • Source PAT で外部と CE01 を通信させる
    • 正常な経路を BGP で広報する
  • PE02 : プロバイダ エッジルータ 2
    • KDDI の AS2516 を模擬
    • 詐称した経路 1.1.1.1/32 を BGP で広報する
    • 正当な経路 14.8.0.0/15 を BGP で広報する
  • CE01 : カスタマー エッジルータ 1
    • 試験対象のルータ
    • ROA キャッシュサーバに接続し、経路情報のデータを取得する
20240712 RPKI Lab Diagram
20240712 RPKI Lab Diagram

IP アドレッシング

文書用例示アドレス
種別 AS 番号 ネットワーク アドレス ホスト インターフェース ホスト アドレス 備考
グローバルアドレス 65000 - PE01 Lo0 198.51.100.1/32
203.0.113.0/30 Gi1 203.0.113.1/30
65002 CE01 Gi3 203.0.113.2/30
- Lo0 198.51.100.3/32
203.0.113.4/30 Gi4 203.0.113.6/30
2516 PE02 Gi1 203.0.113.5/30
- Lo0 198.51.100.2/32
詐称グローバルアドレス
種別 AS 番号 ネットワーク アドレス ホスト インターフェース ホスト アドレス 備考
グローバルアドレス 2516 1.1.1.1/24 PE02 Lo1 1.1.1.1/32 AS13335 APNIC and Cloudflare DNS Resolver project
27.34.128.0/19 Lo2 14.8.0.0/15 AS2516 KDDI Web Communications Inc.


JPNIC が ROA パブリック キャッシュサーバを提供してくれていますので、今回はここに接続します。

参考 : ROAパブリックキャッシュサーバの利用方法

  • 192.41.192.218

コンフィギュレーション

ここではプロトコル・ホスト別にコンフィギュレーションを簡単に解説します。

自分でコンフィグを組んでみたい人向けに、デフォルトでは表示しません。

このページのリファレンスに記載した、Cisco のサイトを参考に設定してみると良いでしょう。

PE01

PE01 コンフィグ
プロトコル コンフィグ 解説
インターフェース


BGP ルーティング


PAT

ACL

PE01#show run | s Lo|net1|net3|router|ip nat|ACL|ip route
interface Loopback0
 ip address 198.51.100.1 255.255.255.255


interface GigabitEthernet1
 ip address 203.0.113.1 255.255.255.252
 ip nat inside
 negotiation auto
 no mop enabled
 no mop sysid
interface GigabitEthernet3
 ip dhcp client client-id ascii 9A5JK2A25E8
 ip address dhcp
 ip nat outside
 negotiation auto
 no mop enabled
 no mop sysid
router bgp 65000
 bgp router-id 198.51.100.1
 bgp log-neighbor-changes
 network 0.0.0.0
 network 198.51.100.1 mask 255.255.255.255
 neighbor 203.0.113.2 remote-as 65002
 default-information originate

ip route 0.0.0.0 0.0.0.0 Null0 254
ip nat inside source list ACL_NAT interface GigabitEthernet3 overload

ip access-list extended ACL_NAT
 10 deny   ip any 198.51.100.0 0.0.0.255
 20 deny   ip any 203.0.113.0 0.0.0.255
 30 permit ip 198.51.100.0 0.0.0.255 any
 40 permit ip 203.0.113.0 0.0.0.255 any
Gi1 に着信したパケットは ACL_NAT に基づいて送信元アドレス PAT を行う
  • BGP キープアライブが NAT されてしまうため、deny で LAN 宛を NAT 対象外にする


PE01 は BGP でピア ルータにデフォルトルートを提供する

  • CE01 を JPNIC ROA キャッシュサーバに接続させるため

PE02

PE02 コンフィグ
プロトコル コンフィグ 解説
インターフェース


BGP ルーティング

PE02#show run | s Loop|net1|router bgp
interface Loopback0
 ip address 198.51.100.2 255.255.255.255
interface Loopback2
 ip address 14.8.0.1 255.254.0.0
interface GigabitEthernet1
 ip address 203.0.113.5 255.255.255.252
 ip nat enable
 negotiation auto
 no mop enabled
 no mop sysid
router bgp 2516
 bgp router-id 198.51.100.2
 bgp log-neighbor-changes
 network 0.0.0.0
 network 1.1.1.1 mask 255.255.255.255
 network 14.8.0.0 mask 255.254.0.0
 network 198.51.100.2 mask 255.255.255.255
 neighbor 203.0.113.6 remote-as 65002
1.1.1.1/32 を詐称ルート、14.8.0.0/15 を正常ルートとして BGP で広報する

CE01

CE01 コンフィグ
プロトコル コンフィグ 解説
インターフェース


BGP ルーティング

CE01#show run | s Loop|net3|ip route|rpki|router bgp
interface Loopback0
 ip address 198.51.100.3 255.255.255.255
interface GigabitEthernet3
 ip address 203.0.113.2 255.255.255.252
 negotiation auto
 no mop enabled
 no mop sysid
router bgp 65002
 bgp router-id 198.51.100.3
 bgp log-neighbor-changes
 bgp rpki server tcp 192.41.192.218 port 323 refresh 150
 network 198.51.100.3 mask 255.255.255.255
 neighbor 203.0.113.1 remote-as 65000
 neighbor 203.0.113.5 remote-as 2516
bgp rpki server tcp 192.41.192.218 port 323 refresh 150
  • JPNIC のパブリック RPKI サーバに接続

疎通確認・動作確認

ROV

ROV 動作確認
ホスト HOST 備考
CE01
CE01#ping 192.41.192.218
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.41.192.218, timeout is 2 seconds:
!!!!!
 Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/6 ms
送信元 PAT されて JPNIC の 192.41.192.218 に疎通できた


RPKI のポート番号である 323 も確認できる

CE01
CE01#show ip bgp
BGP table version is 11, local router ID is 198.51.100.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
              t secondary path, L long-lived-stale,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
N*    0.0.0.0          203.0.113.5              0             0 2516 i
N*>                    203.0.113.1              0             0 65000 i
I*    1.1.1.1/32       203.0.113.5              0             0 2516 i
V*>   14.8.0.0/15      203.0.113.5              0             0 2516 i
N*>   198.51.100.1/32  203.0.113.1              0             0 65000 i
N*>   198.51.100.2/32  203.0.113.5              0             0 2516 i
V*>   198.51.100.3/32  0.0.0.0                  0         32768 i
CE01#
CE01#show bgp rpki table | in ^1.1.1.0/24
1.1.1.0/24           24      13335      0       192.41.192.218/323
CE01#show bgp rpki table | in ^14.8.0.0/15
14.8.0.0/15          24      2516       0       192.41.192.218/323
CE01#show ip route bgp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, m - OMP
       n - NAT, Ni - NAT inside, No - NAT outside, Nd - NAT DIA
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       H - NHRP, G - NHRP registered, g - NHRP registration summary
       o - ODR, P - periodic downloaded static route, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR
       & - replicated local route overrides by connected

Gateway of last resort is 203.0.113.1 to network 0.0.0.0

B*    0.0.0.0/0 [20/0] via 203.0.113.1, 00:38:21
      14.0.0.0/15 is subnetted, 1 subnets
B        14.8.0.0 [20/0] via 203.0.113.5, 00:27:04
      198.51.100.0/32 is subnetted, 3 subnets
B        198.51.100.1 [20/0] via 203.0.113.1, 00:38:21
B        198.51.100.2 [20/0] via 203.0.113.5, 00:30:21
I が Invalid (無効) で不正なルートとして認識されている
  • Cloudflare の 1.1.1.0/24 は PE02 が模擬する KDDI の AS2516 が広報するべきではないとして Bestpath ではなくなっている


V は Valid (正当) として正しいルートとして認識されている

  • PE02 は KDDI AS 2516 を模擬しており、14.8.0.0/15 を ROA キャッシュサーバが持っており、Bestpath になっている
  • AS 番号と経路情報の両方を詐称された場合、RPKI / ROV では防御できないことがわかる (現実には相当考えづらいですが・・・)


N は Not Found として不明なルートとして認識されている

  • ROA は登録していない AS もまだまだ多いため、不明なルートはルーティング テーブルに登録される動作を行う


ルーティングテーブルには Invalid が載らず、Valid は載っている

ROV 無効化

ROV 無効化 動作確認
ホスト HOST 備考
CE01
CE01(config)#router bgp 65002
CE01(config-router)#bgp be
CE01(config-router)#bgp bestpath pre
CE01(config-router)#bgp bestpath prefix-validate dis
CE01(config-router)#bgp bestpath prefix-validate disable
CE01#show ip bgp
BGP table version is 12, local router ID is 198.51.100.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
              t secondary path, L long-lived-stale,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *    0.0.0.0          203.0.113.5              0             0 2516 i
 *>                    203.0.113.1              0             0 65000 i
 *>   1.1.1.1/32       203.0.113.5              0             0 2516 i
 *>   14.8.0.0/15      203.0.113.5              0             0 2516 i
 *>   198.51.100.1/32  203.0.113.1              0             0 65000 i
 *>   198.51.100.2/32  203.0.113.5              0             0 2516 i
 *>   198.51.100.3/32  0.0.0.0                  0         32768 i
CE01#show ip route bgp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, m - OMP
       n - NAT, Ni - NAT inside, No - NAT outside, Nd - NAT DIA
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       H - NHRP, G - NHRP registered, g - NHRP registration summary
       o - ODR, P - periodic downloaded static route, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR
       & - replicated local route overrides by connected

Gateway of last resort is 203.0.113.1 to network 0.0.0.0

B*    0.0.0.0/0 [20/0] via 203.0.113.1, 00:43:16
      1.0.0.0/32 is subnetted, 1 subnets
B        1.1.1.1 [20/0] via 203.0.113.5, 00:00:32
      14.0.0.0/15 is subnetted, 1 subnets
B        14.8.0.0 [20/0] via 203.0.113.5, 00:31:59
      198.51.100.0/32 is subnetted, 3 subnets
B        198.51.100.1 [20/0] via 203.0.113.1, 00:43:16
B        198.51.100.2 [20/0] via 203.0.113.5, 00:35:16
CE01#show bgp rpki table | in ^1.1.1.0/24|^14.8.0.0/15
1.1.1.0/24           24      13335      0       192.41.192.218/323
14.8.0.0/15          24      2516       0       192.41.192.218/323
bgp bestpath prefix-validate disable
  • BGP テーブル、ルーティング テーブルともに ROV が無効化された
  • ROV が無効化されたため、BGP テーブル、ルーティング テーブルの両方にルートが載った
  • 一方 RPKI テーブルの情報は確認することが可能

動作確認 - ホスト別コマンドリスト

PE01 , PE02

  • show ip bgp
  • show ip route

CE01

  • show ip bgp
  • show ip route
  • show bgp rpki table
  • show bgp rpki servers

リファレンス

Cisco

IP ルーティング:BGP コンフィギュレーション ガイド(Cisco IOS XE Gibraltar 16.10.x 向け)

JANOG

RPKIやってみませんか?

今は RR で

neighbor {ip-address | ipv6-address} send-community extended
neighbor {ip-address | ipv6-address} announce rpki state

を使えば iBGP に通知できるかも

JPNIC

ROAパブリックキャッシュサーバの利用方法

リソースPKI(RPKI) とは

ROAとは

ROV (Route Origin Validation)とは

Hurricane Electric

AS2516 KDDI CORPORATION

  • 14.8.0.0/15 を AS2516 が持っていることが調査できる

AS13335 Cloudflare, Inc.

  • 1.1.1.0/24 を AS13335 が持っていることを調査できる

脚注