Accélérer bgpq4 avec IRRd dans un containeur

Vincent Bernat

Lors de la construction de filtres avec bgpq4 ou bgpq3, la vitesse de rr.ntt.net ou whois.radb.net est un goulot d’étranglement. Mettre à jour de nombreux filtres peut prendre plusieurs dizaines de minutes selon la charge de ces serveurs :

$ time bgpq4 -h whois.radb.net AS-HURRICANE | wc -l
909869
1.96s user 0.15s system 2% cpu 1:17.64 total
$ time bgpq4 -h rr.ntt.net AS-HURRICANE | wc -l
927865
1.86s user 0.08s system 12% cpu 14.098 total

Une première solution est de faire tourner votre propre instance d’IRRd sur votre réseau, en miroir des principaux registres de routage. Une alternative assez proche est de construire une image Docker prête à l’emploi contenant à la fois IRRd et toutes les données. Cela présente également l’avantage d’une intégration facile dans un système de CI/CD basé sur Docker.

$ git clone https://github.com/vincentbernat/irrd-legacy.git -b blade/master
$ cd irrd-legacy
$ docker build . -t irrd-snapshot:latest
[…]
Successfully built 58c3e83a1d18
Successfully tagged irrd-snapshot:latest
$ docker container run --rm --detach --publish=43:43 irrd-snapshot
4879cfe7413075a0c217089dcac91ed356424c6b88808d8fcb01dc00eafcc8c7
$ time bgpq4 -h localhost AS-HURRICANE | wc -l
904137
1.72s user 0.11s system 96% cpu 1.881 total

Le Dockerfile procède en trois étapes :

  1. construction d’IRRd1,
  2. récupération des diverses bases IRR,
  3. assemblage du containeur final avec le résultat des deux étapes précédentes.

La seconde étape récupère les bases de données utilisées par rr.ntt.net: NTTCOM, RADB, RIPE, ALTDB, BELL, LEVEL3, RGNET, APNIC, JPIRR, ARIN, BBOI, TC, AFRINIC, ARIN-WHOIS et REGISTROBR. Toutefois, il manque RPKI2. Adaptez comme vous le souhaitez !

L’image peut être reconstruite journalièrement ou hebdomadairement, selon vos besoins. Le dépôt inclut un fichier .gitlab-ci.yaml automatisant la construction et déclenchant la compilation de tous les filtres via CI/CD en cas de succès.


  1. Plutôt que d’utiliser la dernière version d’IRRd, l’image repose sur une version plus ancienne qui ne nécessite pas de serveur PostgreSQL et se contente de fichiers plats. ↩︎

  2. Contrairement aux autres, la base de données RPKI est construite à partir de des ROA RPKI publiées. Elles peuvent être récupérées grâce à rpki-client et transformées en objets RPSL pour être importées dans IRRd↩︎

Partager cet article