KennisbankNetwerk

Failover met BGP: privé-AS, VRRP en AS-path prepending

29 oktober 20267 min leestijd

Een tweede router, een tweede verbinding, en toch ligt alles plat zodra er één omvalt. Redundantie die niet automatisch omschakelt, is een reserveonderdeel op de plank. De Cybersecuritymaand ging dit jaar over blijven draaien als het misgaat, en daar hoort ook de vraag bij hoe je netwerk omschakelt. Het goede nieuws: je hebt geen complex ontwerp nodig. Met een paar bouwstenen die elke router kent, bouw je een failover die je zelf nog begrijpt als het om drie uur 's nachts misgaat.

BGP zonder eigen AS-nummer

De misvatting is dat BGP alleen iets is voor wie een eigen AS-nummer en eigen IP-ruimte heeft. Heb je één upstream en gebruik je de adresruimte van die provider, dan kan BGP ook met een privé-AS-nummer, uit de reeks 64512 tot 65534. Je provider haalt dat nummer weg voordat de routes het internet op gaan; voor de buitenwereld komt je verkeer gewoon uit het netwerk van de provider.

Waarom zou je dat doen? Omdat het een kleine redundante opzet eenvoudiger maakt. Wil je je adresruimte zelf indelen achter je eigen switch of firewall, dan kondig je je subnetten via BGP aan over twee sessies, één per router van je provider. Valt een router of verbinding weg, dan verdwijnen de routes via die kant en loopt het verkeer over de andere. Geen statische routes die je bij elke wijziging aan beide kanten moet bijwerken, en geen handwerk bij een storing. Wil je later naar een tweede provider, dan stap je over op een eigen AS-nummer.

VRRP voor de gateway, BGP voor je routes

VRRP lost een ander probleem op: twee routers delen één gateway-adres, de VIP. De router met de hoogste prioriteit is master en beantwoordt dat adres; valt hij weg, dan neemt de andere het over. Voor een server of firewall die alleen een default gateway nodig heeft, is dat alles wat je hoeft in te stellen.

VRRP en BGP gaan prima samen. Elke router heeft naast de gedeelde VIP ook een eigen adres in hetzelfde subnet. Je BGP-sessies zet je op naar die eigen adressen, niet naar de VIP: een sessie naar de VIP zou bij elke omschakeling opnieuw moeten opbouwen. Zo heb je twee onafhankelijke sessies voor je eigen prefixen, en blijft de VIP beschikbaar als default gateway voor gewone internetconnectiviteit.

Bepalen welke kant de voorkeur heeft

Twee actieve paden zijn mooi, maar vaak wil je dat het verkeer normaal over één kant loopt. Voor uitgaand verkeer bepaal je dat zelf, met local-pref op je eigen router. Voor inkomend verkeer moet je de rest van het netwerk overtuigen:

  • AS-path prepending — je kondigt je route via de reservekant aan met je eigen AS-nummer een paar keer extra in het pad. Het pad wordt langer en dus minder aantrekkelijk, maar blijft beschikbaar als het andere wegvalt.
  • Communities — met BGP-communities vraag je je provider om iets met je route te doen. Bij ons kun je zo een route een, twee of drie keer laten prependen richting een specifieke upstream of exchange, een route alleen naar bepaalde partijen laten aankondigen, of de local-pref van je route laten verlagen. De volledige lijst stemmen we af in de intake.
  • Graceful shutdown — vóór gepland onderhoud tag je je routes met 65535:0. Wij zetten de local-pref van zo'n route dan op nul, zodat het verkeer al is omgeleid voordat je de sessie echt dichtzet.

Snel merken dat iets weg is

Een failover is zo snel als de detectie. BGP merkt een dode neighbor uit zichzelf pas als de hold timer afloopt, en dat kan tot anderhalve minuut duren. Ligt een verbinding stil zonder dat de interface down gaat, bijvoorbeeld door een storing in een tussenliggend netwerk, dan stroomt er al die tijd verkeer een gat in. BFD lost dat op: een lichtgewicht protocol dat op de sessie meedraait en binnen enkele seconden ziet dat de andere kant niet meer antwoordt. Zet het aan op elke sessie die ertoe doet, aan beide kanten.

Hoe wij het zelf doen: anycast-loadbalancers

Voor onze eigen publieke diensten gebruiken we dezelfde bouwstenen. De voorkant bestaat uit drie loadbalancers met HAProxy en BIRD, die elk hetzelfde service-adres via BGP aankondigen aan onze core-routers, met BFD op de sessie. De routers verdelen het verkeer met ECMP over alle loadbalancers die een route aankondigen. Klanten kunnen met hun dienst achter deze loadbalancers zitten.

Er zijn twee manieren waarop een loadbalancer uit de verdeling verdwijnt:

  • De machine valt uit — BFD ziet binnen enkele seconden dat de sessie dood is, en de route verdwijnt.
  • De machine leeft, maar HAProxy niet — een healthcheck controleert elke twee seconden of de dienst antwoordt. Na drie mislukte controles haalt hij het service-adres van de machine, BIRD trekt de route in en de router stuurt niets meer die kant op. Komt de dienst terug, dan wordt het adres na drie geslaagde controles weer aangekondigd.

Updates rollen we één machine tegelijk uit. Pas als de dienst weer antwoordt en alle BGP-sessies weer up zijn, gaat de volgende. Zo is er bij onderhoud altijd genoeg capaciteit, en merkt een bezoeker er niets van.

Failover met ons

Wil je een redundante aansluiting op ons eigen netwerk: we leveren IP-transit met BGP op twee routers, met een privé-AS of je eigen AS-nummer, en met VRRP als je ook een gedeelde gateway wilt. Hoe een sessie er technisch uitziet, staat in de technische versie. Staat je apparatuur in een rack bij ons, kijk dan bij colocatie; wil je de opzet eerst laten doordenken, dan helpen we met netwerkontwerp. Neem contact op en vertel wat er moet blijven draaien.

Veelgestelde vragen

Veelgestelde vragen

Heb ik een eigen AS-nummer nodig voor failover met BGP?

Niet als je één upstream hebt en de adresruimte van die provider gebruikt. Dan kan de BGP-sessie met een privé-AS-nummer, en haalt de provider dat nummer weg voordat je routes het internet op gaan. Een eigen AS-nummer heb je pas nodig als je via meerdere providers wilt aankondigen.

Wat is het verschil tussen VRRP en BGP voor failover?

VRRP laat twee routers één gateway-adres delen: valt de ene weg, dan neemt de andere het adres over. Dat is genoeg voor een default route. Met BGP kies je per route welke kant de voorkeur heeft en kun je meer dan twee paden gebruiken. De twee gaan prima samen: VRRP voor de gateway, BGP voor je eigen prefixen.

Hoe snel schakelt een BGP-failover om?

Zonder hulp merkt BGP een dode sessie pas als de hold timer afloopt, standaard tot anderhalve minuut. Met BFD op de sessie zie je een storing binnen enkele seconden of sneller, afhankelijk van de timers die je samen met je provider kiest.

Antwoord niet gevonden?

Stel je vraag direct aan een engineer — we reageren doorgaans binnen één werkdag.