ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
IP 與 ASN

什麼是 ROA 與 RPKI:如何為 IP 段建立 ROA(RIPE/APNIC/ARIN/AFRINIC)及驗證方法

5 個步驟 7 分鐘閱讀 12 次閱讀 0
本文目錄

RPKI(資源公鑰基礎設施)用數字證書證明“哪個 ASN 有權廣播哪個 IP 段”,而 ROA(路由起源授權)就是寫明這一授權的簽名物件。如今越來越多運營商對 RPKI 無效的路由直接丟棄,沒有正確 ROA 的字首可能在部分網路中不可達。本文解釋什麼是 ROA 與 RPKI,介紹如何在 RIPE、APNIC、ARIN、AFRINIC 門戶為 IP 段建立 ROA、如何設定最大字首長度,以及如何用 rpki.cloudflare.com 和 Routinator 在 Debian/Ubuntu、CentOS/Rocky/AlmaLinux 上驗證。

步驟 1:瞭解 RPKI 驗證狀態並檢查當前 ROA

路由器將收到的路由與 ROA 比對,得到三種結果:Valid(起源 ASN 與長度都匹配)、Invalid(ASN 不符或字首比最大長度更細,會被許多網路丟棄)、NotFound(沒有覆蓋該字首的 ROA)。先用 RIPEstat 介面查詢當前狀態:

curl -s "https://stat.ripe.net/data/rpki-validation/data.json?resource=AS64500&prefix=198.51.100.0/24" | grep -o '"status":"[^"]*"'

步驟 2:整理要建立 ROA 的字首、起源 ASN 與最大字首長度

列出您實際廣播的所有字首及其起源 ASN。最大字首長度(Max Length)決定 ROA 還允許哪些更細的子字首:建議等於實際廣播長度,只為確實要廣播的更細字首單獨建立 ROA。把 Max Length 設得過寬(例如一個 /22 把最大長度設為 /24),等於允許他人冒用您的 ASN 廣播子字首進行劫持。

curl -s "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS64500" | grep -o '"prefix":"[^"]*"'
birdc show route export upstream1          # BIRD 2
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1 advertised-routes"   # FRR
Prefix              Origin ASN   Max Length
198.51.100.0/24     AS64500      24
198.51.100.0/23     AS64500      23     # only if you also announce the /23
2001:db8:100::/48   AS64500      48

步驟 3:在 RIR 門戶為 IP 段建立 ROA

只有 IP 資源的持有者(或其授權的會員帳號)才能建立 ROA,各 RIR 入口大致如下(以各 RIR 當前介面為準):

  • RIPE NCC:登入 LIR Portal,進入 RPKI Dashboard,啟用託管 RPKI 後新建 ROA。
  • APNIC:登入 MyAPNIC,在資源/路由管理中建立 ROA(也可同時生成 route 物件)。
  • ARIN:在 ARIN Online 中為資源啟用 Hosted RPKI,然後提交 ROA 請求。
  • AFRINIC:登入 MyAFRINIC,在 RPKI 選單中建立 ROA。

填寫字首、起源 ASN 和最大長度並儲存,通常幾分鐘到一小時內釋出到 RPKI 倉庫。如果 IP 是向 IMIDC 租用的,資源持有者是 IMIDC,請提交工單提供字首、您的 ASN 和最大長度,我們會代為建立 ROA,並可同時建立 IRR route 物件。

Prefix:      198.51.100.0/24
Origin ASN:  AS64500
Max Length:  24
IRR route object: yes
如果同一字首正由舊 ASN 或其他服務商廣播,建立新 ROA 前請先確認遷移計劃,否則舊路由可能立即變為 Invalid 導致中斷。暫不使用的 IP 段可以建立起源為 AS0 的 ROA 以防被劫持。

步驟 4:用 rpki.cloudflare.com 線上驗證 ROA

開啟 rpki.cloudflare.com 的驗證器檢視,輸入 ASN 和字首即可看到 Valid/Invalid 結果,也能瀏覽覆蓋該字首的全部 ROA。RIPEstat、bgp.tools 等站點同樣可以檢視字首的 RPKI 狀態。也可以重複步驟 1 的命令確認結果變為 valid。

curl -s "https://stat.ripe.net/data/rpki-validation/data.json?resource=AS64500&prefix=198.51.100.0/24" | grep -o '"status":"[^"]*"'

步驟 5:用 Routinator 本地驗證 RPKI

Routinator 是 NLnet Labs 開源的 RPKI 驗證器,可以在自己的伺服器上獨立驗證,也能作為 RTR 服務給路由器提供資料。以下通過 Rust 工具鏈安裝(NLnet Labs 也提供 Debian/Ubuntu 與 RHEL 系的軟體包倉庫)。首次執行需要同步全部 RPKI 倉庫,可能需要數分鐘。

# Debian / Ubuntu
apt install -y curl build-essential
# CentOS / Rocky / AlmaLinux
dnf install -y curl gcc
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
cargo install --locked routinator
routinator validate --asn AS64500 --prefix 198.51.100.0/24
routinator vrps --select-asn AS64500

常見問題

有了 ROA 還需要 IRR route 物件嗎?

需要。很多上遊仍按 IRR 生成字首過濾列表,建議 ROA 與 route/route6 物件同時存在且一致。

ROA 建立後多久生效?

RIR 釋出通常在一小時內,各網路的驗證器按自身週期重新整理,一般數十分鐘到數小時內全網可見。

同一字首可以授權給多個 ASN 嗎?

可以,為每個 ASN 各建立一條 ROA 即可,適用於多個 ASN 同時廣播或遷移過渡期。

如仍無法解決,可提交工單聯絡 IMIDC 7×24 技術支援。

這篇文章有幫助嗎?

相關教程