16 min read

Bericht über die Ausfälle vom Freitag und Samstag (6. und 7.9.)

Table of Contents

Bericht über die Ausfälle vom Freitag und Samstag (6. und 7.9.)

Am Freitag Anfang September war das Wohnheimnetz für mehrere Stunden offline. Die Verbindung zum Internet wieder aufzubauen dauerte mehrere Stunden und hat uns erst einmal auf den Holzweg geführt. Deshalb folgten mehrere kürzere Ausfälle. Was war nun der Grund des Ausfalls?

Ehrenamtliche Arbeit

Der Selfnet e.V. wird zu 100% von ehrenamtlich aktiven Mitgliedern (Studierenden) getragen. Freitag morgens Anfang September ist vermutlich die schlechteste Zeit für einen Ausfall. Studierende sind aber nicht immer auf dem Campus bzw. wenn sie es sind lernen sie für Prüfungen. Das trifft natürlich auch auf die Mitglieder von Selfnet zu. Anfang September ist auch die Zeit zu der viele ins Wohnheim einziehen und dann Mitglied von Selfnet werden wollen und so lange Schlangen in den Sprechstunden entstehen.

Das beduetet: Ein Ausfall während dieser Zeit tut ziemlich weh, da sowieso viel Arbeit anfällt und wenige von uns Zeit haben oder überhaupt vor Ort sind. Wenn du also lust hast etwas neues zu lernen, zu experimentieren und coole Dinge mit uns zu bauen: Schreib uns einfach eine kurze E-Mail.

Zeitachse

Also was ist nun - zeitlich geordnet - passiert?

Donnerstag Abend gegen 21 Uhr

Seit ca. 2012 verwenden wir Juniper EX4500 Layer3-Switche um alle Pakete im Kernnetz (core) zu routen. Mittlerweile setzen wir auch schon seit 1-2 Jahren das Nachfolgemodell EX4600 ein. Technisch gesehen handelt es sich um eine ganz neue Technik und bis jetzt war der Eindruck: Weniger Fehler/Bugs, bessere CPU, etc. und deswegen haben wir entschieden 2 der bisherigen EX4500 zu ersetzen. Am Donnerstag wurden nacheinander “vaih-core-1” und “vaih-core-3” ersetzt. Die bisherigen EX4600 die wir einsetzen haben immer gut funktioniert und dementsprechend haben wir keinerlei Probleme erwartet.

Selfnet Core Topologie

Selfnet Core Topologie

Wie du vielleicht über die Topologie vermuten kannst ist alles Redundant. Sogar alle Access-Switche (also die Switche, an die die Zimmer direkt angeschlossen sind) sind üblicherweise an mehr als einem Core Switche angeschlossen und deshalb können wir diese Geräte auch austauschen ohne, dass ein Ausfall entsteht.

Direkt nach dem Austausch gab es keinerle Probleme. Alles schien gut zu funktionieren.

the three core switches

vaih-core-1/2/3 (von oben nach unten: EX4600, EX4500, EX4600)

Freitag 2:18 Uhr morgens

Selfnet ist plötzlich offline. Ein paar Selfnetter sind noch wach und versuchen herauszufinden was schief gelaufen ist. Wie du auf der Topologie sehen kannst: Das sollte nicht passieren. Der Ausfall eines einzelnen Gerätes sollte nie das gesamte Netz betreffen.

Freitag 3:26 Uhr morgens

Es sieht so aus als gäbe es ein Problem mit einer der NAT/Firewall Server. Traceroutes bleiben stecken und es scheint auch sonst kein Datenverkehr weitergeleitet werden. nat-1 wird neu gestartet, bleibt aber beim hochfahren aufgrund von Hardwarefehlern stecken. Als nat-1 schlussendlich hochgefahren ist verweigert “conntrackd” (der Dienst der für das Funktionieren von Netzwerkadressübersetzung / NAT notwendig ist) den Start.

Nach mehr Fehlersuche der noch “wachen” Mitglieder geben diese der Müdigkeit nach und gehen schlafen.

Freitag um 6 Uhr morgens

Mehr Mitglieder wachen auf. Da Selfnet immer noch offline ist, sind natürlich auch E-Mail, Jabber und der IRC-Chat außer funktion. Wir öffnen einen Notfall IRC Kanal in einem anderen IRC Netzwerk und erstellen ein CryptPad um alle Informationen zu sammeln und alles zu koordinieren.

Freitag um 8:57 Uhr morgens

Halbwegs ausgeschlafene Mitglieder sind vor Ort (Serverraum). Das Routing scheint in Ordnung zu sein aber Traceroutes enden bei nat-2. Das Weiterleiten von Paketen zwischen Core und Edge Routern (siehe Topologie) scheint kaputt zu sein aber das Routing nimmt trotzdem noch diesen Pfad, da die OSPF Pakete (Routing Protokoll) immer noch durch kommen. Die Firewall nat-2 lässt es nicht zu, dass sich jemand einloggt. Wir vermuten wegen hoher CPU-/System-Last und Problemen bei der Weiterleitung von Paketen. Als letzten Ausweg wird nun auch nat-2 neu gestartet. Unerklärlicherweise funktioniert jetzt plötzlich wieder alles.

Uns fallen in den Logs der Cores “DDoS violations” auf. Dies könnte an einem Sturm von OSPF Paketen (aufgrund von “link flaps”) oder duplizierten Paketen durch die nicht funktionierenden Weiterleitung der Pakete liegen.

Wir sind noch nicht sicher warum die Weiterleitung von allen anderen Datenpaketen durch die NATs/Firewalls nicht mehr funktioniert hat obwohl OSPF Pakete weitergeleitet wurden. Da jetzt auch der Mailserver wieder online ist bekommen wir über 100 E-Mails von anderen Mitgliedern mit Fragen und Beschwerden zum Ausfall. Wir fangen an die E-Mails zu beantworten und teilen mit, dass es einen Ausfall gab, das es jetzt wieder funktioniert und wir immer noch nach der Ursache suchen.

grafana Visualisierung von neuen oder offenen Tickets über Zeit

Visualisierung von neuen und offenen Tickets (E-Mails an support@selfnet.de) die von ehrenamtlich aktiven Mitgliedern rapide beantwortet werden.

Freitag zwischen 9 und 10 Uhr morgens

Wir sind immer noch auf Fehlersuche. Die Logs zeigen “wiederherstellbare” Probleme mit dem Arbeitsspeicher (vermutlich also kein Hardware Problem). Das würde erklären warum ein Neustart das Problem gelöst hat.

nat-1 wird zur Sicherheit mit “memtest” geprüft ob der Arbeitsspeicher (RAM) physisch in Ordnung ist. Es werden keine Fehler gefunden.

Freitag um 14:20 Uhr mittags

Ein weiterer Ausfall. Dieses Mal ist nur IPv4 betroffen. nat-1 zeigt eine hohe CPU Last die hauptsächlich aus SoftIRQs besteht. Das haben wir schon einmal in einem vorherigen Blogeintrag analysiert und die Anzahl der SoftIRQs ist üblicherweise ein guter Indikator von hohem Verkehrsaufkommen (Pakete pro Sekunde, nicht Volumen) die durch die Firewall fließen. Es handelt sich also entweder um einen heftigen DDoS Angriff, ein Problem mit nat-1 oder Pakete springen zwischen den Routern hin und her.

Aus irgendeinem Grund löst ein Neustart von nat-1 das Problem.

Freitag 22 Uhr abends

Das selbe Problem tritt mit IPv6 über nat-2 auf. Wieder SoftIRQs bei 80% was - wenn man Hyperthreading bedenkt - etwa 100% Hardwareauslastung entspricht.

Screenshot of the Grafana SoftIRQ CPU usage monitoring

Screenshot aus unserem Grafana der SoftIRQ CPU Auslastung

Wir wissen schon, dass aus irgendeinem Grund ein Neustart das Problem löst. Also starten wir nat-2neu und die Daten unserer Mitglieder fließen wieder. Allerdings macht das die Fehleranalyse nicht unbedingt einfacher.

Der Datenverkehr wird jetzt für IPv4 und IPv6 gleichermaßen über nat-2 geleitet.

Samstag 0:30 morgens

SoftIRQs auf nat-1 sowie nat-2 steigen wieder an. Nun haben beide Firewalls wieder Probleme und das Netzwerk wird instabil.

Samstag 6 Uhr morgens

Wieder kollabieren die Firewalls und das Wohnheimnetzwerk ist offline.

Unglücklicherweise ist niemand vor Ort um die Firewalls neu zu starten und da alles offline ist können wir sie nicht aus der Ferne neustarten.

Samstag 9:20 Uhr morgens

Ein weiterer Neustart löst wieder das Problem.

Foto von dashboard.selfnet.de am Samstagmorgen.

Uplink Graph der zeigt wie sich nach wiederholter “Behebung” des Problems die Menge des übertragenen Datenverkehrs gegen 9:20 Uhr erhohlt und dann wieder um 12 Uhr stark einbricht.

Samstag 12 Uhr

Das Problem ist zurück. Wir bemerken das beide der neuen Core Router eine hohe CPU auslastung aufweisen. Der “Packet Forwarding Engine Manager”, fpxc nutzt alle zur Verfügung stehende Ressourcen aus. Die anderen EX4600 die wir bis jetzt in unserem Netz eingesetzt haben verwenden eine andere - ältere - Firmware (Software) Version als die beiden neuen. Wir vermuten jetzt, dass es sich um einen Fehler von JunOS (Betriebssystem für Juniper Router/Switche) handelt der in einer neueren Version vorhanden ist. Leider passiert so etwas öfters bei Firmware von Netzwerkhardwareherstellern. Wir entscheiden uns für ein “Downgrade” zu der - bekanntlich - funktionierenden Version von JunOS die auf den bisherigen EX4600 schon gut funktioniert. Während des Downgrades sehen wir Crashes und Kernel Dumps. Die Installation schlägt dann mit Dateisystemfehlern fehl. Nach dem kompletten Neuformatieren der Festplatten und einer sauberen Installation funktioniert jetzt wieder alles.

Nachdem die Kisten auf die ältere Version downgegraded wurden ist die CPU Auslastung wieder normal und fxpc nutzt nur noch eine einstellige Prozentzahl der CPU. Auch die Probleme mit OSPF sind verschwunden, die Firewalls funktionieren wieder normal und seit dem haben wir auch keine weiteren Probleme beobachtet.

Also was ist passiert?

Im Nachhinein kann können wir leider nicht mit Sicherheit sagen, wo das Problem ganz genau lag. Wir vermuten aber, dass die Juniper Kisten einen Bug hatten, der die Forwarding- und OSPF-Probleme ausgelöst hat. Man kann im SoftIRQ Monitoring sehen, dass während den Ausfällen immer ein CPU Core überlastet ist. Normalerweise werden die Pakete in der Firewall auf alle Cores verteilt. Die Zuweisung, welcher Core für ein Paket zuständig ist, passiert pro Flow. Das bedeutet, die Source- und Destination-Adresse, sowie die Portnummern und die Protokollnummer werden gehasht. Die Hashsumme wird dann verwendet, um den Core auszuwählen, der das Paket verarbeitet. Wenn alle ankommenden Pakete den gleichen Flow Hash haben, werden sie vom gleichen Core verarbeitet.

Wir gehen deshalb davon aus, dass es ein Forwardingproblem gab, das dazu geführt hat, dass Pakete zwischen Core-Switch und Firewall hin- und hergeworfen wurden, bis der Link gefüllt und der CPU Core ausgelastet war. Wir haben uns leider sehr darauf konzentriert, das Problem zu lösen und haben dabei keine Packet Dumps gesammelt, die wir jetzt analysieren könnten, um den Bug genauer festzupinnen.

Was nun?

Kurzfristig scheint das Problem durch das Downgrade der Firmware behoben zu sein. Im Moment läuft noch ein offener “service request” bei Juniper in dem Juniper versucht das Problem zu beheben, denn obwohl man es nicht wirklich bei der Nutzung des Wohnheimnetzwerks merkt haben beide der EX4600 Core Switches immer noch regelmäßig Spitzen bei der CPU auslastung die nicht wirklich gesund aussehen.

Allerdings (wie wir schon im NAT/Firewall Blogartikel erwähnt haben) sind unsere Firewall Server schon etwas älter. Es gibt schon Pläne diese mit neuer Hardware zu ersetzen und zur Zeit haben wir Testgeräte mit sehr modernen AMD Epyc CPUs und 4x 10 Gigabit Netzwerkkarten die vermutlich bald die alten Firewalls ersetzen soll da.

Server with AMD Epyc CPU

AMD Epyc Testhardware

Außerdem gibt es Pläne die Topologie zu ändern, so dass der Datenverkehr der Mitglieder und der Firewalls durch eine jeweils separate DMZ fließt.

vaih-core-1/2/3 (von oben nach unten: EX4600, EX4500, EX4600)

Freitag 2:18 Uhr morgens

Selfnet ist plötzlich offline. Ein paar Selfnetter sind noch wach und versuchen herauszufinden was schief gelaufen ist. Wie du auf der Topologie sehen kannst: Das sollte nicht passieren. Der Ausfall eines einzelnen Gerätes sollte nie das gesamte Netz betreffen.

Freitag 3:26 Uhr morgens

Es sieht so aus als gäbe es ein Problem mit einer der NAT/Firewall Server. Traceroutes bleiben stecken und es scheint auch sonst kein Datenverkehr weitergeleitet werden. nat-1 wird neu gestartet, bleibt aber beim hochfahren aufgrund von Hardwarefehlern stecken. Als nat-1 schlussendlich hochgefahren ist verweigert “conntrackd” (der Dienst der für das Funktionieren von Netzwerkadressübersetzung / NAT notwendig ist) den Start.

Nach mehr Fehlersuche der noch “wachen” Mitglieder geben diese der Müdigkeit nach und gehen schlafen.

Freitag um 6 Uhr morgens

Mehr Mitglieder wachen auf. Da Selfnet immer noch offline ist, sind natürlich auch E-Mail, Jabber und der IRC-Chat außer funktion. Wir öffnen einen Notfall IRC Kanal in einem anderen IRC Netzwerk und erstellen ein CryptPad um alle Informationen zu sammeln und alles zu koordinieren.

Freitag um 8:57 Uhr morgens

Halbwegs ausgeschlafene Mitglieder sind vor Ort (Serverraum). Das Routing scheint in Ordnung zu sein aber Traceroutes enden bei nat-2. Das Weiterleiten von Paketen zwischen Core und Edge Routern (siehe Topologie) scheint kaputt zu sein aber das Routing nimmt trotzdem noch diesen Pfad, da die OSPF Pakete (Routing Protokoll) immer noch durch kommen. Die Firewall nat-2 lässt es nicht zu, dass sich jemand einloggt. Wir vermuten wegen hoher CPU-/System-Last und Problemen bei der Weiterleitung von Paketen. Als letzten Ausweg wird nun auch nat-2 neu gestartet. Unerklärlicherweise funktioniert jetzt plötzlich wieder alles.

Uns fallen in den Logs der Cores “DDoS violations” auf. Dies könnte an einem Sturm von OSPF Paketen (aufgrund von “link flaps”) oder duplizierten Paketen durch die nicht funktionierenden Weiterleitung der Pakete liegen.

Wir sind noch nicht sicher warum die Weiterleitung von allen anderen Datenpaketen durch die NATs/Firewalls nicht mehr funktioniert hat obwohl OSPF Pakete weitergeleitet wurden. Da jetzt auch der Mailserver wieder online ist bekommen wir über 100 E-Mails von anderen Mitgliedern mit Fragen und Beschwerden zum Ausfall. Wir fangen an die E-Mails zu beantworten und teilen mit, dass es einen Ausfall gab, das es jetzt wieder funktioniert und wir immer noch nach der Ursache suchen.

grafana Visualisierung von neuen oder offenen Tickets über Zeit

Visualisierung von neuen und offenen Tickets (E-Mails an support@selfnet.de) die von ehrenamtlich aktiven Mitgliedern rapide beantwortet werden.

Freitag zwischen 9 und 10 Uhr morgens

Wir sind immer noch auf Fehlersuche. Die Logs zeigen “wiederherstellbare” Probleme mit dem Arbeitsspeicher (vermutlich also kein Hardware Problem). Das würde erklären warum ein Neustart das Problem gelöst hat.

nat-1 wird zur Sicherheit mit “memtest” geprüft ob der Arbeitsspeicher (RAM) physisch in Ordnung ist. Es werden keine Fehler gefunden.

Freitag um 14:20 Uhr mittags

Ein weiterer Ausfall. Dieses Mal ist nur IPv4 betroffen. nat-1 zeigt eine hohe CPU Last die hauptsächlich aus SoftIRQs besteht. Das haben wir schon einmal in einem vorherigen Blogeintrag analysiert und die Anzahl der SoftIRQs ist üblicherweise ein guter Indikator von hohem Verkehrsaufkommen (Pakete pro Sekunde, nicht Volumen) die durch die Firewall fließen. Es handelt sich also entweder um einen heftigen DDoS Angriff, ein Problem mit nat-1 oder Pakete springen zwischen den Routern hin und her.

Aus irgendeinem Grund löst ein Neustart von nat-1 das Problem.

Freitag 22 Uhr abends

Das selbe Problem tritt mit IPv6 über nat-2 auf. Wieder SoftIRQs bei 80% was - wenn man Hyperthreading bedenkt - etwa 100% Hardwareauslastung entspricht.

Screenshot of the Grafana SoftIRQ CPU usage monitoring

Screenshot aus unserem Grafana der SoftIRQ CPU Auslastung

Wir wissen schon, dass aus irgendeinem Grund ein Neustart das Problem löst. Also starten wir nat-2neu und die Daten unserer Mitglieder fließen wieder. Allerdings macht das die Fehleranalyse nicht unbedingt einfacher.

Der Datenverkehr wird jetzt für IPv4 und IPv6 gleichermaßen über nat-2 geleitet.

Samstag 0:30 morgens

SoftIRQs auf nat-1 sowie nat-2 steigen wieder an. Nun haben beide Firewalls wieder Probleme und das Netzwerk wird instabil.

Samstag 6 Uhr morgens

Wieder kollabieren die Firewalls und das Wohnheimnetzwerk ist offline.

Unglücklicherweise ist niemand vor Ort um die Firewalls neu zu starten und da alles offline ist können wir sie nicht aus der Ferne neustarten.

Samstag 9:20 Uhr morgens

Ein weiterer Neustart löst wieder das Problem.

Foto von dashboard.selfnet.de am Samstagmorgen.

Uplink Graph der zeigt wie sich nach wiederholter “Behebung” des Problems die Menge des übertragenen Datenverkehrs gegen 9:20 Uhr erhohlt und dann wieder um 12 Uhr stark einbricht.

Samstag 12 Uhr

Das Problem ist zurück. Wir bemerken das beide der neuen Core Router eine hohe CPU auslastung aufweisen. Der “Packet Forwarding Engine Manager”, fpxc nutzt alle zur Verfügung stehende Ressourcen aus. Die anderen EX4600 die wir bis jetzt in unserem Netz eingesetzt haben verwenden eine andere - ältere - Firmware (Software) Version als die beiden neuen. Wir vermuten jetzt, dass es sich um einen Fehler von JunOS (Betriebssystem für Juniper Router/Switche) handelt der in einer neueren Version vorhanden ist. Leider passiert so etwas öfters bei Firmware von Netzwerkhardwareherstellern. Wir entscheiden uns für ein “Downgrade” zu der - bekanntlich - funktionierenden Version von JunOS die auf den bisherigen EX4600 schon gut funktioniert. Während des Downgrades sehen wir Crashes und Kernel Dumps. Die Installation schlägt dann mit Dateisystemfehlern fehl. Nach dem kompletten Neuformatieren der Festplatten und einer sauberen Installation funktioniert jetzt wieder alles.

Nachdem die Kisten auf die ältere Version downgegraded wurden ist die CPU Auslastung wieder normal und fxpc nutzt nur noch eine einstellige Prozentzahl der CPU. Auch die Probleme mit OSPF sind verschwunden, die Firewalls funktionieren wieder normal und seit dem haben wir auch keine weiteren Probleme beobachtet.

Also was ist passiert?

Im Nachhinein kann können wir leider nicht mit Sicherheit sagen, wo das Problem ganz genau lag. Wir vermuten aber, dass die Juniper Kisten einen Bug hatten, der die Forwarding- und OSPF-Probleme ausgelöst hat. Man kann im SoftIRQ Monitoring sehen, dass während den Ausfällen immer ein CPU Core überlastet ist. Normalerweise werden die Pakete in der Firewall auf alle Cores verteilt. Die Zuweisung, welcher Core für ein Paket zuständig ist, passiert pro Flow. Das bedeutet, die Source- und Destination-Adresse, sowie die Portnummern und die Protokollnummer werden gehasht. Die Hashsumme wird dann verwendet, um den Core auszuwählen, der das Paket verarbeitet. Wenn alle ankommenden Pakete den gleichen Flow Hash haben, werden sie vom gleichen Core verarbeitet.

Wir gehen deshalb davon aus, dass es ein Forwardingproblem gab, das dazu geführt hat, dass Pakete zwischen Core-Switch und Firewall hin- und hergeworfen wurden, bis der Link gefüllt und der CPU Core ausgelastet war. Wir haben uns leider sehr darauf konzentriert, das Problem zu lösen und haben dabei keine Packet Dumps gesammelt, die wir jetzt analysieren könnten, um den Bug genauer festzupinnen.

Was nun?

Kurzfristig scheint das Problem durch das Downgrade der Firmware behoben zu sein. Im Moment läuft noch ein offener “service request” bei Juniper in dem Juniper versucht das Problem zu beheben, denn obwohl man es nicht wirklich bei der Nutzung des Wohnheimnetzwerks merkt haben beide der EX4600 Core Switches immer noch regelmäßig Spitzen bei der CPU auslastung die nicht wirklich gesund aussehen.

Allerdings (wie wir schon im NAT/Firewall Blogartikel erwähnt haben) sind unsere Firewall Server schon etwas älter. Es gibt schon Pläne diese mit neuer Hardware zu ersetzen und zur Zeit haben wir Testgeräte mit sehr modernen AMD Epyc CPUs und 4x 10 Gigabit Netzwerkkarten die vermutlich bald die alten Firewalls ersetzen soll da.

Server with AMD Epyc CPU

AMD Epyc Testhardware

Außerdem gibt es Pläne die Topologie zu ändern, so dass der Datenverkehr der Mitglieder und der Firewalls durch eine jeweils separate DMZ fließt.