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 | headKhi chạy bằng service, đặt địa chỉ listen trong /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 | headRTR 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
- 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 22nhưng lại quảng bá/24. - 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.
- 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. - Không đặt local-pref cho
validcao hơnnot-foundmộ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 |