Hi,
Yes, we lost my report from a bit more extensive test, so let me try to write that again.
I left my validator VM offline for 12 hours and removed Internet access from it and when I started it again - it tried to refresh ROAs from the Internet repositories, failed and then loaded whatever was in cache on the disk and started providing RPKI validation service to my test router - so that is good result.
RPKI validator is not somewhere remote - it’s on the same subnet as test router. You can loose connectivity to validator in many ways - switch dies or VM where validator is running dies or you have power outage and validator VM doesn’t want to boot anymore… many ways how to loose access to validator from your router.
Biggest problem that I see here is that if you add anywhere in your route filter “rpki-verify validator” things become interesting, specially if you loose connectivity to your validator (for whichever reason). Here are my filter rules when validator is accessible:
[jan@MK-TEST-lju] /routing/filter/rule> print
Flags: X - disabled, I - inactive
0 chain=bgp_in rule=“if (dst==2607:fae0:a000::/36) {accept}”
1 chain=bgp_in rule=“if (dst==2607:fae0:2000::/36) {accept}”
2 chain=bgp_in rule=“rpki-verify validator”
3 chain=bgp_in rule=“if (rpki invalid) { reject } else { accept }”
4 chain=bgp_in rule=“if ( protocol bgp ) { accept }”
If I shut down validator - after 7200 seconds (default expiry interfal for RPKI validator in ROS 7.1) I get this:
[jan@MK-TEST-lju] /routing/filter/rule> print
Flags: X - disabled, I - inactive
0 chain=bgp_in rule=“if (dst==2607:fae0:a000::/36) {accept}”
1 chain=bgp_in rule=“if (dst==2607:fae0:2000::/36) {accept}”
2 > I > chain=bgp_in rule=“rpki-verify validator”
3 chain=bgp_in rule=“if (rpki invalid) { reject } else { accept }”
4 chain=bgp_in rule=“if ( protocol bgp ) { accept }”
Note the “I” in the filter chain. That little “I” renders the whole filter chain invalid. Completely. Even 2607:fae0:a000::/36 and 2607:fae0:2000::/36 prefixes that I set to unconditionally accept before RPKI clause are now inactive.
[jan@MK-TEST-lju] /ipv6/route> print detail where dst-address=2607:fae0:a000::/36
Flags: D - dynamic; X - disabled, I - inactive, A - active;
c - connect, s - static, r - rip, b - bgp, o - ospf, d - dhcp, v - vpn, m - modem, y - copy;
H - hw-offloaded; + - ecmp
DIb dst-address=2607:fae0:a000::/36 routing-table=main gateway=2607:fae0:a000:14::2
immediate-gw=2607:fae0:a000:14::2%vlan500-to-mk-test distance=200 scope=40 target-scope=30
bgp-local-pref=100 bgp-atomic-aggregate=yes bgp-origin=igp
Is it wise to invalidate the whole filter chain just because RPKI validator is not accessible?
This actually means that if your validator VM goes down for whichever reason - you loose all routes received from your BGP peers that are using any of filters that are using RPKI validation as incoming - that means usually cutting yourself from the global internet, if your policy is to RPKI verify all received routes.
My suggestion would be to change the filter behaviour to “if RPKI validator is not reachable just ignore the rpki-verify clause and still process the rest of the filter chain normally.”
Cheers, Jan