Sổ tay kỹ thuật

RPKI Route Origin Validation với Routinator, IOS XR và Junos

how-to#bgp#rpki#iosxr#junos· cập nhật 2026-11-06

Dựng Routinator làm RTR server, cấu hình router IOS XR và Junos lấy VRP, rồi drop route RPKI invalid trong import policy.

Sửa trang này
Mục lục

Tóm tắt: Validator (Routinator) tải ROA từ 5 RIR, kiểm chữ ký, xuất danh sách VRP (prefix, maxLength, origin AS) qua giao thức RTR (RFC 8210). Router chỉ so origin AS và độ dài prefix của route nhận được với VRP để gán trạng thái valid / invalid / not-found. Việc loại route invalid là do import policy, không tự động.

Ví dụ: hai validator 192.0.2.50 và 192.0.2.51 (RTR TCP 3323), router XR lo 192.0.2.1, Junos lo 192.0.2.2, upstream 198.51.100.2 AS 64510.

Luồng hoạt động

flowchart LR TA["Trust anchor 5 RIR"] -->|"rsync / RRDP"| RT["Routinator 192.0.2.50"] RT -->|"RTR tcp/3323 VRP"| XR["PE IOS XR"] RT -->|"RTR tcp/3323 VRP"| JR["PE Junos"] UP["Upstream AS64510"] -->|"BGP update"| XR XR --> P{"Validation state"} P -->|invalid| D["drop"] P -->|"valid / not-found"| A["nhận, đặt LP"]
Trạng thái Điều kiện
Valid Có VRP phủ prefix, origin AS khớp, độ dài prefix ≤ maxLength
Invalid Có VRP phủ prefix nhưng origin AS khác, hoặc prefix dài hơn maxLength
Not-found (Junos: unknown) Không VRP nào phủ prefix

Cấu hình

Routinator

Cài từ repo của NLnet Labs (gói routinator cho Debian/Ubuntu/RHEL) hoặc Docker. Chạy tối thiểu hai validator ở hai nơi khác nhau.

# chạy tay để thử: RTR cho router, HTTP cho metrics/API
routinator server --rtr 192.0.2.50:3323 --http 192.0.2.50:8323
 
# kiểm một route: origin AS64510 có hợp lệ cho 203.0.113.0/24?
routinator validate --asn AS64510 --prefix 203.0.113.0/24
 
# xuất toàn bộ VRP ra CSV
routinator vrps --format csv | head

Khi chạy bằng service, đặt địa chỉ listen trong /etc/routinator/routinator.conf:

/etc/routinator/routinator.conf
rtr-listen = ["192.0.2.50:3323"]
http-listen = ["192.0.2.50:8323"]
sudo systemctl enable --now routinator
curl -s http://192.0.2.50:8323/status | head

RTR không mã hoá. Chỉ mở cổng 3323 cho loopback/management của router (ACL, firewall). Lần đầu khởi động Routinator mất vài phút để tải repository, trong lúc đó router chưa có VRP.

IOS XR

router bgp 64500
 rpki server 192.0.2.50
  transport tcp port 3323
  refresh-time 600
 !
 rpki server 192.0.2.51
  transport tcp port 3323
  refresh-time 600
 !
 address-family ipv4 unicast
  bgp origin-as validation enable
 !
!
route-policy UPSTREAM-IN
  if validation-state is invalid then
    drop
  endif
  if validation-state is not-found then
    set local-preference 90
  endif
  pass
end-policy
!
router bgp 64500
 neighbor 198.51.100.2
  address-family ipv4 unicast
   route-policy UPSTREAM-IN in
  !
 !
!

bgp origin-as validation enable cần cho bản XR mới (từ 6.5.x validation tắt mặc định theo address-family). Bản cũ bật mặc định, khi đó lệnh có thể không tồn tại.

Junos

set routing-options validation group RPKI session 192.0.2.50 port 3323
set routing-options validation group RPKI session 192.0.2.50 local-address 192.0.2.2
set routing-options validation group RPKI session 192.0.2.50 refresh-time 600
set routing-options validation group RPKI session 192.0.2.51 port 3323
set routing-options validation group RPKI session 192.0.2.51 local-address 192.0.2.2
set routing-options validation group RPKI session 192.0.2.51 refresh-time 600
set policy-options policy-statement RPKI term VALID from validation-database valid
set policy-options policy-statement RPKI term VALID then validation-state valid
set policy-options policy-statement RPKI term VALID then next policy
set policy-options policy-statement RPKI term INVALID from validation-database invalid
set policy-options policy-statement RPKI term INVALID then validation-state invalid
set policy-options policy-statement RPKI term INVALID then reject
set policy-options policy-statement RPKI term UNKNOWN from validation-database unknown
set policy-options policy-statement RPKI term UNKNOWN then validation-state unknown
set policy-options policy-statement RPKI term UNKNOWN then local-preference 90
set policy-options policy-statement RPKI term UNKNOWN then next policy
set protocols bgp group ISP-A import [ RPKI ISP-A-IN ]

Junos chỉ gán validation-state cho route khi import policy có then validation-state. Policy RPKI đặt đầu chuỗi import, policy lọc bogon/prefix (ISP-A-IN) theo sau.

Kiểm tra

Mục đích IOS XR Junos
Trạng thái session RTR show bgp rpki server summary show validation session
Chi tiết một server show bgp rpki server 192.0.2.50 show validation session (cùng lệnh trên)
Bảng VRP trên router show bgp rpki table show validation database
Số VRP đã nhận show bgp rpki summary show validation statistics
Trạng thái của một prefix show bgp ipv4 unicast 203.0.113.0/24 (dòng origin-AS validity) show route 203.0.113.0/24 detail | match Validation
Liệt kê route invalid — show route validation-state invalid
Đối chiếu từ validator routinator validate --asn AS64510 --prefix 203.0.113.0/24 như cột trái

Xử lý route invalid

  1. Route của chính mình hoặc khách bị invalid: kiểm ROA trên portal RIR (origin AS, maxLength). Lỗi hay gặp là ROA /22 maxLength 22 nhưng lại quảng bá /24.
  2. Khách mới có prefix mà chưa tạo ROA: kết quả là not-found, không bị drop. Chỉ khi có ROA sai mới thành invalid.
  3. Cần cho qua tạm một prefix invalid (sự cố của bên thứ ba): Routinator hỗ trợ file ngoại lệ SLURM (RFC 8416) qua tuỳ chọn exceptions, áp tập trung thay vì sửa policy trên từng router.
  4. Không đặt local-pref cho valid cao hơn not-found một cách tuỳ tiện: dễ làm đổi traffic engineering sẵn có.

Lỗi thường gặp

Triệu chứng Nguyên nhân Cách xử lý
Session RTR không lên ACL/firewall chặn tcp/3323, Routinator listen ở 127.0.0.1 Sửa rtr-listen, ss -ltnp | grep 3323 trên validator
Session lên nhưng 0 VRP Routinator chưa tải xong lần đầu, hoặc không ra được Internet (rsync 873, HTTPS 443) Xem log journalctl -u routinator, curl http://192.0.2.50:8323/status
XR: mọi route not-found dù có VRP Chưa bật validation cho address-family bgp origin-as validation enable
Junos: show route không có validation state Import policy thiếu then validation-state Thêm policy RPKI vào đầu chuỗi import
Route invalid vẫn được nhận Chỉ gán state mà không drop/reject XR if validation-state is invalid then drop; Junos term INVALID then reject
Cả hai validator chết, mọi route thành not-found VRP hết hạn trên router; route không bị drop nhưng mất bảo vệ ROV Giám sát session RTR, chạy validator ở hai site

Tham khảo