2024-07-16 RPKI 機能検証

提供:hkatou_Lab
2024年8月4日 (日) 10:00時点におけるHkatou (トーク | 投稿記録)による版 (Hkatou がページ「2024-07-16-RPKI 機能検証」を「2024-07-16 RPKI 機能検証」に移動しました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

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

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

RPKI 機能概要

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

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

検証の目標

RPKI で不正な経路を BGP テーブル (BGP RIB) とルーティング テーブルから削除できること。 RPKI のデータを受信するが、バリデーションは無効化し、不正な経路でもルートを登録できること。

ROA 未登録の AS は、不明として BGP テーブルとルーティング テーブルに登録されること。

用語

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

構成図

  • Internet : インターネット
    • 実インターネットへの Bridge
    • DHCP で IP を取得すると、インターネットまで疎通できるセグメントと、EVE-NG の NIC を紐づけてある
  • 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 BGP ルータ ID
203.0.113.0/30 Gi1 203.0.113.1/30 eBGP ピアリング用
65002 CE01 Gi3 203.0.113.2/30
- Lo0 198.51.100.3/32 BGP ルータ ID
203.0.113.4/30 Gi4 203.0.113.6/30 eBGP ピアリング用
2516 PE02 Gi1 203.0.113.5/30
- Lo0 198.51.100.2/32 BGP ルータ ID
正当・詐称グローバルアドレス
種別 AS 番号 ネットワーク アドレス ホスト インターフェース ホスト アドレス 備考
グローバルアドレス 2516 1.1.1.1/24 PE02 Lo1 1.1.1.1/32 詐称 : KDDI が割当を受けていないアドレス

AS13335 APNIC and Cloudflare DNS Resolver project

27.34.128.0/19 Lo2 14.8.0.0/15 正当 : KDDI が割当を受けているアドレス

AS2516 KDDI Web Communications Inc.


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

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

  • 192.41.192.218 が JPNIC ROA パブリック キャッシュ サーバの IP

コンフィギュレーション

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

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

このページのリファレンスに記載した、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 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
PE01 で送信元 PAT されて、JPNIC の 192.41.192.218 に疎通できた
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 では防御できないことがわかる
    • RPKI の次として、BGPsec による Path Validation を実装する、というのが将来的な目論見らしい


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

  • ROA は登録していない AS もまだまだ多いため、不明なルートはルーティング テーブルに登録される動作を行う
  • 今回は文書用アドレスを使用しているため、ROA が登録されていなかった -> Not Dound になっている

ルーティングテーブルには Invalid が載らず、Valid は載っていため、RPKI として正しい動作をしていると判断できる ルーティングテーブルには Invalid が載らず、Valid は載っていため、RPKI として正しい動作をしていると判断できる

CE01#show ip bgp rpki servers

BGP SOVC neighbor is 192.41.192.218/323 connected to port 323
Flags 192, Refresh time is 150, Serial number is 0, Session ID is 18920
InQ has 0 messages, OutQ has 0 messages, formatted msg 1
Session IO flags 3, Session flags 4008
 Neighbor Statistics:
  Prefixes 25988
  Connection attempts: 3
  Connection failures: 2
  Errors sent: 0
  Errors received: 0

Connection state is ESTAB, I/O status: 1, unread input bytes: 0
Connection is ECN Disabled, Mininum incoming TTL 0, Outgoing TTL 255
Local host: 203.0.113.2, Local port: 34776
Foreign host: 192.41.192.218, Foreign port: 323
Connection tableid (VRF): 0
Maximum output segment queue size: 50

Enqueued packets for retransmit: 0, input: 0  mis-ordered: 0 (0 bytes)

Event Timers (current time is 0x4F0E0):
Timer          Starts    Wakeups            Next
Retrans             2          0             0x0
TimeWait            0          0             0x0
AckHold           303          0             0x0
SendWnd             0          0             0x0
KeepAlive         388          0         0x50A9B
GiveUp              0          0             0x0
PmtuAger            1          0         0xD40DA
DeadWait            0          0             0x0
Linger              0          0             0x0
ProcessQ            0          0             0x0

iss: 1871559101  snduna: 1871559110  sndnxt: 1871559110
irs: 1195234285  rcvnxt: 1195754054

sndwnd:  29200  scale:      0  maxrcvwnd:  16384
rcvwnd:  16384  scale:      0  delrcvwnd:      0

SRTT: 234 ms, RTTO: 2984 ms, RTV: 2750 ms, KRTT: 0 ms
minRTT: 4 ms, maxRTT: 1000 ms, ACK hold: 200 ms
uptime: 55979 ms, Sent idletime: 9149 ms, Receive idletime: 9149 ms
Status Flags: active open
Option Flags: keepalive running, nagle, path mtu capable
IP Precedence value : 6

Datagrams (max data segment is 1460 bytes):
Rcvd: 387 (out of order: 1), with data: 382, total data bytes: 519768
Sent: 420 (retransmit: 0, fastretransmit: 0, partialack: 0, Second Congestion: 0), with data: 1, total data bytes: 8

 Packets received in fast path: 0, fast processed: 0, slow path: 0
 fast lock acquisition failures: 0, slow path: 0
TCP Semaphore      0x7F2170EE9C30  FREE
CE01#show ip bgp rpki table
23937 BGP sovc network entries using 3829920 bytes of memory
25988 BGP sovc record entries using 831616 bytes of memory

Network              Maxlen  Origin-AS  Source  Neighbor
1.0.4.0/22           22      38803      0       192.41.192.218/323
1.0.64.0/18          18      18144      0       192.41.192.218/323
1.1.4.0/22           22      4134       0       192.41.192.218/323
1.1.16.0/20          20      4134       0       192.41.192.218/323
1.2.12.0/22          22      4134       0       192.41.192.218/323
<omit>
RPKI のポート番号である 323 が確認できる

ROV 無効化

ROV 無効化 動作確認
ホスト HOST 備考
CE01
CE01#configure terminal
CE01(config)#router bgp 65002
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 テーブル、ルーティング テーブルの両方にルートが載った
  • 一方 ROA テーブルの情報は確認することが可能

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

PE01 , PE02

  • show ip bgp
  • show ip route

CE01

show bgp rpki コマンドは、将来的になくなる模様。

show ip bgp rpki コマンドを使用しましょう。

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

課題

RPKI で ROA を受信するタイミングが遅い

BGP でルーティング テーブルを受信 -> RPKI ROA キャッシュサーバから情報を取得、という順番だと ROV でルートを削除するのが遅れてしまう。

  • ROA 受信・Validation までルートが削除されない
  • 下位にルートを広報する際、LAN 側の OSPF で max-metric にする時間を長くするなどの対処が必要

再起動後に ROV が動作したか、確認が必要。Web 上の情報では clear bgp などのコマンドを実施するなどの例が見つかりました。

実際の導入時には LAN に ROA キャッシュサーバを構築し、管理ポートか IGP 経由で ROA データを取得するなどの対処策が考えられます。

Path Validation は RPKI に実装されていない

ROA は AS 番号とグローバル IP アドレスの組み合わせを保存しており、BGP でその組み合わせを検証しています。

これは AS 番号まで詐称された場合 (今回の検証環境) や、Origin AS を詐称された場合は、不正な経路の流入を防げないことを意味します。

2024 年現在、筆者は以下の理解をしています。

  • RPKI : Prefix Origin AS Validation
  • BGPsec : AS Path Validation

リファレンス

Cisco

コンフィギュレーション ガイド

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

bgp rpki server

コマンド リファレンス

show ip bgp rpki servers

show ip bgp rpki table

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 が持っていることを調査できる

脚注