Skip to content

Instantly share code, notes, and snippets.

@lukas2511
Last active October 13, 2021 14:13
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukas2511/e2804474ca7d8a99108ad4ab47d3c7ee to your computer and use it in GitHub Desktop.
Save lukas2511/e2804474ca7d8a99108ad4ab47d3c7ee to your computer and use it in GitHub Desktop.

Einleitung

Ich beschreibe hier kurz in eigenen Worten wieso bei dem Facebook-Ausfall am Abend des 04.10.2021 mehr betroffen war als nur die Facebook-eigenen Dienste. Ich arbeite nicht für Facebook, ich habe hier nur Informationen gesammelt und versuche diese in einfachen Worten weiterzugeben.

(Extrem)Kurzeinführung BGP

Im Internet gibt es Routen, diese geben an wie bestimmte Ziele erreicht werden können. Es gibt hierfür kein zentrales "Kartenmaterial", stattdessen sagt einfach nur jeder seinen Nachbarn, welche Ziele man bereits kennt und wo man diese gelernt hat bzw. dass es evtl die eigenen Dienste sind. Hierbei wird häufig noch gefiltert welche Ziele man an welche Nachbarn weiterreicht, bzw welche Ziele man von welchem Nachbar akzeptiert. Hierfür gibt es diverse Protokolle, im großen Internet wird hierfür jedoch meistens BGP eingesetzt, welches sich über die vielen Jahre hinweg bewährt hat.

(Extrem)Kurzeinführung Nameserver und Resolver

Die Router im Internet kennen kein facebook.com, sondern nur die IPv6 und IPv4 Adressen dahinter. Ein Nameserver löst effektiv z.B. die Domain "facebook.com" in diese Adressen auf, so dass die Kommunikation entsprechend stattfinden kann.

Ein Resolver (oder auch "Full-Service Resolver") stellt selbst keine eigens bestimmten Domain-Auflösungen bereit, sondern "aggregiert" quasi die anderen Nameserver für die Endnutzer, so dass eine einzelne Anlaufstelle (im Providernetz, bei Google, Cloudflare, Freifunk München, usw.) alle Anfragen bearbeiten kann.

Start

Gegen etwa 17:40 Uhr fingen die BGP-Sitzungen von Facebook an zu flappen. Etliche Routen gehen verloren.

Insbesondere die Netze der Nameserver hinter facebook.com, instagram, whatsapp, und einigen weiteren Facebook-Diensten werden nicht mehr announced. Die Nameserver und die darüber aufgelösten Dienste sind dementsprechend nicht mehr erreichbar.

(https://stat.ripe.net/widget/bgplay#w.resource=129.134.30.12 https://twitter.com/ryan505/status/1445072241256013828)

Direkte Auswirkung

Neben der offensichtlichen Nicht-Verfügbarkeit von facebook.com und den Instagram/Whatsapp Apps und der damit verbundenen unterbrochenen Kommunikationskanäle waren auch einige weitere Dienste (semi-)direkt betroffen:

Webseiten, welche auf die "Login with Facebook"-Funktionalität setzen hatten innerhalb dieses Zeitraums keinen funktionierenden Login.

Webseiten mit fehlerhaft eingebundenen Like-/Share-Buttons hingen beim Laden einige Sekunden bis der jeweilige Browser aufgegeben hat diese Ressourcen zu laden. In ganz seltenen Fällen könnten Javascript-Fehler auch die Funktionalität der Seiten beeinschränkt haben.

Webseiten mit eingebundenen Medieninhalten von Facebook/Instagram konnten diese entsprechend nicht mehr anzeigen.

Verbindungsversuche -> DNS Anfragen

Weltweit sitzen die Nutzer dieser Platformen an ihren Geräten und versuchen die Apps und Webseiten zu öffnen, ohne Erfolg. Zusätzlich versuchen API-Clients für z.B. Push-Notifications sich automatisch neu zu verbinden.

Für alle diese Versuche müssen die entsprechenden Domains aufgelöst werden. Hierfür fragen die Systeme der Endnutzer z.B. den DNS-Resolver ihres Providers oder aber auch die Resolver von Google und/oder Cloudflare an.

Diese versuchen wiederum Kontakt mit den Facebook Nameservern herzustellen, was nach ein paar Sekunden scheitert. Es wird ein SERVFAIL geliefert. Je nach Client und Konfiguriation wird sofort ein neuer Verbindungsversuch gestartet.

(https://twitter.com/jgrahamc/status/1445066136547217413)

Kein Caching bei SERVFAIL -> Resolver Ausfall

I.d.R. ist es keine good-practice SERVFAILs zu cachen, weder lokal noch auf dem Resolver, da ein evtl temporärer Fehler auf Seite eines Dienstebetreibers dazu führen könnte, dass diese Dienste über lange Zeit hinweg nicht erreichbar sind.

Es werden also immer und immer wieder die Domains von Facebook angefragt. Dadurch entsteht eine hohe Last, welche bei einigen Resolvern zu (temporären) Ausfällen führte. So gab es z.B. bei Google DNS für einige Minuten lang etliche Fehler in der Domainauflösung. (https://twitter.com/awlnx/status/1445073290708533258)

Einige Internet-Provider waren kurz nach dem Facebook-Ausfall garnicht mehr erreichbar. Die Gründe hierfür sind bisher nicht bekannt, es lässt sich jedoch vermuten dass, vor allem bei kleineren Mobilfunkprovidern, die Menge der Pakete mit DNS-Requests zu einem Netzausfall führte.

Beispielhafter Anstieg des DNS-Traffics anhand der Resolver von ffmuc

statsffmuc

(https://stats.ffmuc.net/d/tlvoghcZk/doh-dot?orgId=1&from=1633212000000&to=1633471199000)

Folgen der Resolver-Ausfälle

Durch die ausgefallenen bzw stark eingeschränkten Resolver konnten einige Endnutzer garkeine Dienste im Internet mehr erreichen, bzw die Nutzung war stark eingeschränkt.

Einige Dienste die auf z.B. Google DNS vertraut haben konnten nicht mehr miteinander kommunizieren, so sind weltweit vermutlich etliche Monitoring-Systeme Panisch geworden und auch in meinen eigenen Netzen gab es einige fehlerhafte Kommunikationsversuche.

Ende

Gegen etwa 23:00 Uhr waren die ersten Routen zu den Nameservern wieder sichtbar, flappten jedoch noch stark. Etwa 20 Minuten später waren die Routen wieder einigermaßen stabil und die Nameserver reagierten wieder auf Anfragen.

Alles in allem hat der Ausfall somit etwa 5.5 Stunden gedauert

Weitere Probleme während des Ausfalls

Facebooks interne Dienste waren nicht verfügbar, so konnte bei Facebook innerhalb der angegebenen Zeitspanne nicht sinnvoll gearbeitet werden. (https://twitter.com/rmac18/status/1445069187664293895)

Gerüchten zufolge sind auch die Schliesssysteme von dem Ausfall betroffen gewesen, so konnten Büros und Meetingräume in den Facebook-Gebäuden nicht mehr betreten werden. (https://twitter.com/sheeraf/status/1445099150316503057)

Die Reparatur schien vor allem deshalb so lang gedauert zu haben weil diese sich nicht Remote durchführen lies und die Kompetenzen und/oder die Zugriffsrechte der Personen vor Ort nicht für die Reparatur ausreichend waren. (https://twitter.com/briankrebs/status/1445147230244061184)

Ursache

Mitlerweile hat Facebook ein bisschen mehr zu dem Problem bekannt gegeben:

Bei der simplen Routine die Kapazitäten ihres Backbone-Netzes abzufragen ist es unabsichtlich zu einem Ausfall eben dieses Netzes gekommen. Daraufhin schlugen die Health-Checks der Nameserver fehl, welche wiederum so konfiguriert waren, dass diese ihre BGP announcements zurückziehen solange das Problem bestehen bleibt. Der komplexe und Manipulations-resistente Aufbau ihres Netzes führte dazu, dass das grundlegende Problem nicht einfach und schnell behoben werden konnte.

(https://engineering.fb.com/2021/10/05/networking-traffic/outage-details/)

Memes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment