De avond van 4 oktober 2021 zal de boeken ingaan als de avond van de grootste Facebook storing in meer dan 10 jaar. En met Facebook bedoel ik niet alleen de site zelf, maar ook Facebook Messenger, Instagram en WhatsApp. Allemaal Facebook/Meta producten of bedrijven. Hoe kon dit gebeuren?
BGP
Je weet het misschien niet, maar het internet wordt bij elkaar gehouden door BGP. Het zogenaamde Border Gateway Protocol. Grote partijen met grote verzamelingen IP adressen kunnen via dit protocol aan elkaar vertellen wie ze zijn en hoe ze te bereiken zijn. Theoretisch kun je als enkele internet gebruiker dit protocol ook gebruiken maar dat heeft niet zoveel zin: omdat je bij een internetprovider zit die dit al voor je doet.
Dus je internetprovider is zo’n partij die BGP gebruikt, maar Facebook, Google en Netflix ook. Het gaat dus om partijen die grote verzamelingen IP adressen hebben: en die IP adressen delen ze uit aan hun servers of klanten zodat die op internet te vinden zijn (want een IP adres is een adres/plekje op het internet).
Die partijen ‘praten’ dus BGP met elkaar om IP adres informatie met elkaar uit te wisselen. Dit uitwisselen noemen ze ook wel peeren of een peering opzetten. Dit betekent dat jouw internetprovider vertelt aan Facebook welke verzameling IP adressen (aka een netwerk) zij allemaal hebben, en Facebook vertelt aan jouw internet provider welke IP adressen (hun netwerk) zij allemaal hebben. Dit uitwisselen van informatie gebeurt veelal op Internet Exchanges. De AMS-IX en de NL-IX zijn voorbeelden van zulke internet exchanges. De meeste moderne landen hebben meestal één of meerdere internet exchanges. En daar vindt dus een uitwisseling plaats van IP informatie tussen partijen met veel IP adressen, zodat al die partijen weten hoe ze elkaars netwerk kunnen vinden of te wel hoe de route van de ene naar de andere partij loopt. Facebook zit op vrijwel alle grote internet exchanges in de wereld en vertelt daar steeds wat hun IP adressen zijn (dus wat hun netwerk is). Zo koppelen dus internetproviders uit de hele wereld hun netwerk via een peering overeenkomst aan Facebook (meestal is dit gratis, want het is win-win) .
Dus nee, er wordt bij een peering niet specifiek uitgewisseld dat Pietje uit Lutjebroek een bepaald IP adres heeft. Maar wel dat een verzameling van deze miljoen IP adressen bijvoorbeeld bij deze bepaalde internetprovider hoort. Zo weet de rest van de wereld dat als je een IP adres uit die verzameling wil bereiken: dan moet je dus de dus weg naar die partij kiezen. Dat is informatie die dus door BGP wordt uitgewisseld.
BGP wordt altijd ingesteld aan 2 kanten: voor sommige mensen is dit letterlijk hun dagtaak om BGP koppelingen op te zetten met allerlei partijen. Hoe meer koppelingen, hoe beter de paden naar jou toe zijn op het internet.
Echter nu is het zo wanneer je een fout maakt in deze BGP koppeling configuratie, dat een andere partij (lees: de hele wereld) dus niet meer doorkrijgt waar die IP adressen van jou te vinden zijn. En dit komt heel vaak voor! Want BGP wordt ingesteld op netwerkapparatuur: vaak door mensen en die maken typefouten.
(Het komt ook voor dat partijen op die manier een route kunnen kapen van een andere partij. Zo kan het dus gebeuren dat een partij uit Azië roept dat zij nu de eigenaar zijn van een verzameling IP adressen van een internetprovider uit Zuid-Amerika. En wanneer dit niet snel genoeg herstelt wordt kan dus verkeer dat naar Zuid-Amerika zou moeten, plotseling naar Azië gaan. Dit soort fouten gebeuren al dan niet bewust, maar daar zal niet verder op ingaan).
Het BGP protocol is over het algemeen vrij open: en dit soort fouten worden ook daarom meestal snel opgemerkt en herstelt. Op bepaalde sites is ook goed te volgen welke IP verzamelingen bij welke partijen horen en welke routes daar naar toe zijn. DIt is geen geheime informatie, juist niet. Je wil als partij immers iedereen laten weten hoe jouw IP adressen te bereiken zijn.
Daarnaast zijn er manieren om de impact van dit soort fouten te beperken (maar dat gaat voor nu te ver om uit te leggen).
Het is wel duidelijk: Facebook heeft een probleem met hun BGP configuratie. Hierdoor is hun netwerk grotendeels verdwenen van het internet en daarmee is dus effectief Facebook voor de meeste gebruikers van het internet af. Hoe dit precies kon gebeuren is nog niet bekend, maar een menselijke fout is niet uit te sluiten. Hoewel je mag verwachten dat Facebook het beheren van BGP koppelingen geautomatiseerd heeft, kan er nog steeds een menselijke fout zijn die dit veroorzaakt. Dat zullen we later horen (of niet). Echter er is meer aan de hand.
DNS
Zoals wellicht bekend is DNS (Domain Name System) het telefoonboek van internet. Het zet domeinnamen om in IP adressen, en we hebben net geleerd dat partijen via BGP dus de weg naar elkaars IP adressen.
Daarnaast is vastgesteld dat Facebook zichzelf afgesloten heeft van internet door een fout in hun BGP koppeling informatie. De rest van de wereld weet dus even niet hoe ze bij de IP adressen van Facebook moeten komen. Maar wat wil nu het geval, de DNS servers van Facebook staan zelf ook in het netwerk van Facebook — en precies in het gedeelte met problemen. Dit betekent dat de DNS servers van Facebook dus niet te bereiken zijn, voor niemand.
Facebook heeft 4 verschillende DNS platformen, lees ik op Twitter. Maar allemaal dus in hun eigen netwerk.
Dus naast dat grote delen van het Facebook netwerk door een BGP storing niet beschikbaar zijn, is het telefoonboek van Facebook hierdoor ook niet beschikbaar. Ook niet voor Facebook zelf!
Sneeuwbal
Allemaal ellendig natuurlijk voor Facebook. En miljarden mensen kunnen niet meer bij hun diensten. Maar zij zelf dus ook niet. Stel je even voor: zij hebben geen toegang tot hun e-mail, Messenger of WhatsApp! Dus hoe ga je met je teams communiceren om deze storing op te lossen? Sterker nog: de toegangssystemen van hun gebouwen schijnen ook niet meer te werken.
Maar niet alleen is het ellendig voor miljarden gebruikers van hun diensten en Facebook zelf, het heeft ook effect op de rest van de wereld.
Want dat heeft te maken met hoe DNS werkt.
Facebook heeft hun domeinnamen geadministreerd in hun eigen primaire DNS servers (telefoonboeken). Die primaire DNS servers heten ook wel authoritive nameservers. Dus je zou zeggen: iemand die het domein Facebook.com opvraagt komt bij die server uit, en die server vertaalt de opgevraagde domeinnaam naar een IP adres. Ja en nee.
Want jij komt niet bij de server van Facebook zelf uit, jij komt meestal uit bij de DNS server van je internetprovider. Die hebben namelijk ook DNS servers. Die servers heten ook wel zogenaamde caching, recursive, resolver of secondary DNS servers. Zo’n server vraagt, wanneer hij de gegevens niet heeft, de informatie aan de authoritive server en bewaart deze informatie voor een x periode. En daarna ververst die server deze door de informatie opnieuw op te halen bij de authoritive server. Zo hoeft deze server het niet elke keer aan de Facebook servers te vragen. Dit is vaak sneller en Facebook verdeelt eigenlijk op deze manier de load van miljarden en miljarden DNS verzoekjes over vele honderduizenden caching DNS servers van internetproviders wereldwijd. En dit kan ook, want het is ook niet zo dat Facebook elke dag zijn IP adres verandert immers.
Echter: de Facebook authoritive servers zijn nu niet bereikbaar maar sommige recursive servers waren wel aan een verversing toe (dit verschilt per server). Echter die verversing is nergens te vinden want die authoritive server is immers niet te bereiken. Maar wat denken die DNS servers en al die apps? Ik probeer het nog eens!
En dit is een probleem! Wereldwijd staan er dus honderden miljoenen apps, miljarden DNS verzoeken af te vuren op honderdduizenden caching DNS servers. Die hebben het daardoor zwaarder dan normaal. In de meeste gevallen gaat dit wel goed, in sommige gevallen echter vallen die servers ook om. En volgens mij is inmiddels wel duidelijk wat het gevolg is wanneer een DNS server omvalt!
Tot zover wat er aan de hand lijkt. Ik ben zelf heel nieuwsgierig naar de echte uitleg en hoe Facebook dit denkt te voorkomen in de toekomst!