Bericht zum Ausfall von Moodle am 28.10.

Daniel Baumann daniel.baumann at bfh.ch
Sun Nov 6 15:22:24 CET 2022


Hallo zusammen

Wir wurden gebeten, einen Bericht zum Ausfall von Moodle am
28.10. zu schreiben.

Eigentlich ist die technische Ursache in zwei Worten erklaert
("ISC Transitional"), da das aber so kaum jemand nachvollziehen
kann, brauchts einiges an Erklaerung.. und weil wirs eh machen
muessen, schicken wirs auf diese Liste, dann koennen die dies
interessiert auch mitlesen.


Management Summary
==================

  * aufgrund eines historisch falsch konfigurierten DDNS Update
    Verfikationsverhalten in der Infoblox war es moeglich,
    DNS Records zu ueberschreiben.

  * ein Student hat damit den Record zu moodle.bfh.ch geaendert
    (mit Eintrag auf die IP seines Notebook), so dass Moodle am
    28.10. von 14:24 bis 14:57 nicht erreichbar war.

  * nach der Korrektur des Records und Analyse des Vorfalls, haben
    wir das falsche Update-Verifikationsverhalten in der Infoblox
    entdeckt und am 28.10. um 17 Uhr korrigiert.

  * die neuen DHCP Server von Mitte Oktober, welche seit 5.11. die
    Infoblox abgeloest haben, waren davon nie betroffen/involviert.


Hintergrund
===========

1. technisches Vorwissen
========================

1.1 Was ist DDNS?
-----------------

Geraete welche eine IP Adresse im Netzwerk haben, haben vorzugsweise
auch einen passenden DNS Record, so dass man die Geraete ueber einen
Namen statt einer Nummer ansprechen kann, z.B.
https://www.bfh.ch statt https://94.230.211.117

Fuer Clients die traditionell keine statische Adresse haben waere
das erstmal nicht moeglich, da bei diesen die IP Adresse via DHCP
zugewiesen wird und bei jedem Verbinden mit dem Netzwerk aendern
koennte.

Damit dies trotzdem funktioniert, kann der DHCP Server den Namen des
Clients im DNS eintragen. Das nennt sich "dynamic DNS" oder DDNS
(RFC2136; nicht zu verwechseln mit DynDNS).


1.2 Wie funktioniert DDNS?
--------------------------

DDNS funktioniert in der Implementierung des gaengigen ISC DHCP
Servers (bei uns bis vor kurzem in der Form von Infoblox Appliances
eingesetzt) vereinfacht so:

  * Client macht eine DHCP Anfrage und schickt u.a. seinen Hostname
    sowie eine ein-eindeutige ID (DHCPID) die nur der Client kennt,
    an den DHCP Server.

  * DHCP Server traegt den Hostnamen ein und generiert aus der
    DHCPID einen Hash, den er als zum Record passenden TXT Record im
    DNS "speichert".

Will ein Client einen Eintrag aktualisieren, entweder weil er in der
Zwischenzeit eine neue IP zugewiesen bekommen hat, oder weil der
Record schon belegt ist und der Client ihn auf seine IP aendern
will, funktionierts vereinfacht so:

  * DHCP Server hasht die DHCPID des "neuen" Clients und vergleicht
    ihn mit dem TXT Record:

    - stimmen die TXT Records ueberein ist der "neue" und der "alte"
      Client der gleiche - d.h. die Aenderung ist "berechtigt", der
      DHCP Server aktualisiert den Eintrag im DNS.

    - stimmen die TXT Records nicht ueberein, ist der "neue" und der
      "alte" Client nicht der gleiche und die Aenderung ist "nicht
      berechtigt", der DHCP Server aktualisiert den Eintrag im DNS
      nicht.

Solche Record Updates passieren staendig, bei uns sowieso da je nach
Standort die IP Adressen aus anderen Subnetzen kommen und so die IP
Adresse zwingend aendert.


1.3 Warum eine DHCPID?
----------------------

Um sich gegenueber dem DHCP Server erkennbar zu machen, sendet der
Client wie erwaehnt eine DHCPID. Dass dies eine eigene ID ist und
nicht der MAC Adresse (direkt) enspricht, hat folgende Vorteile,
z.B.:

  * hat ein Client mehrere Interfaces von denen immer nur eines
    gleichzeitig benutzt wird, kann der Client so konfiguriert
    werden, auf allen Interfaces die gleiche DHCPID zu verwenden.

    Dadurch ist der Client aus Sicht des DHCP Servers immer der
    gleiche, auch wenn alle anderen Dinge aendern.

    Das ermoeglich das Ueberschreiben von alten Eintraegen,
    praktisches Beispiel:

    - Andreas Notebook hat ein LAN und WLAN Interface und ist so
      konfiguriert, das nicht pro Interface eine eigene DHCPID
      geschickt wird.

    - Andrea verbindet sich mit LAN, es wird andrea.bfh.ch im DNS
      eingetragen.

    - Andrea stoppt die LAN Verbindung und wechselt auf WLAN.

    - der DHCP Server erkennt an der gleichgebliebenen DHCPID dass
      Andrea neu per WLAN verbunden ist und erlaubt daher das Update
      fuer den Record andrea.bfh.ch, so dass dieser neu auf die IP
      Adresse des WLAN Interfaces zeigt.

Standardmaessig wird bei den gaengigen Betriebssystemen pro
Interface eine eigene DHCPID geschickt (was der richtige Default
ist). Ein entkoppeln der DHCPID von Interface/MAC schafft die
Moeglichkeit zur Konfiguration, je nach Umgebgung das gewuenschte
Verhalten im Netz umzusetzen.


1.4 Clients mit mehreren Netzwerk-Interfaces
--------------------------------------------

Interessanter wird es wenn mehrere Interfaces gleichzeitig benutzt
werden, dazu folgendes Beispiel:

  * Bruno hat ein Notebook mit LAN und WLAN.

  * Bruno verbindet sich per WLAN, es wird bruno.bfh.ch im DNS
    eingetragen.

  * Bruno verbindet sich zusaetzlich per LAN und meldet sich mit
    einer unterschiedlichen DHCPID beim DHCP Server, bruno.bfh.ch
    bleibt unveraendert und zeigt auf die Adresse des WLAN
    Interfaces.

Falls wir moechten, dass eine vorhandene LAN Verbindung einer WLAN
Verbindung vorgezogen wird, ist dies ein suboptimales Resultat, da
alle Verbindungen aufs Notebook bei Ansprache ueber bruno.bfh.ch
weiterhin auf das WLAN Interface gehen werden.

Eine (suboptimale, aber durchaus funktionierende Variante) waere
hier, nur eine DHCPID fuer alle Interfaces zu verwenden. So waere
wenigstens nicht immer der DNS Record auf dem WLAN Interface,
sondern vorallem beim Umstecken (und danach je nach Renewal Interval
der Lease) das LAN Interface zum Zug gekommen.


1.5 Einfluss von DHCP Leasetime, DNS TTL und DNS Caches
-------------------------------------------------------

Wie bei Infrastruktur so ueblich, spielen viele Faktoren zusammen
und eine Infrastruktur ist nur so gut, wie alle Dienste aufeinander
abgestimmt sind:

  * DHCP Leasetime:

    - da die DDNS Records mit Ablaufen resp. nicht-Erneuern der DHCP
      Leastime geloescht werden, ist grundsaetzlich eine kuerzere
      Leastime positiv.

    - im alten DHCP Setup war die Leasetime 1h, also vergleichsweise
      hoch.

    - im neuen DHCP Setup (fuer bfh.ch seit 5.11.) ist die Leastime
      10min, also vergleichsweise tief.

    - dies hat viele Vorteile (bessere Pool Usage, aktuellere Daten
      im DNS, etc.) und nur einen Nachteil: es vertraegt keine
      zuverlaessige oder instabile DHCP Server - die haben wir
      natuerlich im Griff, so dass dies bei uns keine Nachteil ist.

  * DNS TTL:

    - da durch eine tiefe Leasetime so aktuellere Informationen ins
      authoritative DNS kommen, hilft nur dann wenn auch die
      Time-to-live (TTL) auch ensprechend tief ist. Mit einer (zu)
      hohen TTL werden die (in der Zwischenzeit veralteten) DNS
      Records lange auf den Resolvern und/oder den Clients selbst
      gecached, so dass die Clients die aktualisierten DNS Records
      erst mit (viel) Verzoegerung mitbekommen.

    - im alten DNS Setup war die TTL 1h, also vergleichsweise hoch.

    - im neuen DNS Setup (fuer bfh.ch seit Q2/2022) ist die TTL
      10min, also vergleichsweise tief.

    - eine tiefe (aber nicht zu tiefe) TTL hat viele Vorteile
      (Aenderungen gehen schneller zu den Clients) und haben keine
      Nachteile. Eine zu tiefe TTL macht Netzwerkverbindungen
      gefuehlt langsamer, weil bei "jeder" Initialisierung zuerst
      noch eine DNS Abfrage gemacht werden muss, macht mehr Load
      auf den DNS Servern und ist katastrophal bei unzuverlaessigen
      oder instabilen DNS Servern.

  * DNS Caches:

    - bevor wir im Juni 2022 die interne und externe DNS View
      verschmelzen konnten und damit die Linux Nameserver fuer die
      gesamte bfh.ch Zone authoritativ wurden, mussten die internen
      DNS Resolver die interne bfh.ch Zone cachen (laenger als die
      TTL), weil die Infoblox Appliances zu langsam waren, alle Anfragen
      der Resolver beantworten zu koennen.

    - d.h. so war es moeglich, dass bfh.ch Records bis zu
      2x TTL = 2h noch auf nicht mehr existierende oder falsche Systeme
      verwiesen haben.

    - seit Abschalten der unterschiedlichen Views koennen wir
      einerseits auch fuer bfh.ch, wie fuer alle anderen eigenen
      Zonen, die Records auf den DNS Resolvern nicht mehr cachen, so
      dass alte Records nur noch bis zu 1x TTL = 1h auf nicht mehr
      existierende Systeme verweisen koennen.

    - gleichzeitig haben wir auch die TTL gesenkt weil Performance-
      technisch problemlos moeglich mit unseren Systemen, so dass es
      jetzt noch maximal 1x TTL = 10min sind, bis alle Systeme
      zwingend DNS Aenderungen mitbekommen haben muessen.


2. Probleme beim managen von BFH Standard-Clients
=================================================

2.1 Ausgangslage managed Clients
--------------------------------

An der BFH werden die Windows Clients zentral gemanaged via
Microsoft SSCM. Dieser verwendet wie es sich gehoert DNS Namen um
sich mit den Geraeten zu verbinden.

Weil User sich mit ihren Geraeten bewegen, Dockingstations benutzen,
etc. aendern die IP Adressen der Geraete oefters.

Aufgrund der (mindestens damaligen) Voreinstellung auf den Standard
Clients, dass beim Aufbau einer LAN Verbindung das WLAN Interface
heruntergefahren wird, waren DNS Records notorisch falsch weil noch
die IP Adresse des WLAN Interfaces im DNS eingetragen war. Ein
Update via LAN Interface wird wegen unterschiedlicher DHCPID
abgelehnt, so dass man warten muss bis die Lease abgelaufen ist und
der Record automatisch geloescht wird. Daraufhin kann er dann neu
eingetragen werden beim naechsten Lease Renewal auf dem LAN
Interface.

Zusammen mit der Kombinaton aus hoher DHCP Leasetime, hoher DNS TTL
und langem DNS Cachen dauert es lange bis die Aenderung schlussendlich
beim IT-Mitarbeitenden der auf das Client-System zugreifen will,
ankommt. Dadurch waren Clients teilweise nur sehr teilweise nur sehr
muehsam verwaltbar, dazu folgendes Beispiel:

  * Charly ruft ITS an und hat Problem mit xyz.

  * ITS will Update fuer xyz auf das Notebook von Charly pushen um das
    Problem zu loesen.

  * Charly denkt "super, geht sicher besser ueber LAN/mit Strom" und
    steckt Notebook an Dockingstation an:

    - IP wechselt, DNS Record bleibt gleich und zeigt ins Leere.

    - entweder warten jetzt alle mind. 1h bis auf den DNS Namen
      gepusht werden kann..

    - ..oder ITS laesst sich die IP Addresse vom User raussuchen
      und pusht manuell/umstaendlich auf die IP Adresse.

Zusammengefasst: Es bestand seit jeher das Problem, dass die Clients
teilweise/in immer wieder auftretenden Situationen nur sehr muehsam
verwaltbar waren.


2.2 "Problemloesung" fuer managed Clients
-----------------------------------------

Ein ursaechliches Loesen dieses Problems haette einen Umbau und
ein feines aufeinander Abstimmen der Gesamtinfrastruktur bedingt
(das wir in diesem Jahr umgesetzt haben), also grundsaetzlich ein
langes und aufaendiges Unterfangen.

Um trotzdem Linderung fuer das Problem zu bringen, wurde irgendwann
zwischen 2018 und 2019 versucht, dies offenbar durch Aendern des
DHCP Validierungsverfahrens trotzdem hinzutricksen:

  * im Normallfall muss, wie zuvor beschrieben, die DHCPID des
    Clients identisch sein, damit ein DNS Record via DDNS
    aktualisiert werden kann.

  * neben diesem Validierungsverfahren gibt es noch andere, die nur
    kurzfristig waehrend der Migration einer Umgebgung (z.B. wenn von
    einer Hersteller-DHCP-Appliance zu einer anderen, oder von/zu
    Microsoft AD als DHCP Server gewechselt wird).

  * Infoblox implementiert dazu u.a. den Modus "ISC Transitional":

    - dabei werden beim Update von Records via DDNS die TXT Records
      *nicht* beachtet, d.h. jeder Client kann jeden beliebigen
      Namen im DNS aendern.

      vergl.
https://docs.infoblox.com/space/NAG8/22251499/Configuring+DDNS+Update+Verification

  * die Idee, hier "ISC Transitional" zu verwenden war vermutlich,
    durch das (mehr oder weniger bewusste?) nicht-Pruefen der TXT
    Records Updates von Clients bei IP Wechseln "schneller" ins DNS
    zu bekommen, da so das Ablaufen der Lease nicht abgewartet
    werden musste im oben beschrieben Beispiel mit Charly.

  * da damals noch eine Trennung zwischen interner und externer DNS
    View bestand, haette damals "moodle.bfh.ch" extern nicht
    veraendert werden koennen, nur intern (d.h. Moodle waere im
    Internet erreichbar geblieben, nur nicht innerhalb des BFH
    Netzwerks).

    "Trotzdem" ist es keine gute Idee weil ja beliebige Records
    veraendert werden konnten, z.B. "bfh.ch" (das intern aufs
    Microsoft AD zeigt) zu aendern haette auch intern zu einigen
    Komplikationen gefuehrt.

Fairerweise muss man sagen, dass es keine sinnvollen alternativen
gibt als das Problem aufwaendig und richtig zu loesen:

  * grundsaetzlich koennte das Betriebssystem das "richtige" machen
    und kurzzeitig die WLAN Lease zurueckgeben, so wird im
    vorherigen Beispiel bruno.bfh.ch geloescht, und dann via LAN
    Lease neu eingetragen.

    Dies fuehrt aber zu einem kurzen Trennung aller Verbindungen des
    Notebooks und ist aus User Sicht natuerlich unerwuenscht - darum
    macht das ueblicherweise kein Betriebssystem.

    (ein Update-ohne-lease-release ginge auch, unterstuetzen aber nicht
     alle DHCP Server, weshalb es keine generische Loesung aus Client
     Sicht ist)

  * weitere "Hacks" (kann man leider nicht anderst sagen) sind
    Konfigurationen wie "LAN und WLAN haben die gleiche MAC aka
    Passthrough MAC" das manche "Enterprise Notebooks" koennen und
    ist hier genausowenig sinnvoll/erfolgreich.


3. Vorfall am 28.10.
====================

Ein Student hat um 14:24 via DHCP eine IP Adresse bezogen und den
Hostname "moodle.bfh.ch" fuer sein Geraet geschickt. Grundsaetzlich
voellig legitim.

Infoblox im Modus "ISC Transitional" hat den Record brav
eingetragen, so dass moodle.bfh.ch auf eine interne Adresse aus
147.87.0.0/16 gezeigt hat, statt auf den extern betriebenen Dienst
wo Moodle laeuft.

Nach manueller Korrektur des Records um 14:57 dauerte es dank tiefer
TTL (= 10min) maximal bis 15:07 bis moodle.bfh.ch wieder fuer alle
und ueberall funktioniert hat.

Der Student hat sich vorbildlich verhalten und sich selber umgehend
gemeldet (kurz nachdem wir gerade nachgeschaut hatten, wers war :).

Ihm ist in keinster Weise ein Vorwurf zu machen - er hat die relevanten
Dienste voellig korrekt verwendet - fuer Fehler in unserer veralteten
Infrastruktur kann er nichts und muss auch nicht davon ausgehen.

Dass in den letzen Jahren offenbar noch niemand anderes auf die Idee
gekommen ist, seinem Notebook/Handy/$wasauchimmer einen kreativen Namen
eines bereits existierenden Dienstes zu geben, ist, leider, reine
Glueckssache.

Gruesse,
Daniel

-- 
Berner Fachhochschule / Bern University of Applied Sciences
Services / IT-Services
Daniel Baumann
Teamleiter Linux & Infrastructure Services
___________________________________________________________
Dammweg 3, CH-3013 Bern
Telefon direkt +41 31 848 48 22
Telefon Servicedesk +41 31 848 48 48
daniel.baumann at bfh.ch
https://bfh.ch
https://bfh.science


More information about the bfh-linux-announce mailing list