2024-07-16 RPKI 機能検証
最近実網でも実装されつつある、RPKI について、CSR1000V で検証を実施しました。
このページにラボシナリオとして、コンフィグや確認コマンド、疎通確認のポイントなどをまとめています。
RPKI 機能概要
- RPKI で電子証明書を用いて信頼性の高い AS 番号と経路情報を各 AS で作成する
- 各 AS はデータをサーバに登録する
- BGP ルータがサーバから RPKI の ROA データを取得する
- 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 が正しいか検証する
機能概要
- RPKI で電子証明書を用いて信頼性の高い AS 番号と経路情報を各 AS で作成する
- ROA で RPKI のデータを取得する
- 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 で広報する
- パブリック ROA サーバへの経路を持つ
- PE02 : プロバイダ エッジルータ 2
- KDDI の AS2516 を模擬
- 詐称した経路 1.1.1.1/32 を BGP で広報する
- 正当な経路 14.8.0.0/15 を BGP で広報する
- CE01 : カスタマー エッジルータ 1
- 試験対象のルータ
- ROA キャッシュサーバに接続し、経路情報のデータを取得する
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 パブリック キャッシュサーバを提供してくれていますので、今回はここに接続します。
- 192.41.192.218 が JPNIC ROA パブリック キャッシュ サーバの IP
コンフィギュレーション
ここではプロトコル・ホスト別にコンフィギュレーションを簡単に解説します。
自分でコンフィグを組んでみたい人向けに、デフォルトでは表示しません。
このページのリファレンスに記載した、Cisco のサイトを参考に設定してみると良いでしょう。
PE01
プロトコル | コンフィグ | 解説 |
---|---|---|
インターフェース
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 を行う
|
PE02
プロトコル | コンフィグ | 解説 |
---|---|---|
インターフェース
|
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#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
|
疎通確認・動作確認
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 (無効) で不正なルートとして認識されている
ルーティングテーブルには 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 無効化
ホスト | 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
|
動作確認 - ホスト別コマンドリスト
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 向け)
コマンド リファレンス
JANOG
今は RR で
neighbor {ip-address | ipv6-address} send-community extended
neighbor {ip-address | ipv6-address} announce rpki state
を使えば iBGP に通知できるかも
JPNIC
ROV (Route Origin Validation)とは
Hurricane Electric
- 14.8.0.0/15 を AS2516 が持っていることが調査できる
- 1.1.1.0/24 を AS13335 が持っていることを調査できる