TTR Networks

Intermediate · IRR, RPSL and AS-SETs · section 7 of 8

IRR hygiene and pitfalls

✓ Lab-tested 17 October 2026 on IRRd 4.5.3, bgpq4 1.9, PostgreSQL 16, Redis 7

Filters built from IRR data are only as good as the data. Two lists: what to do for your own objects, and what to watch for in other people's.

Your own objects

  • A route or route6 object for every prefix you announce, in the authoritative IRR of the RIR that manages it. Include space you originate for customers. Without them, your neighbours' filters will drop your announcements.
  • One accurate as-set, hierarchically named (AS64500:AS-CUSTOMERS), containing exactly your customer cone. Remove customers when they leave.
  • Publish it: set IRR as-set/route-set in PeeringDB and keep your aut-num export consistent.
  • Protect your maintainer: use SSO with two-factor or PGP keys, never shared passwords, and review who has access.
  • Delete stale objects, including old registrations in non-authoritative IRRs that you no longer control.
  • Check regularly with tools such as IRR Explorer (NLnet Labs) or bgp.tools, which compare what you announce with what you've registered.

Other people's data

PitfallWhat happensDefence
Proxy or stale objects in non-auth IRRsSomeone registers a route object for space they don't hold, and filters accept their hijackPrefer authoritative sources (-S); combine with RPKI
Set bloatA customer's set expands to a large part of the internetAlert on large changes; limit expansion depth; max-prefix
Flat-name collisionsAS-FOO in RADb isn't the AS-FOO in RIPEUse hierarchical names; restrict sources
Empty expansionDeny-all filter, so the customer goes dark after a typoTreat empty or tiny results as an error, not a config
Unsigned dataAnyone with maintainer access can change a setRPKI adds cryptographic origin checks; see the next lesson

The IRR tells you what a network intends to announce. It doesn't prove the network is allowed to announce it. That is the gap RPKI fills.

Check your understanding

An attacker creates a route object in a non-authoritative IRR for your prefix, with their AS as origin, then announces it to a provider whose filters are built from all IRR sources. What stops this best?

  • Your own route object in the RIR's IRR
  • A ROA for your prefix, with providers dropping RPKI-invalid routes
  • Using a hierarchical as-set name
  • A stronger password on your maintainer