Ger ↴
  • Ger
  • Eng
  • Tag cloud
  • Site map
  • Login Login
    Forgot your password?
Lutz Donnerhacke
Navigation
  • Projekte
  • Veröffentlichungen
  • Blog
  • Impressum
  • Datenschutz
  • Suchen

Suche

Die Suche nach "4" ergab 58 Treffer

Patchwoche in Unternehmen

24.04.2025 19:42 Lutz Donnerhacke Tags: Microsoft , Ansible 0

Microsoft veröffentlich am zweiten Dienstag im Monat neue Patches. In größeren Unternehmen wird bei normalen Updates eine Woche auf Unverträglichkeiten getesten und dann die Patches unternehmensweit ausgerollt. In dieser "Patchwoche" sollen auch automatisch Updates ausgerollt werden, in anderen Wochen aber nicht.

Das Problem besteht offensichtlich darin, dass Patches, die auf einem Gerät am Mittwoch in der Patchwoche ausgerollt werden sollen, jeden Monat von Hand mit dem Datum verknüpft werden müssen. So kann der 1. des Monats ein Montag oder Dienstag sein, dann ist der relevante Tag der 16. oder 18. des Monats. Ist der 1. des Monats aber ein Mittwoch, so wäre der relevante Tag am 21. des Monats.

Wie automatisiert man sowas?

Offensichtlich ändert sich an der Situation nichts, wenn der Wochentag und gleichzeitig das Datum erhöht werden: Die gesuchte Woche ist charaterisiert durch die Differenz von Datum und Wochentag.

Diese Differenz bezieht sich auf den Montag (1) als Monatsanfang (1), denn da ist die Differenz 0. Nun soll der Wochenanfang so liegen, als sei der Dienstag der Wochenbeginn. Die Differenz ist für einen Dienstag (2) als Monatsanfang (1) aber -1. Um das wieder auf 0 zu bekommen, muss man diese 1 hinzu addieren.

Um die Woche zu ermitteln teilt man einfach durch 7 und verwirft den Rest. 0 ist dann die erste Woche, 1 die Woche, in der der Microsoft veröffentlicht und 2 die Woche, in der regulär gepatcht werden soll.

Die Formel lautet also: (Monatstag - Wochentag + 1)/7 == 2

Als Shellscript sieht das so aus:

$ cat patchwoche-mache
#! /usr/bin/bash

[ 2 -eq $[$(/usr/bin/date +'(%-d-%u+1)/7')] ] || exit
exec mache "$@"

Nun steht einem generischen Crontab nichts mehr im Wege:

# Daueraufgaben
0 2 * * 1      mache am montag
0 2 * * 2      mache am dienstag
0 2 * * 3      mache am mittwoch
0 2 * * 4      mache am donnerstag
0 2 * * 5      mache am freitag
...
0 2 * * 3      patchwoche-mache am mittwoch
...

Und tut.

Wie sich die Testanzahl auf die Inzidenz auswirkt

23.03.2021 11:02 Lutz Donnerhacke Tags: Corona 1

Aus aktuellem Anlass hier nochmal ein Hinweis auf die Auswirkung der Testanzahlen. Wesentlich ist dabei zunächst der Fakt, dass die Infektionen völlig unabhängig von der Teststrategie sind. Die Leute bekommen und haben das Virus auch dann, wenn man nicht testet. Mit Tests kann man sich der Infektionslage annähern, indem man möglichst viele Personen ermittelt, die infiziert sind. Man leuchtet also das Dunkelfeld aus.

Die Infektionen geschehen auch, wenn man nicht testet.

Dabei gibt es vier Gruppen von Personen:

  1. Menschen, deren Infektion schon bekannt ist (aus einem früheren Test). Diese werden regelmäßig wieder getestet, um zu erkennen, wann die Gefahr vorbei ist. Die Positivquote dieser Tests ist sehr hoch: Viele von denen, die bekanntermaßen infiziert sind, bleiben es auch noch für eine ganze Weile. Die Infektion verschwindet nur langsam aus dem Körper, auch wenn die ansteckende Phase schon lange vorbei ist.
  2. Menschen, die typische Covid19-Symptome haben. Diese werden hoffentlich schnell getestet, um Klarheit über ihren Zustand zu erhalten. Meist sind diese Personen noch ansteckend oder haben vor kurzem andere Menschen anstecken können. Auch hier ist die Positivquote der Tests hoch.
  3. Menschen, die durch Kontakte zu als infiziert bekannten Personen (aus Gruppe 2) sich angesteckt haben können. Diese Personen möglichst vollständig zu ermitteln ist Aufgabe des Gesundheitsamtes. Hier ist Geschwindigkeit so ziemlich das Wichtigste. Binnen 24h sollten alle potentiellen Kontaktpersonen benachrichtigt sein, egal ob es gerade Wochentag oder Wochenende ist. Digitalisierung hilft hier massiv. Diese Menschen sind zu testen, um weitere Ansteckungswege zu erkennen. (Zum Verhindern reicht Quarantäne.) Die Positivquote dieser Tests ist ziemlich niedrig, weil (Achtung Überschlag) eine Person zwar 40 Kontakte in zwei Wochen gehabt, aber nur einen oder zwei angesteckt hat (Positivquote bei 3%). Besonders heimtückisch sind Superspreader-Events, bei denen eine Person sehr viele andere angesteckt hat, beispielsweise bei einem längeren, lautstarken Aufenthalt mit vielen Personen in Innenräumen.
  4. Menschen, die sich auf noch unbekannten Wege angesteckt haben. Diese zu finden, ist sehr schwer. Hier kommen Schnelltests zur Vorselektion zum Einsatz, um schnell größere Menschengruppen auf verdächtige Virenausscheidungen zu überprüfen. Die Verdachtsfälle werden dann durch PCR-Tests validiert. Es kommt also bei Schnelltests auf den preiswerten Durchsatz an, nicht auf absolute Genauigkeit. Natürlich sollte der Schnelltest nicht zu viele falsch-negative Ergebnisse bringen, weil das die Ausbreitung der Infektion begünstigt. Eine zu hohe falsch-positiv Quote ist dagegen mehr ein Problem der Akzeptanz des Tests. Da der Schnelltest in einem Umfeld mit wenigen Fällen (niedrige Prävalenz) angewendet wird, ist seine erwartete Positivquote sehr niedrig (0,2% in Jena). Es ist also sinnvoll, Verdachtsgruppen mit höherer Prävalenz (z.B. Reiserückkehrer) komplett mit Schnelltests zu überprüfen.

Das kann man auch mal numerisch durch spielen.

Wenn also eine Positivquote an Tests von ca. 5% gemeldet wird, sind ausschließlich die Gruppen 1 bis 3 dafür verantwortlich. Positive Tests aus Gruppe 4 spielen fast keine Rolle. Vergrößert man jetzt die Anzahl der Tests in die Gruppe 4 hinein, so erhöht sich die Anzahl der gefundenen Infektionen nur sehr wenig.

Liegt die Positivquote bei höheren Werten, vielleicht sogar über 7% oder gar 10%, dann hat man die Gruppe 3 (Kontakte) nicht ausreichend untersucht. Mehr Tests führen also in dem Fall zu echt mehr gefundenen Infektionen, was aber auch dringend notwendig ist.

Liegt die Positivquote bei niedrigen Werten, vielleicht sogar unter 1%, dann hat man ein sehr umfassendes Bild der Infektionslage (unter der aktuellen Prävalenz). Dazu muss man vermutlich mehr als die Hälfte der Bevölkerung testen, denn die Positivquote kann nicht niedriger sein als die Prävalenz in der Bevölkerung. Alle gefundenen Fälle stecken keine neuen Menschen mehr unkontrolliert an, so dass das Virus sich nicht mehr ausbreiten kann. Dies ist die #NoCovid-Strategie. Erfolgreich durchgeführt kann man dann auch Millionen Menschen testen, ohne einen positiven Fall zu haben. Das Virus ist dann faktisch verschwunden.

corona tests 4

corona tests 4

Nicht ganz so optimale Wege durch OSPF

07.12.2020 22:17 Lutz Donnerhacke Tags: 0

Ein Kundennetz ist im Laufe der Zeit organisch gewachsen. Irgendwann kommt dann der Augenblick, wo man es in verschiedene Standorte trennen muss. Denn es gibt ungeplante Überlastungssituationen.

Ausgangslage

standort ospf 1

Das Netz besteht aus einigen Au0enroutern an den Rändern und innen aus einer Reihe von Layer3-Switchen. L3-Switche sind Geräte, die genauso schnell routen wie switchen können, allerdings nur mit einer beschränkten Anzahl von Routen, weil sonst die Hardwarekosten explodieren.

Seit einiger Zeit sind einige der Geräte an einen anderen Standort umgezogen. Nun kann man nicht mehr bei Bedarf einfach wild Querverbindungen zwischen den Geräten patchen. Es gibt drei Leitungen zwischen den Standorten sowie separate Uplinks und das war es.

Geroutet wird per OSPF. Streng nach Design Guide gibt es zwei lokale Areas, in denen Ziele bevorzugt direkt erreichen werden können. Und dazwischen gibt es eine Area 0, den Backbone, der alles aufnimmt, was in den einzelen Areas nicht zu finden ist.

Konsequenterweise ist die Area 0, also die Resterampe des Routings, die Quelle der Default Route, auch das Heim der BGP Router mit Außenanbindung. Diese kennen so viele Routen, dass man diese den Switchen keinesfalls  erzählen darf, sollen die nicht spontan an Herzdrücken versterben. So gesehen, sind die Außenrouter eigentlich in der Mitte des OSPF Protokolls.

standort ospf 2

Die Area 0, der Backbone, darf nicht mit seinen externem Routen die L3-Switche berühren. Denn diese würden die Pakete per Default Route einfach nur wieder zurück zum lokalen BGP Router schicken, und der wieder ... ein Routing-Loop. Deswegen besteht die Area 0 eigentlich aus switchübergreifenden VLANs, in denen die BGP-Router je ein Bein stehen haben.

standort ospf 3

Für das OSPF sieht es also so aus, als gäbe es drei LAN-Segmente, die die Router direkt miteinander verbinden.

In der Realität ist dem allerdings nicht so, denn die OSPF-Idee eines LAN-Segmentes kommt noch aus der Zeit des echten Ethernets, wo alle Geräte im wahrsten Sinne an einem gemeinsam genutzten Strang hängen. Dabei ist es komplett egal, wer mit wem redet, das Medium ist für alle gleich teuer in der Benutzung.

In der Realität der heutigen, strukturierten Ethernet-Verkablung sieht es allerdings ganz anders aus. Hier wandert ein Datenpaket zwischen zwei Routern in Form eines Ethernet-Frames mehrfach über verschiedene Leitungen, oft sogar mehrfach über die gleiche physikalische Strippe.

standort ospf 4

Eine solche Mehrfachbenutzung ist bei begrenzten Ressourcen ein Problem. Konkret aufgefallen ist es als sieben Gbps über mehrere Stunden transportiert werden mussten. Dann blieb auf den 10G-Leitungen der Router kaum noch was für anderen Traffic frei.

Lösungen

Die einfachste Lösung ist, neue Technik zu kaufen, die um den Faktor 4 oder 10 höhere Leitungskapazitäten anbietet. Leider versackte die Bestellung und wird auch so schnell nicht realisiert werden.

Eine zweite Lösung wäre, die Standorte als eigenständige BGP Inseln zu betreiben.

standort ospf 7

Das hält den Traffic lokal und der Datenverkehr zwischen den Bereichen lässt sich feingranular steuern. Selbst Loadbalancing über mehrere Wege ist kein Problem. Zusätzlich reizt an dem Ansatz, dass die extern sichtbaren Routen schon an der Stelle fertig im BGP erzeugt werden können, an den sie entstehen.

Leider fehlt für die Benutzung von BGP die Lizenz auf den L3-Switchen. Deren Beschaffung ist auch nicht so einfach, denn auch hier hängen Bestellprozesse dran.

Bleibt also nur der Versuch, die Datenflüsse innerhalb des OSPF selbst neu zu sortieren. Dabei gibt es einige grundlegende Konzepte:

  • Die Area0 dient als Bindeglied zwischen den anderen Area.
  • Traffic, der in einer Area zugestellt werden kann, verlässt diese Area nicht (intra-Area first).
  • Traffic, den sich die BGP-Router gegenseitig zustellen, darf mit keinen anderen Routern in Berührung kommen.
  • Traffic, der nicht extern zugestellt werden soll, soll schnellstmöglich an die L3-Switche übergeben werden.

Damit ergibt sich, dass das gesamte Netz auf den Kopf zu stellen ist:

  • Die Area 0 kommt ganz nach innen, sie bildet die Standortkopplung.
  • Pro Standort gibt es ein eigne Area, die den Traffic am Standort fest hält.
  • Die BGP-Außenrouter gehören zwar zum Standort, den sie bedienen, kommunizieren aber untereinander über eine komplett eigene Struktur.
standort ospf 5

Die Interaktion zwischen den Außenroutern und der jeweiligen Area besteht grundsätzlich darin, dass die BGP-Router eine Default-Route in die lokale Area injizieren und aus der Area lernen, welche Netze in beiden Standorten bedient werden können.

standort ospf 6

Das Injizieren der Default-Route durch die BGP-Router in die jeweilge lokale Area ist kein Problem. Die BGP-Router werden somit zu ASBRs. Im Gegenzug werden alle Geräte am Standort zu einem lokal nahe gelegenen BGP-Router routen. Traffic, der das Netz verlässt, tut es am gleichen Standort.

Umgekehrt lernen die BGP-Router die internen Routen aus dem OSPF und können sie ins BGP redistributieren. Dabei setzen sie Communities etc. pp. Dies sind vor allem die extern sichtbaren Aggregates des Autonomen Systems. Erzeugt man die Aggragate (per Null-Route) lokale auf dem BGP-Router, besteht die Gefahr des Blackholings, insbesondere wenn der BGP-Router keine funktionierende Verbindung nach innen hat.

In der rot gepunkteten Area tauschen die BGP-Router untereinander ihre für die BGP relevanten Loopback-Adressen aus. Über diese sprechen sie internal BGP miteinander. Es sind die Next-Hop Adressen der externen Ziele, die ein BGP-Router anderswo los werden muss. Dabei gibt es einiges zu beachten:

  • Die vom internen BGP erzeugten Routen haben als Next-Hop eine (Loopback-)IP die im rot gepunkteten Bereich auftaucht. Diese IPs dürfen keinesfalls durch das interne OSPF hindurch erreichbar sein, weil das zu Routing-Loops für externe Ziele führt.
  • Die Loopback-IPs der BGP-Router sollen aus dem internen Bereich erreichbar sein,  auch wenn sie von einer internen Sammel-(Aggregate)-Route überdeckt werden.
  • Bestimmte externe (Eyeball-)Ziele sollen auch standortübergreifend auf dem jeweils besten Weg erreicht werden. Diese Ziele sollen direkt zum zuständigen BGP-Router gelangen, nicht erst eine extra Runde im rot gepunkteten Bereich laufen müssen.

Um diese Anforderungen zu erreichen, muss man zwischen verschiedenen Routing-Protokollen redistributieren. Gleichzeitig, darf die rot gepunktete Area nicht einfach Bestandteil der gleichen OSPF Instanz sein, die auch die internen Areas bedient. Zwischen zwei nicht-backbone Areas, die am gleichen Router anliegen erfolgt kein Austausch von Routen, deswegen würden die Loopback-IPs nie in den internen Bereich gelangen. Mit zwei OSPF Instanzen geht das aber problemlos.

Die BGP-Router haben nur vier verschiedene Quellen für Routing-Informationen:

  • externes BGP
  • OSPF zwischen den BGP-Routern
  • OSPF im internen Netz
  • internes BGP

Externes BGP kann aufgrund der Eingangsfilter keine netzinternen Routen enthalten. Dieser Teil ist für (interne) Routingprobleme also irrelevant.

OSPF zwischen den BGP-Routern muss immer zuerst berücksichtigt werden. Egal welche Metriken eine Route hier hat, es ist ein BGP-Peer und damit auf diesem Weg zu erreichen. Anderenfalls gibt es Routingloops für externe Ziele.

Wenn ein anderes internes Ziel erreicht werden soll, dann ist das immer unmittelbar an die inneren Router abzugeben. Anderenfalls gibt es das eingangs skizzierte Problem der Überlastung von Leitungen.

Interne Ziele, die über iBGP (von anderen BGP-Routern gelernt und redistributiert) erreichbar sind, müssen zwar an externe Partner übermittelt werden, damit das Netz extern erreichbar bleibt. Traffic an interne Ziele sollten aber nur dann an andere BGP-Nachbarn geroutet werden, wenn man diese Ziele nicht über interne Wege erreichen konnte.

Es beitet sich also an, für das OSPF zwischen den BGP-Routern eine eigene Instanz zu betreiben. Aus dieser Instanz kann in die andere OSPF-Instranz redistributiert werden. Und diese wird mit einer niedrigeren administrativen Distanz versehen:

Routingquelle Standard Benutzt
Lokal angeschlossenes Netz 0 0
Lokale statische Route 1 1
externes BGP 20 20
OSPF zwischen BGP-Routern 110 105
OSPF im internen Netz 110 110
internes BGP 200 200

Und nun bleibt die Aufgabe, dieses Umstellung im laufenden Betrieb vor zu nehmen.

standort ospf 4

standort ospf 4

TCAM full - Überraschender Totalausfall

07.11.2020 09:52 Lutz Donnerhacke Tags: IPv6 , Internet , Cisco , WTF , Broadband , Multicast , QoS , ARP 5

Gestern gegen Mittag gab es bei einem Kunden eine großen Ausfall, drei zentrale Switche (von sechs) haben beinahe gleichzeitig nicht mehr ordnungsgemäß funktioniert. Es folgte stundenlange eine Odyssee, denn nach einem Reboot eines Switches hatte man knapp eine halbe Stunde bis er wieder ausfiel.

Ausgangslage

Nichts geht mehr. Spontan. Ohne Vorwarnung.

Alle Geräte, die hinter der Ausfallstelle sich befinden sind nicht mehr erreichbar. Kunden, Infrastruktur, Monitoring. Da auch DNS Server betroffen sind, gestaltet sich jeder Zugriff extrem zäh. Man wartet also teilweise eine Minute, bis man die Ergebnisse eines Kommandos zu Gesicht bekommt.

Eigentlich ist Redundanz gegeben: Wenn ein Gerät ausfällt, übernimmt ein anderes. Jetzt ist es aber anders. denn drei Geräte sind zeitgleich ausgefallen. Diese dienen dem Großteil der Infrastruktur als Uplink, was die Diagnosemöglichkeiten drastisch einschränkt.

In der Annahme, es handle sich um ein Problem, dass von einer defekten Komponente (z.B. ein Layer2-Loop) an einer Stelle eingespeist wird, wurde zunächst systematisch versucht, diese Stelle einzukreisen. Erfolglos.

Es blieb nichts weiter übrig, als einem der betroffenen Switche das Chassis stromlos zu machen, um Zugriff auf das Gerät zu bekommen und damit mehr Informationen zu erlangen. Vor einem solchen Hart-Reset scheut man normalerweise zurück, weil der komplette Reboot knapp 20 Minuten dauert.

Der Zugriff auf das frisch gebootet Gerät zeigt ... keine Auffälligkeiten. Das ist schlecht. Sehr schlecht. Denn damit gibt es keinen Ansatzpunkt, wo der Fehler her kommen könnte. Nach wenigen Minuten friert jedoch die Verbindung zum Gerät ein und es geht wieder nichts mehr.

In einer der Phasen gelingt es, Zugriff auf das Monitoring zu erlangen, dort findet sich ein erster Hinweis:

Nov  6 12:36:41 172.27.44.252 %C4K_L3HWFORWARDING-4-TCAMFULL: FLC Tcam full, packets will be forwarded in software at reduced rate.  Failure due to: add tcam space failed
Nov  6 12:38:41 172.27.44.254 %C4K_L3HWFORWARDING-4-TCAMFULL: FLC Tcam full, packets will be forwarded in software at reduced rate.  Failure due to: add tcam space failed
Nov  6 12:52:12 172.27.44.253 %C4K_L3HWFORWARDING-4-TCAMFULL: FLC Tcam full, packets will be forwarded in software at reduced rate.  Failure due to: add tcam space failed

Oops. Die Meldung besagt, dass eine Hardware-Komponente voll gelaufen ist und nun die gesamte Funktion des Gerätes durch Software emuliert werden muss. Dabei die die CPU des Gerätes für eine solche Last gar nicht ausgelegt, sie soll eigentlich nur die Hardware konfigurieren, so dass die Datenströme die CPU selbst nie treffen.

Das erklärt einige der Effekte: Zum einen fällt das Gerät selbst nicht aus, so dass die Umschaltung auf die Redundanztechnik nicht stattfinden kann. Zum anderen erfüllt es seine Funktion nicht mehr ausreichend. Wir haben Paketverluste von 99%, was einer Unbenutzbarkeit gleich kommt.

TCAM - ein teurer Spaß

Was ist nun dieses ominöse TCAM? TCAM ist im Endeffekt eine Hardware, in der Key-Value-Paare abgelegt werden können. Man kann direkt nach dem Schlüssel (Key) suchen und bekommt in einem Takt das Ergebnis aus dem TCAM ausgelesen. Das ist natürlich irre schnell.

Diese gute Einführung in die Funktion des TCAM enthält das schöne Funktionsbild:

cam-architecture

Auf einem TCAM Chip sind also Speicherzellen, die parallel die anliegende Datenanfrage mit den abgelegten Werten vergleichen und – wenn alles überein stimmt – die komplette Zeile aktivieren. Kann der Vergleicher nur 0/1, spricht man von CAM – Content Addressable Memory. Kann der Vergleicher auch den anliegenden Wert ignorieren, also einen dritten Zustand abbilden, so spricht man von TCAM – Tenary CAM.

Normalerweise müsste eine CPU den normalen Speicher nach dem Suchwert durchkämmen, um das Ergebnis zu ermitteln. Je nach Algorithmus dauert das, logarithmisches Wachstum der Suchzeit ist aber typisch. Dagegen hat der TCAM eine konstante Suchzeit von eins, das Ergebnis ist instantan verfügbar.

TCAM macht also die Geräte schnell, jedoch auch teuer. Deswegen versucht man den TCAM so effektiv wie möglich zu nutzen. Dabei trifft der Hersteller eine Reihe von Kompromissen.

Ein Teil des TCAM wird für QoS, ein Teil für ACLs, ein Teil für Layer2 (MAC Adressen), ein Teil für Layer3 (Routing), etc. pp, benutzt.

Wer hat meinen TCAM belegt?

Die Meldung im Log deutet darauf hin, dass der Layer3, also der Routing-Teil zu voll wird.

Das Datenblatt des Geräts schreibt:

  • 128,000 Flexible NetFlow entries in hardware
  • 64,000/32,000 IPv4/IPv6 routing entries for campus access and aggregation deployments
  • IPv6 in hardware, providing wire-rate forwarding for IPv6 networks and support for dual stack with innovative resource usage
  • Dynamic hardware forwarding-table allocations for ease of IPv4-to-IPv6 migration
  • Scalable routing (IPv4, IPv6, and multicast) tables, Layer 2 tables, and access-control-list (ACL) and quality-of-service (QoS) entries to make use of 8 queues per port and comprehensive security policies per port

All diese Punkte haben mit TCAM Kapazitäten zu tun.

Wir haben in dem Netz ca. 2500 IP4 Routen (meist für Kunden mit statischen IPs) und ca. 8000 IPv6 Routen (hauptsächlich IPv6-PD). Das liegt weit unter den Limits.

Wir haben pro Gerät höchstens 35k MAC Adressen, das haben wir aber schon lange im Blick und sorgen dafür, dass diese Werte nicht in kritische Bereiche ansteigen.

Wir haben NetFlow aktiv. Das ist verzichtbar, also wird das abgeschaltet. Keine Besserung.

Wir haben Multipath-Routing aktiv, um Datenpakete über mehrere Leitungswege zu verteilen. Das ist meist auch verzichtbar und wird dort abgeschaltet. Keine Besserung.

Wir haben anti-spoofing ACLs aktiv, die schon wichtig sind. Aber vor der Wahl – gar keine Funktion oder Bösewichter aufhalten – fällt die Entscheidung leicht, besonders, da wir es bisher nicht mit Bösewichtern zu tun hatten und es noch weitere Filter tiefer im Netz gibt. Allerdings auch wieder keine Besserung.

Was bleibt denn noch?

Schauen wir uns das TCAM für Layer3 mal genauer an:

#sh platform hardware ip route summary

block#  start   end     mode    entries used    free    group   type
0       80 Bit  0       4095    4096    4096    0       3       Dst
1       160 Bit 4096    8190    2048    104     1944    5       Dst
2       160 Bit 8192    12286   2048    439     1609    4       Dst
3       80 Bit  12288   16383   4096    4096    0       3       Dst
4       80 Bit  16384   20479   4096    4096    0       3       Dst
5       80 Bit  20480   24575   4096    4095    1       3       Dst
6       80 Bit  24576   28671   4096    4096    0       3       Dst
7       80 Bit  28672   32767   4096    4094    2       3       Dst
8       80 Bit  32768   36863   4096    4096    0       3       Dst
9       80 Bit  36864   40959   4096    3454    642     3       Dst
10      Unused  40960   45055   4096    0       4096    -       -
11      Unused  45056   49151   4096    0       4096    -       -
12      Unused  49152   53247   4096    0       4096    -       -
13      Unused  53248   57343   4096    0       4096    -       -
14      Unused  57344   61439   4096    0       4096    -       -
15      Unused  61440   65535   4096    0       4096    -       -

Das TCAM ist in 16 Blöcke unterteilt, von denen noch sechs Blöcke frei sind. Die anderen Blöcke sind entweder mit 80bit oder 160bit Schlüsselbreite konfiguriert und verschiedenen Funktionsgruppen zugeordnet. Sie liefern Ziele (vermutlich für Routingentscheidungen).

Auffällig ist, dass die 160bit Blöcke nur die Hälfte der Einträge fassen können, wie die 80bit Blöcke. Es ist jedoch nur logisch, da für die Schlüssel doppelt so viel Platz brauchen.

group#  inUse   mode    type      lookup  entries free    util%   rangeId
0       yes     80 Bit  uRPF Ipv4 Src     0       0       100     0
1       yes     160 Bit uRPF Ipv6 Src     0       0       100     1
2       yes     160 Bit SpecSrc   Src     0       0       100     255
3       yes     80 Bit  UC Ipv4   Dst     32768   645     98      0
4       yes     160 Bit MC Ipv4   Dst     2048    1609    21      1
5       yes     160 Bit UC Ipv6   Dst     2048    1944    5       2
6       yes     320 Bit MC Ipv6   Dst     0       0       100     3
7       yes     160 Bit SpecDst   Dst     0       0       100     255
8       yes     160 Bit OtherL3   Otr     0       0       100     4

        range
0       [ipv4: 0.0.0.0 - ipv4: 255.255.255.255]
1       [ipv6: :: - ipv6: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]
2       [null]
3       [ipv4: 0.0.0.0 - ipv4: 223.255.255.255]
4       [ipv4: 224.0.0.0 - ipv4: 239.255.255.255]
5       [ipv6: :: - ipv6: FEFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]
6       [ipv6: FF00:: - ipv6: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]
7       [null]
8       [ipv4: 0.0.0.0 - ipv6: FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF]

Hier haben wir die Verwendungszwecke der TCAM Blöcke. Für reverse Path Filtering (das jetzt abgeschaltet ist) wird also die Source-Adresse als Schlüssel verwendet. Für IPv4/v6 Routing wird die Zieladresse als Schlüssel benutzt. Soweit so wenig überraschend.

Eher überraschend ist, dass Multicast doppelte Breite benötigt. Multicast Routing funktioniert anhand der Zielgruppe (einer IP) und der Quell-IP (einer IP), es ist also doch keine Überraschung.

Was Spec und OtherL3 ist, weiß ich nicht. Das kommt hier schlicht nicht vor.

        blocks
0       (0)
1       (0)
2       (0)
3       (8)  0, 3, 4, 5, 6, 7, 8, 9
4       (1)  2
5       (1)  1
6       (0)
7       (0)
8       (0)

Auch die Zuordung der logischen Gruppen zu den physikalischen Blöcken ist nachvollziehbar. Es ist genau das, was bei der Auflistung der Blöcke schon stand.

entity        total     used      free      util%
Entries       61440     32639     28801     53
  uRPF Ipv4   0         0         0         0
  uRPF Ipv6   0         0         0         0
  UC Ipv4     32768     32091     677       97
  MC Ipv4     2048      438       1610      21
  UC Ipv6     2048      110       1938      5
  MC Ipv6     0         0         0         0
  SpecDst     0         0         0         0
  SpecSrc     0         0         0         0
  OtherL3     0         0         0         0
  unused      24576     24576     0         100

Diese Zusammenfassung zeigt die relevanten Kenngrößen.

  • Von den (80bit)-Einheiten des TCAM sind 53% belegt.
  • IPv4 Routing hat 32091 Einträge aktiv, damit sind von den aktuell allozierten Blöcken 97% belegt.
  • IPv4 Multicast hast 438 Einträge, was von dem einzigen allozierten Block 21% ausmacht.
  • IPv6 Routing belegt mit 110 Einträgen in dem einzigen allozierten Block 5%

Wesentlich ist hier fest zu halten, das die Aussage im Datenblatt etwas euphemistisch formuliert wurde. Das TCAM wird für alle Protokolle gemeinsam benutzt, dabei passen maximal 32k IPv6 Routen rein, wenn nichts anderes auf der Maschine läuft. 64k IPv4 Routen passen nur, wenn nichts anderes damit gemacht wird. Sobald IPv4 und IPv6 oder Multicast oder uRPF gemischt werden, sinken die entsprechenden freien Blöcke rasant.

Die relevante Kenntgröße zur Überwachung ist also die Prozentzahl rechts oben (53%) oder noch besser die Zahl der freien Blöcke (die man sich als unused/4096 berechnen muss).

Gestern sah das anders aus. Wir hatten über 20000 Einträge bei IPv6 Routing und dazu noch die uRPF Belegungen. Damit war der der TCAM erschöpft.

Weiter oben sprach ich von ca 2500 IPv4 Routen, hier stehen nun 32091. Warum? Mit IPv6 war es gestern ähnlich, warum?

#sh ip route summary
IP routing table name is default (0x0)
IP routing table maximum-paths is 8
Route Source    Networks    Subnets     Replicates  Overhead    Memory (bytes)
application     0           0           0           0           0
connected       0           50          0           3640        9200
static          2           525         0           40264       96968
ospf 1          2           2084        0           150192      392168
  Intra-area: 156 Inter-area: 68 External-1: 1565 External-2: 0
  NSSA External-1: 297 NSSA External-2: 0
internal        18                                              108332
Total           22          2659        0           194096      606668

Die 2681 passen gar nicht mit den 32091 zusammen. Was ist da los?

Der Catalyst routet nicht wie ein normaler Router, sondern ist ein Layer3-Switch. Er benutzt das TCAM, um in einem einzelnen Schritt, das Ziel eines eingehenden Paketes zu ermitteln. Das Verfahren nennt sich Cisco Express Forwarding und ist der Grund dafür, dass die Geräte ebenso schnell switchen wie routen.

#sh ip cef summary
IPv4 CEF is enabled for distributed and running
VRF Default
 32097 prefixes (32093/4 fwd/non-fwd)
 Table id 0x0
 Database epoch:        2 (32097 entries at this epoch)

Das passt sehr gut (die Werte sind dynamisch und der TCAM Wert zeigt nun 32124). Aber was enthält CEF nun genau?

# sh ip cef
Prefix               Next Hop             Interface
5.102.167.0/26       192.168.255.18       Vlan29
5.102.167.128/29     192.168.255.18       Vlan29
10.10.10.10/32       217.17.207.163       Vlan115
10.100.0.0/16        attached             Vlan142
10.100.0.0/32        receive              Vlan142
10.100.0.1/32        receive
10.100.0.3/32        receive              Vlan142
10.100.0.4/32        attached             Vlan142
10.100.0.5/32        attached             Vlan142
10.100.1.1/32        attached             Vlan142
10.100.1.2/32        attached             Vlan142
10.100.1.3/32        attached             Vlan142
10.100.1.7/32        attached             Vlan142
10.100.1.9/32        attached             Vlan142
...

Es enthält die Routing-Einträge (wie erwartet) und alle Nachbarschaftseinträge (unerwartet). Damit ist mit einem Lookup im TCAM sofort ein neuer Layer2-Header verfügbar, der an einem bestimmten Interface raus geblasen werden kann. Er verweist entweder direkt auf die MAC Adresse des Zieles oder auf die MAC Adresse des nächsten Routers.

Dazu kommt, dass diese CEF hier distriuted ist, d.h. die verschiedenen eingesteckten Line-Cards haben ihr eigenes TCAM, dass analog befüllt wurde. Im Idealfall verläßt also eine eingehendes Paket nicht mal die Linecard sondern geht direkt auf einem anderen Port der gleichen Karte wieder raus.

Da diese Einträge im CEF auch die MAC Adressen enthalten, haben sie direkt mit den ARP Tabellen zu tun.

#sh arp summary
Total number of entries in the ARP table: 29979.
Total number of Dynamic ARP entries: 29800.
Total number of Incomplete ARP entries: 143.
Total number of Interface ARP entries: 36.
Total number of Static ARP entries: 0.
Total number of Alias ARP entries: 0.
Total number of Simple Application ARP entries: 0.
Total number of Application Alias ARP entries: 0.
Total number of Application Timer ARP entries: 0.

Das passt also sehr gut zusammen.

Und wieder ist die Dokumentation zumindest ungenau. Es ist also nur dann 64k IPv4 Routen möglich, wenn die Ziele alle zu wenigen externen Geräte weiter geleitet werden müssen. Sobald es verschiedene Ziele für eine Route gibt, reicht das nicht mehr aus. Im Extremfall kann man also höchstens ein fast voll besetztes /16 lokal anbinden und schon geht gar nichts mehr.

Bei IPv6 halbieren sich die erreichbaren Zahlen. Bei Multicast noch einmal.

Ich bin solche Mogel-Aussagen von Cisco nicht gewöhnt. Ich bin ehrlichweise etwas ungehalten.

Lösung

Was nun tun?

Von den Kisten muss zuerst einmal das IPv6 runter. Große Layer2-Segmente mit SLAAC füllen das TCAM so schnell, dass es irgendwann platzt. Deswegen waren auch nur Geräte betroffen, die zwei solche Anbindungen versorgen. Mittlerweile ist die IPv6 Adoption der Endgeräte so weit angestiegen, dass es die TCAM Grenzen gerissen hat. Natürlich ist das allein kein Grund, dass alle drei Geräte gleichzeitig betroffen waren, sie waren aber alle in anderen Konstellationen kurz vor der Grenze und haben deswegen einen weiteren Anstieg anderswo im Netz nicht verkraftet.

IPv6 ist aktuell kein Vertragsbestandteil beim Kunden, deswegen muss für die IPv6-Versorgung eine andere Lösung gefunden werden, die nicht am TCAM knabbert. Wie genau die aussehen wird, ist noch nicht klar.

Nach einem beherzten "no ipv6 nd prefix ..." und einem "no ipv6 address 2a01:..../64" auf den dicken Kunden-Leitungen, ist Ruhe eingekehrt.

Und dabei bleibt es jetzt erst einmal.

Bleibt noch die Frage, ob sich das System selbst heilen kann. Was passiert also, wenn die TCAM-Blöcke nicht mehr von der zugeordneten Gruppe benötigt werden?

block#  start   end     mode    entries used    free    group   type
0       80 Bit  0       4095    4096    4096    0       3       Dst
1       160 Bit 4096    8190    2048    56      1992    5       Dst
2       160 Bit 8192    12286   2048    195     1853    4       Dst
3       80 Bit  12288   16383   4096    4094    2       3       Dst
4       80 Bit  16384   20479   4096    4096    0       3       Dst
5       80 Bit  20480   24575   4096    4092    4       3       Dst
6       80 Bit  24576   28671   4096    4019    77      3       Dst
7       160 Bit 28672   32766   2048    0       2048    5       Dst
8       80 Bit  32768   36863   4096    3383    713     3       Dst
9       160 Bit 36864   40958   2048    1       2047    5       Dst
10      160 Bit 40960   45054   2048    3       2045    5       Dst
11      160 Bit 45056   49150   2048    1       2047    5       Dst
12      160 Bit 49152   53246   2048    2       2046    5       Dst
13      Unused  53248   57343   4096    0       4096    -       -
14      Unused  57344   61439   4096    0       4096    -       -
15      Unused  61440   65535   4096    0       4096    -       -

Ganz einfach. Sie sind verloren.

Block 7 wurde für IPv6 Routing allokiert und nun nicht mehr benötigt. Er wird aber nicht als unbenutzt zurück gegeben. Er ist verloren. Ebenso wie die anderen Blöcke 9 bis 12.

Die einzige Möglichkeit TCAM wieder frei zu bekommen, ist also ein Reboot des Geräts. Das kann man aber planen.

Auch für die Kennzahlen der Überwachung ist dieser Zustand lehrreich:

entity        total     used      free      util%
Entries       51200     24004     27196     46
  uRPF Ipv4   0         0         0         0
  uRPF Ipv6   0         0         0         0
  UC Ipv4     24576     23767     809       96
  MC Ipv4     2048      174       1874      8
  UC Ipv6     12288     63        12225     0
  MC Ipv6     0         0         0         0
  SpecDst     0         0         0         0
  SpecSrc     0         0         0         0
  OtherL3     0         0         0         0
  unused      12288     12288     0         100

Mit 46% frei schaut es doch gar nicht so schlecht aus, oder? Aber es sind nur die Hälfte der Blöcke frei, wie beim anderen, weniger belasteten, Gerät.

Bandbreite im DHCP

09.10.2020 18:15 Lutz Donnerhacke Tags: Broadband 0

DHCP-Pakete, die über Broadband-Infrastruktur wie DSLAMs laufen, werden providerseitig mit Zusatzinformationen angereichert. Beispielsweise mit Angaben zur Leitungsqualität und Bandbreite. Diese Informationen auszulesen und ggfl. auch selbst setzen zu können ist entweder Bitpfriemelei oder eine Konfiguration des ICS DHCP-Servers.

Rohe Bits

Selbstverständlich ist es möglich, die Daten unterwegs mitzuschneiden und aus dem Binärblob zu extrahieren. RFC4243 definiert dazu die Suboption 9 in der DHCP Option (82) die für das DHCP-Relay zuständig ist. In dieser Option sind herstellerspezifische Dinge abgelegt.

Das Extrahieren per Perl ist einfach:

my $d = Net::DHCP::Packet->new($data);
die "Not a DHCP packet.\n" unless $d->isDhcp;

my $bbf;
my $o82 = $d->getOptionRaw(82);
if(defined $o82) {
    my %o = unpack('(CC/a)*', $o82);
    if(%o) {
        my $o9 = rfc4243($o{9});
        if(exists $o9->{3561}) {
            $bbf = BBF($o9->{3561});
        }
    }
}

sub rfc4243($) {
    local $_ = shift;
    my %r = unpack('(NC/a)*',$_);
    return \%r;
}

sub BBF($) {
    local $_ = shift;
    my %c = unpack('(CC/a)*',$_);

    foreach(keys %c) {
        if($_ >= 129 && $_ <= 142) {
            ($c{$_}) = unpack('N', $c{$_});
        } elsif($_ >= 155 && $_ <= 162) {
            ($c{$_}) = unpack('N', $c{$_});
        }
    }
    return \%c;
}

Im Ergebnis bekommt man einen Hash-Referenz in $bbf in die Hand, die die Angaben der eingefügten Optionen nach Broadbandforum (Vendor-ID 3561) enthält.

Im Einzelnen sind das:

my %bbfnames = (
    129 => 'Actual data rate Upstream in kbps',    # from client
    130 => 'Actual data rate Downstream in kbps',  # from client
    131 => 'Minimum Data Rate Upstream in kbps',
    132 => 'Minimum Data Rate Downstream in kbps',
    133 => 'Attainable Data Rate Upstream in kbps',
    134 => 'Attainable Data Rate Downstream in kbps',
    135 => 'Maximum Data Rate Upstream in kbps',   # from server
    136 => 'Maximum Data Rate Downstream in kbps', # from server
    137 => 'Minimum Data Rate Upstream in low power state in kbps',
    138 => 'Minimum Data Rate Downstream in low power state in kbps',
    139 => 'Maximum Interleaving Delay Upstream in milliseconds',
    140 => 'Actual interleaving Delay Upstream in milliseconds',
    141 => 'Maximum Interleaving Delay Downstream in milliseconds',
    142 => 'Actual interleaving Delay Downstream in milliseconds',

    155 => 'Expected throughput (ETR) upstream in kbps',
    156 => 'Expected throughput (ETR) downstream in kbps',
    157 => 'Attainable expected throughput (ATTETR) upstream in kbps',
    158 => 'Attainable expected throughput (ATTETR) downstream in kbps',
    159 => 'Gamma data rate (GDR) upstream in kbps',
    160 => 'Gamma data rate (GDR) downstream in kbps',
    161 => 'Attainable gamma data rate (ATTGDR) upstream in kbps',
    162 => 'Attainable gamma data rate (ATTGDR) downstream in kbps',
);

Man kann dann also über das Feld {130} der Variable $bbf auf die aktuelle Downloadgeschwindigkeit in kbps zugreifen.

ISC DHCP

Natürlich sind solche Programmierungen bei der Benutzung fertiger Software, wie dem DHCPD von ISC, nicht möglich. Hier muss mit Bordmitteln die Option auseinander genommen werden. Es ist nahezu unmöglich, die Substrukturen auf Bitebene selbst zu parsen, dass muss der Daemon schon allein hin bekommen. Aber dafür braucht er Hilfe.

Man muss der Software erklären, wie die Option strukturiert sind, damit sie die parsen kann. Zunächst einmal erkläre ich den RFC4243.

option space rfc4243 code width 4 length width 1 hash size 7;
option agent.vendor code 9 = encapsulate rfc4243;

Es wird eine neuer Optionsbereich definiert, der intern mit 32bit Codenummern arbeitet. Da ich nur eine Handvoll Codes auch real definieren will, lass ich die Hashtable auf einer kleinen Primzahl (hier 7) stehen, um RAM zu sparen.

Dieser Optionsbereich wird dann als Suboption 9 an die vordefinierte "agent" Option 82 eingehängt. Der Server weiß also bereits, wie Option 82 zu parsen ist, kennt nun auch die innere Struktur der Unteroption 9: Eine komplette eigene DHCP-Optionsstruktur mit eigenen Code- und Längenangaben.

Man sieht auch gleich, dass die Struktur (rfc4243) nicht den gleichen Namen haben muss wie die Option (vendor).

option space bbf code width 1 length width 1 hash size 257;
option rfc4243.bbf code 3561 = encapsulate bbf;

In analoger Weise wird die Substruktur des Vendors Broadbandforum definiert. Wenn in der Suboption 9 der (32bit) Code 3561 auftaucht, so ist der gesamte Datenbereich dieses Feldes wieder eine DHCP-Optionsstruktur mit 8bit-Code und 8bit-Länge. Diesmal will ich aber mehr Codes definieren, mache also die Hashtable größer.

option bbf.actual-up-rate code 129 = unsigned integer 32;
option bbf.actual-down-rate code 130 = unsigned integer 32;
option bbf.minimum-up-rate code 131 = unsigned integer 32;
option bbf.minimum-down-rate code 132 = unsigned integer 32;
option bbf.attainable-up-rate code 133 = unsigned integer 32;
option bbf.attainable-down-rate code 134 = unsigned integer 32;
option bbf.maximum-up-rate code 135 = unsigned integer 32;
option bbf.maximum-down-rate code 136 = unsigned integer 32;
option bbf.maximum-up-lowpower-rate code 137 = unsigned integer 32;
option bbf.maximum-down-lowpower-rate code 138 = unsigned integer 32;
option bbf.maximum-delay-up code 139 = unsigned integer 32;
option bbf.actual-delay-up code 140 = unsigned integer 32;
option bbf.maximum-delay-down code 141 = unsigned integer 32;
option bbf.actual-delay-down code 142 = unsigned integer 32;

option bbf.expected-throughput-up code 155 = unsigned integer 32;
option bbf.expected-throughput-down code 156 = unsigned integer 32;
option bbf.attainable-throughput-up code 157 = unsigned integer 32;
option bbf.attainable-throughput-down code 158 = unsigned integer 32;
option bbf.gamma-data-rate-up code 159 = unsigned integer 32;
option bbf.gamma-data-rate-down code 160 = unsigned integer 32;
option bbf.attainable-gamma-data-rate-up code 161 = unsigned integer 32;
option bbf.attainable-gamma-data-rate-down code 162 = unsigned integer 32;

Hier wurden die für mich interessanten Werte definiert. Der Server kann also beim Parsen der Unterstruktur anhand des (8bit) Codes erkennen, um welchen Wert es geht und wie dieser in interpretieren ist (als uint32 in Netzwerkbyteorder).

Und wie greift man auf die Werte zu?

log (info, concat("BBF: ",
            binary-to-ascii(16, 8, ":", hardware),
            " current speed ",
            binary-to-ascii(10, 32, ".", option bbf.actual-down-rate),
            "/",
            binary-to-ascii(10, 32, ".", option bbf.actual-up-rate)
          ));

Die Loganweisung an passender Stelle in der Konfig erzeugt dann eine Menge Einträge.

Oct  9 18:55:26 dhcpd: BBF: 1:e0:28:6d:aa:bb:cc current speed 5999/639
Oct  9 18:55:27 dhcpd: BBF: 1:34:31:c4:dd:ee:ff current speed 50000/9999
Oct  9 18:55:29 dhcpd: BBF: 1:38:10:d5:gg:hh:ii current speed 54999/11000 

Tut.

Coronavirus: Warum wir jetzt handeln müssen

12.03.2020 13:55 Lutz Donnerhacke Tags: Politik , Mathe , Corona 6

Dieser Artikel ist eine Übersetzung eines sehr guten Artikels von Tomas Pueyo. Ich halte ihn für so wichtig, dass Sprachbarrieren nicht zum Hindernis werden sollten. Los gehts:

Bei all dem, was über das Coronavirus geschieht, könnte es sehr schwer sein, eine Entscheidung darüber zu treffen, was heute zu tun ist. Sollten Sie auf weitere Informationen warten? Heute etwas tun? Was denn?

In diesem Artikel werde ich mit vielen Diagrammen, Daten und Modelle aus vielen Quellen arbeiten:

  • Wie viele Fälle von Coronaviren wird es in Ihrer Region geben?
  • Was wird passieren, wenn diese Fälle auftreten?
  • Was sollten Sie tun?
  • Wann wird es passieren?

Wenn Sie den Artikel fertig gelesen haben, werden Sie das hier mitnehmen:

  • Das Coronavirus kommt zu Ihnen.
  • Es kommt mit exponentieller Schnelligkeit: langsam und dann ganz plötzlich.
  • Es ist eine Frage von Tagen. Ein oder zwei Wochen vielleicht.
  • Wenn das geschieht, wird das Gesundheitssystem überfordert sein.
  • Ihre Mitbürger werden in den Fluren versorgt werden.
  • Erschöpftes Pflegepersonal wird zusammenbrechen. Einige werden sterben.
  • Diese müssen entscheiden, welcher Patient mit Sauerstoff versorgt wird und welcher stirbt.
  • Die einzige Möglichkeit, dies zu verhindern, ist sofortige soziale Abgrenzung. Nicht morgen. Sondern heute.
  • Das bedeutet, so viele Menschen wie möglich zu Hause zu halten, und zwar ab sofort.

Als Politiker, Gemeindevertreter oder Unternehmer haben Sie die Macht und die Verantwortung, dies zu verhindern.

Vielleicht haben Sie jetzt Angst: Was ist, wenn ich überreagiere? Werden die Leute mich belächeln? Werden sie wütend auf mich sein? Werde ich dumm dastehen? Wird es nicht besser sein, darauf zu warten, dass andere zuerst handeln? Werde ich der Wirtschaft zu sehr schaden?

Aber in 2-4 Wochen, wenn die ganze Welt in der Quarantäne ist, wenn die wenigen kostbaren Tage der sozialen Abgrenzung, die Sie ermöglicht haben, Leben gerettet haben, wird man Sie nicht mehr kritisieren: Sie werden Ihnen dafür danken, dass Sie die richtige Entscheidung getroffen haben.

Ok, los geht's.

Wie viele Fälle von Coronavirus wird es in Ihrem Gebiet geben?

Länderüberblick

corona1

Die Gesamtzahl der Fälle stieg exponentiell an, bis China sie eindämmte. Aber dann ist sie nach außen gedrungen, und jetzt ist es eine Pandemie, die niemand mehr aufhalten kann.

corona2

Bis jetzt ist dies hauptsächlich Italien, Iran und Südkorea zuzuschreiben:

corona3

In Südkorea, Italien und China gibt es so viele Fälle, dass es kaum möglich ist, die anderen Länder zu sehen, aber lassen Sie uns die rechte untere Ecke näher betrachten.

corona4

Es gibt zahlreiche Länder mit exponentiellen Zuwächsen. Heute sind die meisten von ihnen westliche Länder.

corona5

Hält diese Art von Wachstum nur eine Woche an, dann bekommen Sie das hier:

corona6

Wenn man verstehen will, was passieren wird oder wie man es verhindern kann, muss man sich die bereits bekannten Beispiele anschauen: China, asiatische Länder mit SARS-Erfahrung und Italien.

China

corona7

Dies ist eines der wichtigsten Diagramme. Klicken Sie drauf, um die Details besser erkennen zu können.

In orangefarbenen Balken zeigt es die tägliche offizielle Zahl der Fälle in der Provinz Hubei: Wie viele Menschen an diesem Tag diagnostiziert wurden.

Die grauen Balken zeigen die tatsächlichen täglichen Coronavirus-Fälle. Die chinesische Gesundheitsbehörde CDC ermittelte diese, indem sie die Patienten während der Diagnose fragte, wann ihre Symptome begannen.

Entscheidend ist, dass diese tatsächlichen Fälle zu diesem Zeitpunkt noch nicht bekannt waren. Wir können sie nur rückblickend herausfinden: Die Behörden wissen nicht, wann jemand erste Symptome hatte. Sie wissen, wann jemand zum Arzt geht und die Diagnose gestellt wird.

Das heißt, die orangefarbenen Balken zeigen Ihnen, was die Behörden wussten, und die grauen, was in Wirklichkeit geschah.

Am 21. Januar explodierte die Zahl der neu diagnostizierten Fälle (orange): Es gibt etwa 100 neue Fälle. Tatsächlich gab es an diesem Tag 1.500 neue Fälle, die exponentiell anwachsen. Aber die Behörden wussten das nicht. Was sie wussten, war, dass es plötzlich 100 neue Fälle dieser neuen Krankheit gab.

Zwei Tage später sperrten die Behörden Wuhan. Zu diesem Zeitpunkt betrug die Zahl der täglich diagnostizierten neuen Fälle ~400. Beachten Sie diese Zahl: Sie beschlossen, die Stadt mit nur 400 neuen Fällen an einem Tag zu schließen. In Wirklichkeit gab es an diesem Tag 2.500 neue Fälle, aber das wussten sie nicht.

Einen Tag später wurden 15 weitere Städte in Hubei dicht gemacht.

Bis zur Schließung von Wuhan am 23. Januar zeigt das graue Diagramm, dass die Zahl der Fälle exponentiell zunimmt. Die tatsächlichen Fälle sind geradezu explodiert. Sobald Wuhan geschlossen wurde, wurden die Zahlen immer weniger. Als am 24. Januar weitere 15 Städte schließen, kommt die Zahl der tatsächlichen Fälle (wieder grau) zum Stillstand. Das Maximum an tatsächlichen Fällen wurde zwei Tage später erreicht, und seither ist die Zahl der tatsächlichen Fälle zurückgegangen.

Man beachte, dass die orangefarbenen (offiziellen) Fälle immer noch exponentiell anwachsen: Noch 12 Tage lang sah es so aus, als würde das ganze Ding immer noch explosionsartig anwachsen. Aber das war nicht der Fall. Es ist nur so, dass die Patienten immer stärkere Symptome bekamen und häufiger zum Arzt gingen, während gleichzeitig das systematische Erfassen der Patienten besser funktionierte.

Dieses Konzept der offiziellen und tatsächlichen Fälle ist wichtig. Behalten wir es für später im Gedächtnis.

In den übrigen Regionen Chinas koordinierte die Zentralregierung ihre Aktivitäten gut, sie ergriff sofortige und drastische Maßnahmen. Dies ist das Ergebnis:

corona8

Jede gerade Linie ist eine chinesische Region mit Coronavirus-Fällen. Jede einzelne hatte das Potential, sich exponentiell zu entwickeln, aber dank der Maßnahmen, die gerade Ende Januar durchgeführt wurden, konnte das Virus gestoppt werden, bevor es sich ausbreiten konnte.

In der Zwischenzeit hatten Südkorea, Italien und der Iran einen ganzen Monat Zeit, um sich zu informieren, taten es aber nicht. Es begann das gleiche exponentielle Wachstum wie in Hubei und überholte bis Ende Februar alle chinesischen Regionen.

Asiatische Länder

In Südkorea ist die Zahl der Fälle explodiert, doch haben Sie sich schon gefragt, was in Japan, Taiwan, Singapur, Thailand oder Hongkong anders ist?

corona9

Taiwan schaffte es nicht einmal in dieses Diagramm, weil es nicht die von mir gewählte Schwelle von 50 Fällen hatte.

Alle wurden 2003 von SARS heimgesucht, und alle haben daraus gelernt. Sie lernten, wie viral und tödlich die Krankheit sein kann, und wussten daher, dass sie das Problem ernst nehmen mussten. Daher sehen alle ihre Werte, obwohl sie schon viel früher begannen, immer noch nicht wie Exponentialkurven aus.

Bislang haben wir Berichte von Regierungen, die die Bedrohung der sich verbreitenden Coronaviren erkannten und sie eindämmten. In den übrigen Ländern gibt das allerdings eine komplett anders verlaufende Entwicklung.

Doch bevor wir dazu kommen, eine Anmerkung zu Südkorea: Das Land ist wahrscheinlich ein Ausreißer. Das Coronavirus war nach den ersten 30 Fällen eingedämmt. Patient 31 war ein Superüberträger, der es an Tausende andere Menschen weitergegeben hat. Da sich das Virus ausbreitet, bevor die Menschen Symptome zeigen, war das Virus zu dem Zeitpunkt, als die Behörden das Problem erkannten, längst da draußen. Nun tragen sie die Folgen dieses einen Falls. Ihre Eindämmungsbemühungen zeigen jedoch: Italien hat es in einer Reihe von Fällen bereits überschritten, und der Iran wird es schon morgen überschreiten (3/10/2020).

Washington State

Sie kennen bereits das Anwachsen in den westlichen Ländern und haben gesehen, wie schlecht die Prognosen von nur einer Woche aussehen. Nun stellen Sie sich vor, dass die Eindämmung nicht wie in Wuhan oder in anderen asiatischen Ländern geschieht, und Sie bekommen eine kolossale Epidemie.

Schauen wir uns einige Fälle an, wie z.B. den Bundesstaat Washington, die San Francisco Bay Area, Paris und Madrid.

corona10

Der Bundesstaat Washington ist das Wuhan der USA. Die Zahl der Fälle dort wächst exponentiell. Sie liegt derzeit bei 140.

Doch schon früh geschah etwas Interessantes. Die Todesrate ging durch die Decke. Es gab 3 Fälle und einen Todesfall.

Von anderen Orten wissen wir, dass die Sterblichkeitsrate des Coronavirus zwischen 0,5 und 5 % liegt (dazu später mehr). Wie konnte die Sterblichkeitsrate 33% erreichen?

Es stellte sich heraus, dass sich das Virus seit Wochen unbemerkt ausgebreitet hatte. Es ist nicht so, dass es nur 3 Fälle gab. Die Behörden wussten nur von 3, und einer von ihnen war tot, denn je ernster der Zustand, desto wahrscheinlicher ist es, dass jemand getestet wird.

Das ist ein bisschen wie bei den orangefarbenen und grauen Balken in China: Hier wussten sie nur von den orangefarbenen Balken (offizielle Fälle) und sie sahen gut aus: nur 3. Aber in Wirklichkeit gab es Hunderte, vielleicht Tausende von tatsächlichen Krankheitsfällen.

Das ist ein Problem: Sie kennen nur die offiziellen Fälle, nicht die tatsächlichen. Aber Sie müssen die tatsächlichen Fälle kennen. Wie können Sie die tatsächlichen Fälle abschätzen? Es gibt verschiedene Möglichkeiten. Ich hab für beide ein Modell, so dass Sie auch mit den Zahlen spielen können (direkter Link zum Kopieren des Modells).

Einmal durch Todesfälle. Wenn Sie Todesfälle in Ihrer Region haben, können Sie damit die Anzahl der tatsächlichen aktuellen Fälle schätzen. Wir wissen ungefähr, wie lange es im Durchschnitt (17,3 Tage) dauert, bis ein Mensch stirbt, der sich das Virus eingefangen hat. Die Person, die am 29.2. im Bundesstaat Washington starb, hat sich also wahrscheinlich am 12.2. infiziert.

Dann weiß man die Sterblichkeitsrate. Für dieses Szenario verwende ich 1% (die Einzelheiten besprechen wir später). Demzufolge gab es um den 12.2. herum bereits etwa 100 Fälle in der Gegend (von denen nur einer 17,3 Tage später zum Tode kam).

Nehmen wir nun die durchschnittliche Verdoppelungszeit für das Coronavirus (Zeit, die durchschnittlich für die Verdoppelung der Fälle benötigt wird). Sie liegt bei 6,2. In den 17 Tagen, die diese Person zum Sterben brauchte, haben sich die Erkrankungen also mit ~8 (=2^(17/6)) multipliziert. Anders ausgedrückt: Wenn man nicht alle Fälle diagnostizieren kann, bedeutet ein Todesfall heute 800 tatsächliche Fälle.

Im Bundesstaat Washington gibt es derzeit 22 Todesfälle. Mit dieser kurzen Hochrechnung erhält man heute ungefähr 16.000 tatsächliche Coronavirus-Fälle. So viele wie die offiziellen Fälle in Italien und im Iran zusammen.

Wenn wir ins Detail gehen, erkennen wir, dass 19 dieser Todesfälle auf eine Gruppe zurückzuführen sind, die das Virus möglicherweise nicht weit verbreitet hat. Betrachten wir also diese 19 Todesfälle als einen einzigen, ergibt sich eine Gesamtzahl von vier Todesfällen in diesem Bundesstaat. Wenn wir das Modell mit dieser Zahl aktualisieren, erhalten wir heute immer noch ~3.000 Fälle.

Trevor Bedford betrachtet in seinem Ansatz die Viren selbst und ihre Mutationen, um die aktuelle Fallzahl zu ermitteln. Er kommt zu dem Schluss, dass es derzeit wahrscheinlich ~1.100 Fälle im Bundesstaat Washington gibt.

Keiner dieser Ansätze ist perfekt, aber sie alle zielen auf die gleiche Kernaussage ab: Wir kennen die Zahl der tatsächlichen Fälle nicht, aber sie ist viel höher als die offizielle. Es sind nicht Hunderte. Es sind Tausende, vielleicht sogar mehr.

San Francisco Bay Area

Bis zum 8.3. gab es in der Bay Area keine Todesfälle. Daher ist es schwer zu sagen, wie viele tatsächliche Fälle es gab. Offiziell gab es 86 Fälle. In den USA ist die Zahl der Fälle jedoch sehr gering, weil es nicht genügend Testkits gibt. Das Land beschloss, ein eigenes Testkit zu erstellen, was sich allerdings als wirkungslos erwies.

Dies war die Anzahl der bis zum 3. März in verschiedenen Ländern durchgeführten Tests:

corona11

In der Türkei, wo es keine Fälle von Coronaviren gab, wurden pro Einwohner 10-mal mehr Tests durchgeführt als in den USA. Heute ist die Situation mit ~8.000 in den USA durchgeführten Tests nicht viel besser, wodurch ~4.000 Menschen getestet wurden.

corona12

An dieser Stelle kann man nur einen Teil der offiziellen Fälle zu tatsächlichen Fällen machen. Wie soll man sich entscheiden? Für die Bay Area testeten sie jeden, der eine Reise unternommen hatte oder mit einem Reisenden in Kontakt stand, d.h. sie kannten die meisten reisebezogenen Fälle, jedoch keinen der Fälle, die sich in der Bevölkerung ausbreiteten. Indem man ein Gefühl für die Ausbreitung in der Bevölkerung im Vergleich zur Ausbreitung auf Reisen hat, kann man wissen, wie viele echte Fälle es gibt.

Ich habe mir dieses Verhältnis für Südkorea angesehen, das über großartige Daten verfügt. Als sie 86 Fälle hatten, betrug der Prozentsatz der Fälle, die auf die Ausbreitung in der Bevölkerung zurückzuführen sind, 86% (86 und 86% sind ein Zufall).

Anhand dieser Angabe kann man die Anzahl der tatsächlichen Fälle berechnen. Wenn es heute in der Bay Area 86 Fälle gibt, ist es wahrscheinlich, dass die tatsächliche Zahl bei ~600 liegt.

Frankreich und Paris

Frankreich verzeichnet heute 1.400 Fälle und 30 Todesfälle. Mit den beiden oben genannten Methoden können Sie eine Spanne von Fallzahlen haben: zwischen 24.000 und 140.000.

Die tatsächliche Zahl der Coronavirus-Fälle in Frankreich dürfte heute zwischen 24.000 und 140.000 liegen.

Lassen Sie mich das wiederholen: Die Zahl der tatsächlichen Fälle in Frankreich wird wahrscheinlich um ein bis zwei Größenordnungen höher sein, als sie offiziell gemeldet wird.

Sie glauben mir nicht? Schauen wir uns noch einmal das Wuhan-Diagramm an. Wenn Sie die orangefarbenen Balken bis zum 22. Januar aufsammeln, erhalten Sie 444 Fälle. Addieren Sie nun alle grauen Balken. Das ergibt ~12.000 Fälle. Als Wuhan also dachte, er hätte 444 Fälle, waren es 27 Mal mehr. Wenn Frankreich glaubt, es habe 1.400 Fälle, dürften es durchaus Zehntausende sein.

Für Paris gilt die gleiche Rechnung. Mit ~30 Fällen innerhalb der Stadt liegt die tatsächliche Zahl der Erkrankungen wahrscheinlich bei Hunderten, vielleicht sogar Tausenden. Bei 300 Fällen in der Region Ile-de-France könnte die Gesamtanzahl der Fälle in der Region bereits Zehntausende übersteigen.

Madrid und Spanien

Spanien hat sehr ähnliche Zahlen wie Frankreich (1.200 Fälle gegenüber 1.400, und beide haben 30 Todesfälle). Das heißt, es gelten die gleichen Regeln: Spanien hat wahrscheinlich schon über 20.000 echte Fälle.

In der Region Madrid (Comunidad de Madrid) mit 600 offiziellen Fällen und 17 Todesfällen liegt die wahre Zahl der Fälle wahrscheinlich zwischen 10.000 und 60.000.

Wenn Sie diese Daten sehen und sich selbst sagen: "Unmöglich, das kann nicht wahr sein", dann bedenken Sie Folgendes: Bei dieser Zahl von Fällen war Wuhan bereits unter Quarantäne.

Bei der Zahl der Fälle, die wir heute in Ländern wie den USA, Spanien, Frankreich, Iran, Deutschland, Japan, den Niederlanden, Dänemark, Schweden oder der Schweiz sehen, befand sich Wuhan bereits in Quarantäne.

Und wenn Sie sich sagen: "Nun, Hubei ist nur eine Region", dann möchte ich Sie daran erinnern, dass dort fast 60 Millionen Menschen leben, mehr als in Spanien und etwa so viele wie in Frankreich.

Was passiert, wenn Coronavirus-Fälle auftreten?

Das Coronavirus ist schon hier. Es ist versteckt und wächst exponentiell.

Was wird in unseren Ländern passieren, wenn es zuschlägt? Das lässt sich leicht feststellen, denn wir haben bereits mehrere Orte, an denen es sich ausbreitet. Die besten Beispiele sind Hubei und Italien.

Die Sterblichkeitsraten

Die Weltgesundheitsorganisation (WHO) gibt 3,4 % als Sterblichkeitsrate an (% Menschen, die sich mit dem Coronavirus infizieren und dann sterben). Diese Zahl ist aus dem Kontext gerissen, lassen Sie mich das erklären.

corona13

Es hängt stark vom Land und vom Zeitpunkt ab: zwischen 0,6% in Südkorea und 4,4% im Iran. Und was heißt das? Mit einem Trick können wir es herausfinden.

Die beiden Möglichkeiten, wie man die Sterblichkeitsrate berechnen kann, sind Todesfälle/Gesamtfälle und Todesfälle/abgeschlossene Fälle. Die erste ist wohl eine zu niedrige Schätzung, denn viele offene Fälle können immer noch mit dem Tod enden. Die Zweite stellt eine Überschätzung dar, da Todesfälle wahrscheinlich schneller abgeschlossen werden als Heilungen.

Ich habe mir angesehen, wie sich beide im Laufe der Zeit entwickeln. Beide Zahlen werden zum gleichen Ergebnis führen, wenn alle Fälle erst einmal abgeschlossen sind. Projiziert man also die Entwicklung der Vergangenheit in die Zukunft, kann man eine Schätzung der endgültigen Sterblichkeitsrate vornehmen.

Dies ergibt sich aus den Daten. Chinas Sterblichkeitsrate liegt jetzt zwischen 3,6 % und 6,1 %. Wenn Sie das in die Zukunft projizieren, sieht es so aus, als würde sie sich in Richtung 3,8%-4% annähern. Das ist doppelt so hoch wie die aktuelle Schätzung und 30 x schlimmer als die Grippe.

Sie setzt sich jedoch aus zwei völlig unterschiedlichen Situationen zusammen: Hubei und das übrige China.

corona14

Die Sterblichkeitsrate von Hubei wird sich wahrscheinlich auf 4,8% zubewegen. Im übrigen China wird sie sich dagegen voraussichtlich auf ~0,9% einpendeln:

corona15

Für den Iran, Italien und Südkorea, die einzigen Länder mit genügend Todesfällen, habe ich ebenfalls die Zahlen aufgeführt, um dies einigermaßen verwertbar zu machen.

corona16
corona17
corona18

Die iranische und die italienische Sterblichkeitsrate nähern sich beide der 3- bis 4-Prozent-Marke an. Meine Vermutung ist, dass sich auch ihre entgültigen Raten um diese Zahl herum bewegen werden.

Am interessantesten ist Südkorea, denn diese beiden Zahlen stehen in keinem Zusammenhang: Die Zahl der Todesfälle/Gesamtzahl der Fälle beträgt nur 0,6%, aber die Zahl der Todesfälle/abgeschlossenen Fälle liegt bei satten 48%. Meiner Meinung nach ist das Land einfach extrem vorsichtig: Sie testen jeden (bei so vielen offenen Fällen scheint die Todesrate niedrig zu sein) und lassen die Fälle länger offen (so dass sie die Fälle schnell schließen, wenn der Patient tot ist). Relevant ist, dass sich die Sterblichkeitsrate von Anfang an um 0,5% bewegt hat, was darauf hindeutet, dass sie auch weiterhin bestehen bleiben wird.

Das letzte relevante Beispiel ist die Kreuzfahrt der Diamond Princess: bei 706 Fällen, 6 Todesfällen und 100 Genesungen dürfte die Sterblichkeitsrate bei 1 bis 6,5% liegen.

Die Altersverteilung in den einzelnen Ländern wird ebenfalls Auswirkungen haben: Da die Sterblichkeit bei älteren Menschen viel höher ist, werden Länder mit einer alternden Bevölkerung wie Japan im Durchschnitt stärker betroffen sein als jüngere Länder wie Nigeria. Es gibt auch Wetterfaktoren, insbesondere Feuchtigkeit und Temperatur, aber es ist noch unklar, wie sich dies auf die Übertragungs- und Sterblichkeitsraten auswirken wird.

Daraus kann man schließen:

  • Es gibt noch einige andere externe Faktoren, die die Sterblichkeitsrate beeinflussen werden.
  • Abgesehen davon werden die Länder, die darauf vorbereitet sind, eine Sterblichkeitsrate von ~0,5% (Südkorea) bis 0,9% (übriges China) aufweisen.
  • Überforderte Länder werden eine Sterblichkeitsrate zwischen ~3%-5% haben.

Anders ausgedrückt: Länder, die schnell handeln, können die Zahl der Todesfälle um den Faktor zehn reduzieren. Und das ist nur die Zahl der Todesfälle! Schnelles Handeln reduziert auch die Zahl der Krankheitsfälle drastisch, womit dies noch mehr zu einem Selbstläufer wird.

Was braucht ein Land also, um vorbereitet zu sein?

Wie groß ist die Belastung für das Gesundheitssytem?

corona19
corona20

Das Problem ist, dass Artikel wie Beatmungsgeräte und Herz-Lungen-Maschinen nicht einfach hergestellt oder gekauft werden können. Vor einigen Jahren gab es beispielsweise in den USA insgesamt 250 Herz-Lungen-Maschinen.

Wenn sich also plötzlich 100.000 Menschen infiziert haben, werden sich viele von ihnen testen lassen wollen. Etwa 20.000 müssen ins Krankenhaus eingeliefert werden, 5.000 auf die Intensivstation und 1.000 brauchen Geräte, von denen wir heute nicht genug haben. Und das bei nur 100.000 Fällen.

Dabei bleiben Fragen wie Masken unberücksichtigt. Ein Land wie die USA verfügt nur über 1% der Masken, die es benötigt, um den Bedarf seiner Mitarbeiter im Gesundheitswesen zu decken (12M N95, 30M chirurgischer Bedarf vs. 3,5B benötigt). Treten viele Fälle auf einmal auf, gibt es Masken nur für 2 Wochen.

Länder wie Japan, Südkorea, Hongkong oder Singapur sowie chinesische Regionen außerhalb von Hubei sind vorbereitet und bieten den Patienten die erforderliche Versorgung.

Die übrigen westlichen Länder bewegen sich jedoch eher in Richtung Hubei und Italien. Was geschieht dort also?

Wie ein überfordertes Gesundheitssystem aussieht

Die Geschichten, die in Hubei und die in Italien geschehen sind, beginnen sich auf unheimliche Weise zu ähneln. Hubei baute zwei Krankenhäuser in zehn Tagen, aber selbst dann war es völlig überfordert.

Beide klagten darüber, dass die Patienten ihre Krankenhäuser überfluteten. Sie mussten überall versorgt werden: in den Fluren, in den Wartezimmern …

Mitarbeiter des Gesundheitswesens verbringen Stunden mit einem einzigen Stück Schutzkleidung, weil es nicht genug davon gibt. Daher können sie die Infektionsgebiete stundenlang nicht verlassen. Danach bleiben sie liegen, sind dehydriert und erschöpft. Es gibt keine Schichten mehr. Die Menschen werden aus dem Ruhestand zurückgeholt, um den Bedarf zu decken. Menschen, die keine Ahnung von der Krankenpflege haben, werden über Nacht geschult, um kritische Aufgaben zu erfüllen. Jeder ist immer auf Abruf, immer.

Das heißt, bis sie krank werden. Das passiert oft, weil sie ohne ausreichende Schutzausrüstung ständig dem Virus ausgesetzt sind. Dann müssen sie 14 Tage lang in Quarantäne bleiben, in denen sie nicht helfen können. Im besten Fall gehen 2 Wochen verloren. Im schlimmsten Fall sind sie tot.

Am schlimmsten ist es auf den Intensivstationen, wenn die Patienten sich Beatmungsgeräte oder Herz-Lungen-Maschinen teilen müssen. Es ist eigentlich unmöglich, diese gemeinsam zu nutzen, also müssen die medizinischen Fachkräfte bestimmen, welcher Patient sie benutzen wird. Das heißt konkret, welcher Patient lebt und welcher stirbt.

"Nach einigen Tagen müssen wir uns entscheiden. [...] Nicht jeder kann intubiert werden. Wir entscheiden aufgrund von Alter und Gesundheitszustand." -Christian Salaroli, italienischer Arzt.

Dies alles führt dazu, dass ein solches System eine Sterblichkeitsrate von ~4% anstatt von ~0,5% aufweist. Wenn Sie wollen, dass Ihre Stadt oder Ihr Land Teil der 4% ist, tun Sie heute nichts.

Was sollten Sie tun?

Die Kurve flacher machen

Dies ist jetzt eine Pandemie. Sie kann nicht beseitigt werden. Was wir aber tun können, ist ihre Auswirkungen zu verringern.

Einige Länder waren in dieser Hinsicht vorbildlich. Am besten ist Taiwan, das extrem mit China verbunden ist und dennoch bis heute weniger als 50 Fälle hat. In diesem jüngsten Artikel werden alle Maßnahmen erläutert, die sie schon früh ergriffen haben und die auf Eindämmung ausgerichtet waren.

Taiwan konnte es unter Kontrolle bringen, aber die meisten Länder hatten diese Expertise nicht und haben sie nicht. Nun betreiben sie ein anderes Spiel: Eindämmung. Sie müssen dieses Virus so harmlos wie möglich machen.

Wenn wir die Infektionen so weit wie möglich eindämmen, wird unser Gesundheitssystem in der Lage sein, die Fälle viel besser zu bewältigen und die Zahl der Todesfälle zu senken. Und wenn wir es über einen längeren Zeitraum hinweg verzögern, werden wir einen Punkt erreichen, den Rest der Gesellschaft zu impfen, so dass das Risiko ganz eliminiert wird. Unser Ziel ist also nicht die Eliminierung von Coronavirus-Infektionen. Es ist, sie zu verschieben.

Je mehr wir Krankheitsfälle hinausschieben, desto besser kann das Gesundheitssystem funktionieren, desto niedriger ist die Sterblichkeitsrate und desto höher ist der Anteil der Bevölkerung, der geimpft wird, bevor er sich ansteckt.

Wie können wir die Kurve abflachen?

Soziale Isolierung

Es gibt eine ganz einfache Sache, die wir tun können und die funktioniert: soziale Isolierung.

Wenn Sie zum Wuhan-Diagramm zurückkehren, werden Sie sich daran erinnern, dass sobald es eine Quarantäne gab, die Fälle abgenommen haben. Das liegt daran, dass die Menschen nicht miteinander interagierten und der Virus sich nicht verbreitete.

Der derzeitige wissenschaftliche Konsens ist, dass dieses Virus im Umkreis von 2 Metern verbreitet werden kann, wenn jemand hustet. Andernfalls fallen die Tröpfchen zu Boden und infizieren Sie nicht.

Die größte Ansteckung erfolgt dann durch Oberflächen: Das Virus überlebt stunden- oder tagelang auf verschiedenen Oberflächen. Wenn es sich wie eine Grippe verhält, kann es wochenlang auf Metall, Keramik und Kunststoffen überleben. Das bedeutet, dass Dinge wie Türgriffe, Tische oder Fahrstuhlknöpfe schreckliche Infektionsherde sein können.

Nur mit sozialer Isolation lässt sich das wirklich reduzieren: Die Menschen so viel wie möglich zu Hause zu halten, so lange wie möglich, bis sich das Problem gelegt hat.

Dies wurde bereits in der Vergangenheit bewiesen. Nämlich bei der Grippepandemie von 1918.

Lehren aus der Grippeepidemie von 1918

corona21

Man sieht, dass Philadelphia nicht schnell genug handelte und einen massiven Höhepunkt bei den Todesraten hatte. Vergleichen Sie das mit St. Louis, das es tat.

Dann schauen Sie sich Denver an, das erst Maßnahmen erließ und sie dann lockerte. Sie hatten einen doppelten Höhepunkt, wobei die zweite Spitze höher war als die erste.

corona22

Verallgemeinert man, so findet man das hier:

corona23

Dieses Diagramm zeigt für die Grippe von 1918 in den USA, wie viele weitere Todesfälle es pro Stadt gab, je nachdem, wie schnell Maßnahmen ergriffen wurden. Eine Stadt wie St. Louis hat beispielsweise 6 Tage vor Pittsburg Maßnahmen ergriffen und hatte weniger als die Hälfte der Todesfälle pro Bürger. Im Durchschnitt wurde die Sterblichkeitsrate durch die 20 Tage eher ergriffenen Maßnahmen halbiert.

Italien hat dies schließlich auch erkannt. Am Sonntag sperrten sie zunächst die Lombardei ab, und am Montag, einen Tag später, erkannten sie ihren Fehler und entschieden, das ganze Land abzuriegeln.

Hoffentlich werden wir in den kommenden Tagen Resultate sehen. Allerdings wird es ein bis zwei Wochen brauchen. Erinnern Sie sich an das Wuhan-Diagramm: Zwischen der Ankündigung der Abriegelung und dem Beginn der offiziellen Fälle (orange) lagen 12 Tage.

Wie können Politiker zur sozialen Isolierung beitragen?

Die Politiker stellen sich heute nicht die Frage, ob sie etwas tun sollen, sondern vielmehr, was die angemessene Maßnahme ist.

Zur Bekämpfung einer Epidemie gibt es mehrere Stufen, die mit der Vorbeugung beginnen und mit der Ausrottung enden. Aber für die meisten Optionen ist es heute zu spät. Bei diesem Ausmaß an Erkrankungen haben die Politiker nur zwei Optionen vor Augen: Eindämmung und Abschwächung.

Die Eindämmung stellt sicher, dass alle Fälle identifiziert, kontrolliert und isoliert werden. Genau das machen Singapur, Hongkong, Japan oder Taiwan so gut: Sie schränken sehr schnell die Zahl der einreisenden Personen ein, identifizieren die Kranken, isolieren sie sofort, verwenden schwere Schutzausrüstung zum Schutz ihrer Mitarbeiter im Gesundheitswesen, verfolgen alle ihre Kontakte, stellen sie unter Quarantäne... Das funktioniert sehr gut, wenn man vorbereitet ist und es frühzeitig tut, und man muss die Wirtschaft dafür nicht zum Erliegen bringen.

Ich habe bereits die Vorgehensweise Taiwans angedeutet. Aber auch der chinesische Ansatz ist gut. Die Anstrengungen, die das Land unternommen hat, um das Virus einzudämmen, sind verblüffend. Beispielsweise hatten sie bis zu 1.800 Teams von je 5 Personen, die jede infizierte Person verfolgten, jeden, mit dem sie in Kontakt kamen, und dann jeden, mit dem diese Personen interagierten, und die Gruppe isolierten. Auf diese Weise konnten sie das Virus in einem Land mit einer Milliarde Menschen eindämmen.

Die westlichen Länder haben das nicht getan. Und jetzt ist es zu spät. Die jüngste Ankündigung der USA, dass die meisten Reisen aus Europa verboten wurden, ist eine Eindämmungsmaßnahme für ein Land, das bis heute dreimal so viele Fälle hatte wie Hubei, als es geschlossen wurde, und das exponentiell anstieg. Wie können wir wissen, ob es genug ist? Das wissen wir, wenn wir uns das Reiseverbot von Wuhan ansehen.

corona24

Diese Grafik zeigt, wie sich das Reiseverbot in Wuhan auf die Verzögerung der Epidemie ausgewirkt hat. Die Blasengrößen zeigen die Anzahl der täglichen Erkrankungen. Die obere Zeile zeigt die Fälle, wenn nichts unternommen wird. Die beiden anderen Zeilen zeigen die Auswirkungen, wenn 40% und 90% der Reisen eliminiert werden. Es handelt sich um ein von Epidemiologen erstelltes Modell, denn wir können es nicht mit Sicherheit wissen.

Wenn Sie keinen großen Unterschied sehen, haben Sie Recht. Es ist sehr schwer, eine Veränderung in der Entwicklung der Epidemie zu erkennen.

Forscher schätzen, dass das Reiseverbot in Wuhan die Ausbreitung in China insgesamt nur um 3-5 Tage verzögert hat.

Was dachten die Forscher, was denn eine Verringerung der Übertragung bewirken sollte?

corona25

Der obere Block ist derselbe wie zuvor. Die beiden anderen Blöcke zeigen abnehmende Übertragungsraten. Wenn die Übertragungsrate um 25% sinkt (durch soziale Isolierung), verflacht sich die Kurve und verzögert den Höhepunkt um ganze 14 Wochen. Wenn die Übergangsrate um 50% sinkt, kann man die Epidemie nicht einmal innerhalb eines Quartals sehen.

Das Reiseverbot der US-Regierung für Europa ist gut: Es hat uns wahrscheinlich ein paar Stunden, vielleicht ein oder zwei Tage erkauft. Aber nicht mehr. Es ist nicht genug. Es ist Eingrenzung, wenn es darum geht, die Seuche zu entschärfen.

Wenn die Zahl der Fälle in der Bevölkerung einmal um Hunderte oder Tausende wächst, reicht es nicht mehr aus, weitere Fälle zu verhindern, die bestehenden zu verfolgen und ihre Kontakte zu isolieren. Die nächste Ebene ist die Entschärfung.

Linderung

Die Abmilderung erfordert eine starke soziale Isolierung. Die Menschen müssen aufhören, sich draußen aufzuhalten, um die Übertragungsrate (wie viele Menschen steckt ein Infizierter an) von ca. zwei bis drei, der das Virus ohne Maßnahmen folgt, auf unter eins zu senken, damit es schließlich aussterben kann.

Dazu müssen Unternehmen, Geschäfte, öffentliche Verkehrsmittel, Schulen geschlossen, Sperren durchgesetzt werden... Je schlimmer die Situation, desto größer die soziale Isolation. Je früher Sie schwere Maßnahmen verhängen, desto weniger Zeit brauchen Sie, um sie aufrechtzuerhalten, desto leichter ist es, Störungen zu erkennen, und desto weniger Menschen werden infiziert.

Genau das musste Wuhan tun. Das ist es, was Italien zu akzeptieren gezwungen war. Denn wenn das Virus grassiert, besteht die einzige Maßnahme darin, in allen betroffenen Gebieten die Verbreitung des Virus auf einmal zu stoppen.

Bei Tausenden von offiziellen Fällen - und Zehntausenden von tatsächlichen Fällen - müssen Länder wie der Iran, Frankreich, Spanien, Deutschland, die Schweiz oder die USA genau das tun.

Einige Unternehmen arbeiten von zu Hause aus, was fantastisch ist.
Einige Massenveranstaltungen werden gestoppt.
Einige betroffene Gebiete stehen unter Quarantäne.

All diese Maßnahmen werden das Virus verlangsamen. Sie werden die Übertragungsrate von 2,5 auf 2,2, vielleicht sogar auf 2 senken. Aber sie reichen nicht aus, um uns für einen längeren Zeitraum unter eins zu bringen, um die Epidemie zu stoppen. Und wenn wir das nicht schaffen, müssen wir sie so nahe wie möglich an eins herankommen, um die Kurve abzuflachen.

Also lautet die Frage: Welche Kompromisse könnten wir eingehen, um die Übertragungsrate zu senken? Dies ist das Programm, das Italien uns allen vorgelegt hat:

  • Niemand darf Sperrgebiete betreten oder verlassen, es sei denn, es gibt nachgewiesene familiäre oder berufliche Gründe.
  • Bewegung innerhalb der Bereiche ist zu vermeiden, es sei denn, sie sind aus dringenden persönlichen oder beruflichen Gründen gerechtfertigt und können nicht aufgeschoben werden.
  • Menschen mit Symptomen (Atemwegsinfektion und Fieber) wird "dringend empfohlen", zu Hause zu bleiben.
  • Die Standardurlaubszeit für Beschäftigte im Gesundheitswesen wird ausgesetzt.
  • Schließung aller Bildungseinrichtungen (Schulen, Universitäten...), Sporthallen, Museen, Skistationen, Kultur- und Sozialzentren, Schwimmbäder und Theater.
  • Bars und Restaurants haben begrenzte Öffnungszeiten von 6 Uhr morgens bis 18 Uhr abends, wobei der Abstand zwischen den Personen mindestens einen Meter betragen muss.
  • Alle Pubs und Clubs müssen schließen.
  • Alle kommerziellen Aktivitäten müssen einen Abstand von einem Meter zwischen den Kunden einhalten. Diejenigen, die das nicht schaffen, müssen schließen. Kirchen können geöffnet bleiben, solange sie diesen Abstand garantieren können.
  • Krankenhausbesuche von Familie und Freunden sind begrenzt.
  • Meetings müssen verschoben werden. Die Arbeit von zu Hause aus muss gefördert werden.
  • Alle Sportveranstaltungen und Wettbewerbe, ob öffentlich oder privat, werden abgesagt. Wichtige Veranstaltungen können hinter verschlossenen Türen abgehalten werden.

Nur zwei Tage später fügte man hinzu: Nein, eigentlich müssen Sie alle Geschäfte schließen, die nicht unverzichtbar sind. Jetzt schließen wir also alle kommerziellen Aktivitäten, Büros, Cafés und Geschäfte. Nur das Transportwesen, die Apotheken und die Lebensmittelgeschäfte bleiben geöffnet.

Ein Lösungsansatz ist die schrittweise Ausweitung der Maßnahmen. Unglücklicherweise gibt das dem Virus wertvolle Zeit, sich zu verbreiten. Wenn Sie sicher sein wollen, machen Sie es im Wuhan-Stil. Die Leute mögen sich jetzt beschweren, aber sie werden Ihnen später danken.

Wie können Führungskräfte aus der Wirtschaft zur sozialen Isolierung beitragen?

Wenn Sie ein Unternehmer sind und wissen möchten, was Sie tun sollten, ist der Staying Home Club die beste Ressource für Sie. Es handelt sich um eine Liste von Maßnahmen zur sozialen Isolierung, die von US-Technologieunternehmen ergriffen wurden - bisher 138. Sie reichen von erlaubter bis hin zu vorgeschriebener Heimarbeit und eingeschränkten Besuchen, Reisen oder Veranstaltungen.

Es gibt noch mehr Dinge, die jedes Unternehmen festlegen muss, wie z.B. was mit den stundenweise beschäftigten Arbeitern zu tun ist, ob das Büro offen bleiben soll oder nicht, wie Bewerbungsgespräche zu führen sind, was mit den Cafeterias zu tun ist … So machen wir das bei uns.

Wann?

Es ist sehr gut möglich, dass Sie bisher mit allem, was ich gesagt habe, einverstanden waren und sich von Anfang an gefragt haben, wann die einzelnen Entscheidungen getroffen werden sollen. Anders ausgedrückt: Welche Auslöser sollten wir für jede Maßnahme haben?

Risiko-basiertes Modell

Mein Modell ermöglicht es Ihnen, die wahrscheinliche Anzahl der Krankheitsfälle in Ihrem Gebiet zu beurteilen, die Wahrscheinlichkeit, dass Ihre Mitarbeiter bereits infiziert sind, wie sich dieser Zustand im Laufe der Zeit entwickelt und wie sich daraus ableiten lässt, ob Sie weiterhin offen bleiben sollten.

Es sagt uns Dinge wie:

  • Wenn Ihr Unternehmen 100 Mitarbeiter im Gebiet des Bundesstaates Washington mit 11 Coronavirus-Toten hat, besteht eine 25%ige Wahrscheinlichkeit, dass mindestens einer Ihrer Mitarbeiter infiziert ist, und Sie sollten sofort schließen.
  • Wenn Ihr Unternehmen 250 Mitarbeiter hauptsächlich in der South Bay (San Mateo und Santa Clara County, die zusammen 22 offizielle Fälle haben und die tatsächliche Zahl wahrscheinlich mindestens 54 beträgt) hat, haben Sie am 9. März eine 2%ige Wahrscheinlichkeit, dass mindestens ein Mitarbeiter infiziert ist.
  • Wenn Ihr Unternehmen in Paris (intramuros) angesiedelt ist und 250 Mitarbeiter hat, besteht heute eine Wahrscheinlichkeit von 95%, dass einer Ihrer Mitarbeiter das Coronavirus hat, und Sie sollten Ihr Büro morgen schließen.

Das Modell verwendet Bezeichnungen wie "Unternehmen" und "Mitarbeiter", aber dasselbe Modell kann auch für alles andere verwendet werden: Schulen, öffentliche Verkehrsmittel... Wenn Sie also nur 50 Mitarbeiter in Paris haben, aber alle den RER nehmen und auf Tausende von anderen Menschen treffen, ist die Wahrscheinlichkeit, dass mindestens einer von ihnen infiziert wird, plötzlich viel höher, und Sie sollten Ihr Büro sofort schließen.

Wenn Sie immer noch zögern, weil niemand Symptome zeigt, sollten Sie sich klarmachen, dass 26% der Ansteckungen auftreten, bevor es Symptome gibt.

Gehören Sie zu echten Führungskräften?

Diese Rechnung ist egoistisch. Es betrachtet das Risiko jedes Unternehmens individuell und geht so viel Risiko ein, wie wir wollen, bis der unvermeidliche Hammer des Coronavirus unsere Büros schließt.

Aber wenn Sie zu der Spitzengruppe der Unternehmer oder Politiker gehören, dann beziehen sich Ihre Berechnungen nicht nur auf ein einzelnes Unternehmen, sondern auf das Ganze. Die Mathematik lautet: Wie hoch ist die Wahrscheinlichkeit, dass eines unserer Unternehmen infiziert ist? Wenn Sie eine Gruppe von 50 Unternehmen mit durchschnittlich 250 Mitarbeitern in der SF Bay Area repräsentieren, besteht eine 35%ige Wahrscheinlichkeit, dass mindestens eines der Unternehmen einen Mitarbeiter infiziert hat, und eine 97%ige Wahrscheinlichkeit, dass das nächste Woche zutrifft. Ich habe einen Reiter in das Modell eingefügt, damit Sie damit spielen können.

Fazit: Die Kosten des Wartens

Es mag sich beängstigend anfühlen, heute eine Entscheidung zu treffen, aber Sie sollten nicht zu sehr darüber nachdenken.

corona26

In diesem theoretischen Modell werden verschiedene Bevölkerungsgruppen dargestellt: Die eine trifft keine sozialen Abgrenzungsmaßnahmen, die andere trifft sie am Tag n des Ausbruchs, die andere am Tag n+1. Alle diese Zahlen sind völlig fiktiv (ich habe sie so gewählt, dass sie den Ereignissen in Hubei ähneln, mit ~6k täglich neuen Fällen im schlimmsten Fall). Sie sind nur dazu da, zu veranschaulichen, wie wichtig ein einziger Tag bei etwas sein kann, das exponentiell wächst. Man kann sehen, dass die eintägige Verzögerung später und stärker zunimmt, aber dann konvergieren die täglichen Fälle gegen Null.

Aber was ist mit kumulativen Fällen?

corona27

In diesem theoretischen Modell, das in etwa an Hubei erinnert, führt das Warten eines weiteren Tages zu 40% mehr Krankheitsfällen! Hätten die Behörden in Hubei den Ausnahmezustand am 22. Januar statt am 23. Januar erklärt, hätten sie die Zahl der Fälle womöglich um ganze 20.000 reduziert.

Und denken Sie daran, dass dies nur Fälle sind. Die Sterblichkeit wäre viel höher, denn es gäbe nicht nur direkt 40% mehr Todesfälle. Es gäbe auch einen viel stärkeren Zusammenbruch des Gesundheitssystems, was zu einer bis zu 10-mal höheren Sterblichkeitsrate führen würde, wie wir zuvor gesehen haben. Ein eintägiger Unterschied bei den Maßnahmen zur sozialen Isolierung kann also dazu führen, dass die Zahl der Todesfälle in Ihrer Region explodiert, indem mehr Fälle und eine höhere Sterblichkeitsrate vervielfacht werden.

Dies ist eine exponentielle Bedrohung. Jeder Tag zählt. Wenn Sie eine Entscheidung um einen einzigen Tag verzögern, tragen Sie vielleicht nicht zu ein paar Fällen bei. Wahrscheinlich gibt es in Ihrer Gegend bereits Hunderte oder Tausende von Fällen. Jeden Tag, an dem es keine soziale Isolierung gibt, wachsen diese Fälle explosionsartig an.

Zur Lage in Thüringen

10.02.2020 16:54 Lutz Donnerhacke Tags: Politik 2

Hier mal eine Übersicht wie es zur Situation in Thüringen kam, wo wir gerade sind und wie es weiter gehen kann, wenn man sich an die Verfassung hält.

Thüringenwahl - Copy

Gestrichelte Linien sind nicht mehr möglich. Richtig dicke Linien sind die, die sich ereignet haben. Dünnere Linien sind noch offene Möglichkeiten.

Blaue Kästen sind Ereignisse oder Zwischenstände. Rot Kästen sind Abstimmungen. Grüne Kästen sind Endzustände.

Die Fahne gibt an, wo wir gerade sind.  Ich versuche das aktuell zu halten.

Der Weg zu Neuwahlen

Zu Neuwahlen gelangt man zunächst über eine Selbstauflösung des Parlamentes. Die FDP hat das ins Gespräch gebracht, ist aber nicht antragsberechtig. Darüberhinaus gibt es Widerstände gegen eine Neuwahl zumindest aus den Fraktionen der AfD und CDU. Es dürfen nicht mehr als 29 Stimmen für die Auflösung fehlen, die AfD hat 22, die CDU 21 Sitze.

Problematisch an diesem Weg ist, dass bis zur Neuwahl des Ministerpräsidenten durch den dann neu gewählten und neu konstituierten Landtag das Land ohne funktionierende Landesregierung bleibt. Es gelten dabei folgene Fristen:

  • Art 50(2) gibt 30 Tage zwischen Antrag und Abstimmung über die Selbstauflösung vor.
  • Art 50(2) begrenzt die Zeit bis zur Neuwahl auf 70 Tage.
  • Dann kommen noch bis zu 30 Tage bis zur Konstituierung nach Art 50(3) hinzu.
  • Weitere Fristen bis zur Wahl des Ministerpräsidenten nach Art70(2) legt die Verfassung nicht fest.

Mit viel Wohlwollen kann man also von ca. einem halben Jahr bis zur Wahl eines neuen Ministerpräsidenten durch einen neuen Landtag aus gehen.

Ein anderer Weg geht über die Wahl eines neuen Ministerpräsidenten (z,B. mit einfacher Mehrheit im dritten Wahlgang).

Dieser nimmt die Wahl an und stellt sofort die Vertrauensfrage, die er (mangels absoluter Mehrheit) verliert. In den folgenden drei Wochen gelingt es dann nicht, einen neuen Ministerpräsidenten zu wählen. Die Nichtwahl ist schon kniffliger, da hier entweder das Landtagspäsidium bewusst keine Wahl einleitet, oder jeder gewählte Kandidat die Annahme der Wahl verweigert.

So ist der Weg über einen temporären Ministerpräsidenten zur Neuwahl ein unwürdiges politisches Schauspiel.

Der Weg zu einer Regierung

Was derzeit gar nicht mehr geht, ist, dass Herr Kemmerich eine Regierung bildet. Er hat das Heft des Handelns aus der Hand gegeben, es geht nur mit Selbstauflösung oder der Wahl eines neuen MP weiter. Solange sich aber an der aktuellen Situation nichts ändert, bleibt er geschäftsführend im Amt.

Linke-SPD-Grün

Stellt sich Bodo Ramelow wieder zur Wahl als Ministerpräsident und gewinnt er diese Wahl, so kann er die geplante Minderheitsregierung bilden. Dabei gibt es jedoch Schwierigkeiten.

Die Wahl von Herrn Ramelow darf nicht von den Stimmen der AfD abhängen. Diese hatte angekündigt, ihn zu wählen, damit er dann wegen des Makels die Wahl nicht annehmen dürfe. Es ist also zwingend notwendig, dass in den ersten Wahlgängen eine Mehrheit von mindestens 68 = 46 (Mehrheit) +22 (AfD) bekommt, so nicht sicher ist, dass auch Stimmen von der CDU oder FDP kommen. In Verhandlungen wurde im Rahmen des "Stabilitätspaktes" ausgemacht, dass die fehlenden Stimmen von der CDU kommen sollen.

Auch nach der Wahl muss die Minderheitsregierung sich regelmäßig um die fehlenden vier Stimmen zur Mehrheit bemühen. Gegen ein vereintes oppositionelles Parlament kann eine Minderheitsregierung niemals an. So habt bereits in dieser Wahlperiode die FDP Gesetzesvorschläge zur Abschaffung von Gesetzen der vorigen Regierung eingebracht. Sei es zur Windkraft im Thüringer Wald oder zum Wahlrecht. CDU und AfD äußerten sich zu diesen Vorschlägen positiv, könnten also die Minderheitsregierung zwingen, gegen ihre eigenen Überzeugen zu handeln.

In Anbetracht der Vorgänge der letzten Monate ist eigentlich nicht davon aus zu gehen, dass diese Minderheitsregierung mit Wohlwollen rechnen kann. Da die politische Situation innerhalb der CDU zu unangenehm wurde, besteht trotz aller Querelen hier die Chance einer Tolerierung durch die CDU.

Linke-SPD-Grün-FDP

Diese Koalition hätte eine knappe Mehrheit. Sie wurde direkt nach der Wahl angesprochen, aber umgehend von der FDP zurück gewiesen. Nach den jüngsten Ereignissen um den FDP-Landeschef Kemmerich ist nicht zu erwarten, dass es zu diese Konstellation kommt.

Linke-CDU

Diese Koalition hätte mit 50 Sitzen eine Mehrheit. Sie wurde direkt nach der Wahl ausgelotet, aber sofort mit Verweis auf den Unvereinbarkeitsbeschluss seitens der Bundes-CDU unterbunden. Um zu einer tragfähigen Regierung zu kommen, müsste sich nun die Landes-CDU programmatisch vom Bund lösen. Damit ist aber nicht zu rechnen.

CDU-SPD-Grüne-FDP

Dieser Minderheitsregierung fehlen ganze sieben Stimmen zur Mehrheit. Obwohl die CDU-Fraktion diese Konstellation bevorzugte, waren weder SPD noch Grüne dazu bereit.

AfD-CDU-FDP

Diese Parteiengruppe hätte eine knappe Mehrheit und kann, wenn sie will, auch gemeinsam abstimmen, wie sich bei der Wahl zum Ministerpräsidenten Kemmerich gezeigt hat. Wie schon erwähnt, gibt es auch inhaltliche Gemeinsamkeiten, die vor allem von der FDP mit Gesetzesinitativen ausgelotet werden.

Obwohl es gesellschaftlich inakzetabel ist, eine solche Koalition zu bilden, könnte sich aus rein pragmatischen Gründen trotzdem eine Zusammenarbeit ergeben. Der geschäftsführende Ministerpräsident Kemmerich ist von der FDP und hat die Vorgaben des Parlaments umzusetzen. Die FDP Fraktion hat schon mehrere Gesetzesvorhaben in den aktuellen Landtag eingebracht, die mit den Stimmen der drei Parteien angenommen werden könnten.

Der Modus operandi dieses Konstrukts wäre die staatspolitische Verantwortung aller Beteiligten, ohne formale, öffentliche Absprachen zu treffen. Die Landes-CDU hätte die Chance sich personell aus der Landesregierung rauszuhalten und trotzdem mitzuregieren. Die FDP kann sich als Schadensbegrenzer profilieren und die AfD freut sich.

All diese Spekulationen haben sich mit der kommenden Neuwahl des MP am 4. März zerschlagen. Die FDP und Herr Kemmerich haben den Gestaltungsspielraum durch komplette Inaktivität verstreichen lassen.

Neuwahl mit Übergangs-MP

Am 17.2. haben die Parteien zusammen gesessen und es sah danach aus, mit der ehemaligen Ministerpräsidentin Christine Lieberknecht (CDU) als Übergangs-MP den Weg zur Neuwahl gehen zu wollen. Diese Geste seitens der Linken hinterlässt einen doppelten Eindruck: Zum Einen ist Ramelow damit aus der Schußlinie, was den Wahlkampf erleichtert. Zum Anderen wird es nun für die bisher blockierende CDU praktisch unmöglich, sich dem Konsens zu verweigern. Darüberhinaus ist es eine Ohrfeige für Mohring.

Dieser Zwistes hatte Auswirkungen auf die Bundes-CDU: Den Rücktritt von Frau Kramp-Karrenbauer incl. einer Richtungsdebatte in der CDU selbst. Herr Mohring ist am 2.3. als Fraktionschef durch Herrn Voigt abgelöst worden.

Um die "Stabilitätsvereinbarung" mit der CDU zu hintertreiben, gibt die Ansage aus AfD-Kreisen, bei der Wahl für Herrn Ramelow zu stimmen und zwar mit vier Stimmen weniger als die Fraktion stark ist. Die Idee ist dann zu behaupten, man hätte komplett für Herrn Ramelow gestimmt, um die vier Stimmen aus der CDU unsichtbar zu machen. Damit wäre Herr Ramelow gezwungen, die Wahl abzulehnen.

Als neuer Paukenschlag tritt seit dem 2.3, auch Herr Höcke von der AfD direkt zur Wahl des MP am Mittwoch an. Dies hat mehrere Konsequenzen:

  • Sollte Herr Ramelow nicht im ersten Wahlgang mit absoluter Mehrheit gewählt werden, so kann er nicht auf die folgenden Wahlgänge verzichten, um das Verfahren zum Abbruch zu bringen. Würde er das tun, wäre Herr Höcke der neue MP.
  • Die AfD führt als Argumentation neu ein, dass die CDU und FDP die Stimmen für Herrn Ramelow verweigert haben und will sie nun dazu zwingen, dies auch einzuhalten, d.h. das "Stabilitätsabkommen" zu brechen. Wie auch immer die Abgeordneten der CDU hier abstimmen, sie können nur verlieren.

FDP und CDU wollen der Situation dadurch entgehen, dass sie bei der Wahl den Saal verlassen (siehe auch die Klogangaffäre). Gesichtswahrend bei der CDU kommt ein Coronaverdacht hinzu, der sich jedoch als unbegründet erwies.

Ein aktuelles Gerücht spricht davon, dass die AfD mit 18 Stimmen für ihren Kandidaten Höcke stimmen wird und mit vier Stimmen für Ramelow. Würde das so passieren, dann:

  • stimmt die CDU und FDP im ersten Wahlgang dokumentierbar (abwesend) mit Enthaltung, so wäre Ramelow mit den Stimmen der AfD gewählt.
  • stimmen mindestens vier Abgeordnete der CDU für Ramelow, wird die AFD die CDU gebrochener Wahlversprechen bezichtigen.
  • stimmen vier Abgeordnete der CDU für Höcke, um den angekündigten(!) Coup auszuhebeln, so müssen sie fürchten, dass die AfD doch komplett für den eigenen Kandidaten zu stimmen, und dann der CDU die Mehrstimmen (22+x) für Herrn Höcke vorhalten zu können.

Sollte es zu der Situation kommen, dass Herr Ramelow mit den AfD-Stimmen gewählt würde, so nehme ich an, dass er die Wahl annimmt, um sofort die Verauensfrage zu stellen, was zu sofortigen Neuwahlen führt. Es sei denn die AfD, CDU und FDP stimmen dann für Herrn Ramelow, um die chaotische Situation aufrecht zu erhalten.

Direkt vor der Wahl hat Herr Ramelow bekannt gegeben, dass er für alle drei Wahlgänge zur Verfügung steht und die CDU und FDP um konsequente Enthaltung bittet. Er hat damit die Chance im dritten Wahl mit der einfachen Stimmenmehrheit gewählt zu werden. Das ist ein generöses Angebot an die CDU, ihre innere Zerissenheit gesichtswahrend verstecken zu dürfen. Es ist aber auch gleichzeitig die Aufkündigung des "Stabilitätspakts", der eine Neuwahl im kommenden Jahr vorsieht.

Auch in desem Fall bleibt offen, wie Herr Ramelow mit der Situation umgehen will, in den ersten Wahlgängen eine absolute Mehrheit zu bekommen. Dies kann passieren, wenn die AfD ihre Ankündigen wahrmacht, mit vier Stimmen für Ramelow zu stimmen.

Ramelow ist gewählt

Dritter Wahlgang

abgegebene Stimmen: 85
Ja-Stimmen für Ramelow: 42
Nein-Stimmen: 23
Enthaltungen: 20

Ramelow nimmt die Wahl an.

Wie man mit tcpdump auf doppelt getagged Pakete prüft

20.02.2020 16:03 Lutz Donnerhacke Tags: BSD 0

Für einen bpf Filter benötige ich die Möglichkeit mehrfach mit VLANs getaggte Pakete zu erkennen und in deren Inhalt nach protokollspezifischen Werten zu durchsuchen. Natürlich möchte ich die binären Regeln nicht komplett von Hand schreiben.

Der einfache Ansatz ist sich das Regelwerk durch tcpdump selbst erzeugen zu lassen.

# tcpdump -s 0 -p -d 'ip and udp and src port 12345'
(000) ldh      [12]
(001) jeq      #0x800           jt 2    jf 10
(002) ldb      [23]
(003) jeq      #0x11            jt 4    jf 10
(004) ldh      [20]
(005) jset     #0x1fff          jt 10   jf 6
(006) ldxb     4*([14]&0xf)
(007) ldh      [x + 14]
(008) jeq      #0x3039          jt 9    jf 10
(009) ret      #262144
(010) ret      #0

Dieser Code macht folgendes:

  • Im Ethernet-Header (an Position 12) wird der Ethertype ermittelt.
  • Ist der IPv4 (0800), so geht's bei 2 weiter, anderenfalls Abbruch zu 10.
  • Im IP-Header (an Position 23 aus Sicht des kompletten Frames) steht die Protokollnummer.
  • Ist diese UDP (17 = 0x11), geht's weiter.
  • Nach dem variabel langen IP-Header (Länge in 32bit Worten an Position 14) folgt der UDP Header.
  • Dort steht an (der variablen) Position die Portnummer.
  • Entspricht die dem gewünschten Wert, gibt's einen positiven Rückgabewert (der i.d.R. die Länge der zu exahierenden Daten entspricht).
  • Anderenfalls gibt es den Fehlercode 0 zurück (oder auch 0 verwertbare Bytes).

Oder direkt binär, so wie ich es brauche:

# tcpdump -s 0 -p -ddd 'ip and udp and src port 12345'
11
40 0 0 12
21 0 8 2048
48 0 0 23
21 0 6 17
40 0 0 20
69 4 0 8191
177 0 0 14
72 0 0 14
21 0 1 12345
6 0 0 262144
6 0 0 0 

Dieser BPF Code nimmt an, dass das Paket direkt mit IP beginnt, es gibt keine VLAN Frames (die jeweils 4 Byte kosten).

Ich lönnte jetzt also an allen Stellen, wo auf eine Position im Paket Bezug genommen wird, einen entsprechenden Offset manuell hinzufügen. Dieses manuelle Nachpatchen ist jedoch nicht sonderlich wartungsfreundlich.

Nach einigem Suchen fand ich den undokumentierten Befehl vlan. Wenn man den vor den Ausdruck stellt, passt das tcpdump den BPF-Filter passend an.

# root@a10nsp:~ # tcpdump -s 0 -p -d 'vlan 123 and ip and udp and src port 12345'
(000) ldh      [12]
(001) jeq      #0x8100          jt 4    jf 2
(002) jeq      #0x88a8          jt 4    jf 3
(003) jeq      #0x9100          jt 4    jf 17
(004) ldh      [14]
(005) and      #0xfff
(006) jeq      #0x7b            jt 7    jf 17
(007) ldh      [16]
(008) jeq      #0x800           jt 9    jf 17
(009) ldb      [27]
(010) jeq      #0x11            jt 11   jf 17
(011) ldh      [24]
(012) jset     #0x1fff          jt 17   jf 13
(013) ldxb     4*([18]&0xf)
(014) ldh      [x + 18]
(015) jeq      #0x3039          jt 16   jf 17
(016) ret      #262144
(017) ret      #0 

Man sieht sehr schön, dass die Offsets für die Paketanalyse schön um vier Bytes verschoben wurden.

Gehen auch zwei VLANs?

# tcpdump -s 0 -p -d 'vlan 123 and vlan 456 and ip and udp and src port 12345'
(000) ldh      [12]
(001) jeq      #0x8100          jt 4    jf 2
(002) jeq      #0x88a8          jt 4    jf 3
(003) jeq      #0x9100          jt 4    jf 24
(004) ldh      [14]
(005) and      #0xfff
(006) jeq      #0x7b            jt 7    jf 24
(007) ldh      [16]
(008) jeq      #0x8100          jt 11   jf 9
(009) jeq      #0x88a8          jt 11   jf 10
(010) jeq      #0x9100          jt 11   jf 24
(011) ldh      [18]
(012) and      #0xfff
(013) jeq      #0x1c8           jt 14   jf 24
(014) ldh      [20]
(015) jeq      #0x800           jt 16   jf 24
(016) ldb      [31]
(017) jeq      #0x11            jt 18   jf 24
(018) ldh      [28]
(019) jset     #0x1fff          jt 24   jf 20
(020) ldxb     4*([22]&0xf)
(021) ldh      [x + 22]
(022) jeq      #0x3039          jt 23   jf 24
(023) ret      #262144
(024) ret      #0

Hervorragend: Nun werden doppelt getaggte Pakete ausgewertet. Allerdings muss man die VLAN Tags exakt kennen.

Ich möchte aber nur double tagged VLANs mit variablen VLAN-Nummern bearbeiten, kenne diese also nicht. Wie kann man das beschreiben? Vielleicht als Negation? Nicht VLAN 123? Gibt es eine VLAN Nummer die sicher nicht auftreten kann?

ja, die Null. Eine VLAN Header mit der VLAN-ID 0 ist definiert als untagged, gestattet aber QoS Parameter. Untagged will ich aber nicht, das ist also okay.

# tcpdump -s 0 -p -d 'not vlan 0 and not vlan 0 and ip and udp and src port 12345'
(000) ldh      [12]
(001) jeq      #0x8100          jt 4    jf 2
(002) jeq      #0x88a8          jt 4    jf 3
(003) jeq      #0x9100          jt 4    jf 6
(004) ldh      [14]
(005) jset     #0xfff           jt 6    jf 22
(006) ldh      [16]
(007) jeq      #0x8100          jt 10   jf 8
(008) jeq      #0x88a8          jt 10   jf 9
(009) jeq      #0x9100          jt 10   jf 12
(010) ldh      [18]
(011) jset     #0xfff           jt 12   jf 22
(012) ldh      [20]
(013) jeq      #0x800           jt 14   jf 22
(014) ldb      [31]
(015) jeq      #0x11            jt 16   jf 22
(016) ldh      [28]
(017) jset     #0x1fff          jt 22   jf 18
(018) ldxb     4*([22]&0xf)
(019) ldh      [x + 22]
(020) jeq      #0x3039          jt 21   jf 22
(021) ret      #262144
(022) ret      #0

Und tut!

Weiter » 1 2 3 4 5 6