6 min readDe Kicked Team
birdy: un UI web pentru BIRD 2.x care rulează pe routerul tău
Am făcut open source birdy — un singur binar Go care îți modelează configurația BGP într-o bază de date, generează întregul bird.conf și îl aplică cu un auto-revert armat. Plus un dashboard live cu ce face de fapt fiecare sesiune.
- Networking
- BGP
- Open Source
- BIRD
Am făcut open source birdy, un UI web pentru BIRD 2.x care rulează pe router. Modelează sesiuni eBGP/iBGP, politici de import/export, RPKI, RTBH și BFD într-o bază de date, generează întregul bird.conf din acel model și îl aplică cu o verificare de sintaxă, un diff pe care îl poți revizui și un auto-revert armat. Îți dă și ceva ce BIRD n-a avut niciodată: un dashboard live cu ce face de fapt fiecare sesiune.
Este licențiat 0BSD — fără obligații, nici măcar atribuire. Iată ce este, de ce l-am construit și — la fel de important — ce nu este, în mod deliberat.
Problema: bird.conf peste SSH la 2 dimineața
BIRD este un software excelent, cu un format de configurare care răsplătește expertiza și pedepsește orice altceva. Să operezi AS210622 înseamnă că configurația noastră BGP este rețeaua: o greșeală de tastare într-un filtru nu dă 500 pe o pagină web, ci retrage prefixe sau scurge rute. Iar workflow-ul standard — intri pe SSH, editezi bird.conf, birdc configure, speri — are un mod de eșec în care greșeala care te scoate offline este aceeași care taie conexiunea prin care ai fi reparat-o.
Piesele unui workflow mai sigur există toate: birdc configure check pentru sintaxă, configure undo pentru rollback, bgpq4 pentru filtre de prefixe, looking glass-uri pentru verificare. Treaba lui birdy este să le asambleze într-o singură buclă deliberată: model → render → check → diff → apply → auto-revert dacă nu confirmi.
Ce face
birdy este un singur binar Go sprijinit pe SQLite, care rulează pe routerul însuși, sub systemd sau într-un container. Fără agent, fără controller, fără cloud, fără flotă.
Modelează. Peer-ii au roluri — upstream, IX, customer, iBGP — iar rolul dictează politica: tagging-ul originii cu large communities se face automat, așa cum am descris în articolul despre traffic engineering. Lanțuri compozabile de politici de import/export, seturi de prefixe și seturi de AS-uri (expandabile din IRR prin bgpq4, cu auto-refresh), rute statice, RPKI ROV, RTBH, BFD.
Generează și aplică. birdy generează întregul bird.conf din baza lui de date. Aplicarea este un act deliberat în UI: verificare de sintaxă, lint, review al diff-ului, apoi aplicare cu un auto-revert armat — dacă nu confirmi în fereastra de timp (să zicem, pentru că schimbarea ți-a tăiat propriul acces), configurația anterioară revine de la sine. Aceeași idee care face editările remote de firewall supraviețuibile, aplicată rutării.
Observă. Un dashboard live al fiecărei sesiuni, citit direct din socket-ul de control al BIRD, detalii per peer, un looking glass la cerere, o cronologie a flap-urilor și a atingerilor de prefix-limit, plus alerte pe Slack, Discord, email sau webhook. Un router este administrat local; mai multe routere cu birdy pot fi observate unul lângă altul, read-only, în siguranță.
Zero configurare ca să începi. Detectează ce poate face routerul — bgpq4, ping, traceroute — și activează ce găsește. Instalarea nu schimbă nimic; scrierea lui bird.conf se întâmplă doar când i-o ceri tu.
Are opinii, intenționat
birdy nu expune fiecare buton pe care îl are BIRD. Generează ceea ce credem noi că este bună practică în prezent, necondiționat:
- Default-deny la export conform RFC 8212 — nu se anunță nimic ce politica nu permite explicit
- Filtrare de prefixe bogon și ASN-uri bogon la ingress
- enforce-first-AS pe eBGP, next-hop-self pe iBGP
- Drop pentru RPKI-invalid când este configurat un validator
- Large communities care marchează originea fiecărei rute
Și va refuza categoric să genereze o configurație pe care o recunoaște ca route leak — rute de tranzit exportate către tranzit nu este un avertisment, este un refuz. Pentru construcțiile pe care nu le modelează există o portiță de raw config, dar balustradele sunt produsul.
Citește asta înainte să-l îndrepți spre orice
Secțiunea de onestitate, pentru că software-ul de rutare merită una:
- birdy este software beta. Așteaptă-te la bug-uri. Este un proiect personal lansat în speranța că e util și nu a avut încă anii de călire pe care îi merită o piesă de infrastructură de rutare.
- Nu importă bird.conf-ul tău existent. Generează întregul fișier din propria bază de date — orice nu cunoaște (un protocol, un filtru, o opțiune reglată manual) ar dispărea de la prima configurație pe care o scrie. Folosește-l pe un router nou sau pe unul a cărui configurație ești dispus să o recreezi de la zero în birdy.
- Un singur router, administrat local. Nu există orchestrare de flotă și nici planuri pentru așa ceva. Mai multe routere pot fi observate dintr-un singur loc; fiecare este administrat pe propria mașină.
Dacă aceste constrângeri se potrivesc situației tale — un router de edge nou, un laborator, un prim ASN — funcționează din momentul în care îl instalezi.
Cum a fost construit
birdy a fost construit cu agenți de AI coding făcând cea mai mare parte din tastat, sub design, coordonare și review umane — același workflow de agentic development despre care am scris. Opiniile din configurația generată — poziția față de RFC 8212, refuzul leak-urilor, ce înseamnă un „rol de peer” — sunt decizii umane din operarea unei rețele reale; agenții le-au transformat în Go funcțional considerabil mai repede decât am fi reușit singuri. A fost un punct de dovadă util că acest workflow poate produce tooling de infrastructură real, livrabil, nu doar demo-uri.
Încearcă-l
Ia-l de la github.com/floreabogdan/birdy — pachete, o imagine Docker și un binar simplu sunt pe pagina de releases, iar birdy init te duce la un ecran de login în circa un minut. Issue-urile și PR-urile sunt binevenite; licența 0BSD înseamnă că poți face literalmente orice cu el.
Lecții
- Workflow-ul BGP sigur este o problemă de asamblare — check, diff, apply, auto-revert existau toate; doar că nu erau o singură buclă.
- Pentru politici de rutare, opiniile bat configurabilitatea — o unealtă care refuză să genereze un route leak valorează cât zece care avertizează despre unul.
- Rolurile bat raw config-ul — „acest peer este un upstream” generează politici mai corecte decât orice cantitate de cod de filtre copiat și lipit.
- Spune ce nu va face software-ul tău — fără import de configurație și fără administrare de flotă sunt dezvăluiri de o linie care scutesc utilizatorii de o săptămână proastă.
Dacă preferi să ai pe cineva alături când îți ridici edge-ul BGP — sau vrei să faci peering cu AS210622 — scrie-ne la peering@kicked.ro sau prin serviciile noastre de inginerie de rețea.
