<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>c0t0d0s0.org</title>
<description>A blog about Life, Solaris, Cycling and all the rest.</description>
<link>https://www.c0t0d0s0.org/</link>
<atom:link href="https://www.c0t0d0s0.org/c0t0d0s0.xml" rel="self" type="application/rss+xml"/>
<language>de</language>
<lastBuildDate>Fri, 28 Aug 2026 03:20:04 +0000</lastBuildDate>
<image>
  <url>https://www.c0t0d0s0.org/favicon.svg</url>
  <title>c0t0d0s0.org</title>
  <link>https://www.c0t0d0s0.org/</link>
</image>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
<item>
<title>Redundantes Internet</title>
<description>Erste Erfahrungen mit dem Ubiquiti Unifi 5G Max</description>
<content:encoded>&lt;div class=&quot;lang-switch&quot;&gt;
&lt;a class=&quot;lang-switch__link&quot; hreflang=&quot;en&quot; href=&quot;https://www.c0t0d0s0.org/blog/en_unifi5gmax.html&quot;&gt;in English 🇬🇧&lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&quot;vorgeschichte&quot;&gt;Vorgeschichte&lt;/h2&gt;

&lt;p&gt;Fällt bei mir das Internet aus, bin ich im Grunde genommen von jetzt auf gleich so gut wie nicht mehr arbeitsfähig. Aufgeschmissen an so mancher Stelle: Videokonferenzen, Tools, Mail, Collaboration. Nüscht geht mehr. Die ohne Internet beendbaren Aufgaben sind in der Regel dann schnell abgearbeitet. Ich kann natürlich mein Notebook an ein Telephon koppeln und damit erst mal weiterarbeiten, aber dann kann ich auf keine weiteren Ressourcen zugreifen, die in meinem Netzwerk noch so rumstehen. Und da geht es um so simple Dinge wie meinen Drucker. Ich habe gemerkt, dass nichts die Usability von Papier und Bleistift entscheidend verbessert, wenn es um den Abgleich von Listen geht.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Die ganzen VMs mit Testbeds und Spielwiesen. Mein Fileserver mit 20 Jahren gesammelten Papern und dem gesammelten Flotsam und Jetsam&lt;sup id=&quot;fnref:10&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:10&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; des professionellen Lebens, der nicht den Regeln der Dokumente meines Arbeitgebers unterliegt. Es gibt so viele Kleinigkeiten, die ich den Tag über nutze, die darauf angewiesen sind, dass ich meine Arbeitsgeräte nicht aus dem Heimnetz herauslöse und beispielsweise an den “Personal Hotspot” meines Telephons hänge.&lt;/p&gt;

&lt;p&gt;Und eigentlich möchte ich auch nichts tun. Ich will, dass ich einfach weiter ins Netz komme. Ich will, dass auf eine andere Leitung umgeschaltet wird, sobald mir meine Hauptanbindung abknickt, aber auch automatisch wieder zurückgeschaltet wird, wenn der Knick in der Leitung wieder raus ist. Ich will eigentlich das haben, was viele meiner Kunden auch haben. Redundanz. Mir geht es nicht darum, dass das Ganze unterbrechungsfrei funktioniert, es ist schon okay, wenn ich dafür eine Session neu starten muss. Aber das sollte es dann auch gewesen sein.&lt;/p&gt;

&lt;p&gt;Meine Anforderung ist es ebenfalls nicht, dass ich von aussen auf mein Netzwerk zugreifen können muss. Wenn ich unterwegs bin, reise ich mit kleinem Gepäck. Den Zugriff sicherzustellen, wäre bei Backupverbindungen über Mobilfunk schwer, da dem oft Carrier Grade NAT im Weg steht.&lt;/p&gt;

&lt;h2 id=&quot;bisherige-lösung&quot;&gt;Bisherige Lösung&lt;/h2&gt;

&lt;p&gt;Meine Lösung war bisher, dass es schlicht zwei unabhängige Festnetz-Internetprovider im Haus gab. Ich hatte einen Anschluss via VDSL und einen zweiten über TV-Kabel, die tatsächlich sogar von den Vorbesitzern meines Hauses an unterschiedlichen Seiten des Hauses in dieses geführt wurden.&lt;/p&gt;

&lt;p&gt;Und genau das hat mir auch schon mal den Allerwertesten gerettet. Ich benutze in Vorträgen gerne das Beispiel des Baggers, der eine wichtige Leitung durchtrennt. Ich hielt das immer für einen Mythos. Ich hatte Geschichten von diesem sagenumwobenen Bagger gehört. Aber Opfer eines solchen war ich nie. Das ist dem Kantholz auf der Autobahn nicht unähnlich, vor dem ich schon so oft im Radio gewarnt wurde, es aber nie gesehen habe.&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Aber: Ich hatte ihn hier tatsächlich, jenen das Internet kappenden Bagger, als hier der Fahrradweg vor meiner Tür erneuert wurde. An einem Tag, an dem ich einen Vortrag via Zoom halten musste. Es hat doch einige Zeit gedauert, bis das repariert war. Ein paar Tage später fand ich beim Vorbeilaufen mit dem Hund eine Stelle am offenliegenden Kabel, die verdächtig nach Reparatur aussah. Durch die zweite Leitung wurde das zu einem relativ folgenlosen Ereignis.&lt;/p&gt;

&lt;h2 id=&quot;zukünftig&quot;&gt;Zukünftig&lt;/h2&gt;

&lt;p&gt;Jetzt ändert sich an meiner Internetanbindung demnächst einiges. Ich werde verglast. Ich bekomme Glasfaser von der Telekom. Dabei habe ich 1 GBit/s gewählt. Ich habe mich gleichzeitig aus oben beschriebenen Anforderungen auch für einen Anschluss mit erhöhtem Servicelevel entschieden. Aber 8 Stunden Ausfall sind halt eben 8 Stunden. Das ist ein kompletter Arbeitstag, wenn irgendjemand, voll Freude und durch Kaffee und Frühstücksmettbrötchen gestärkt, um 8 Uhr morgens den Spaten nimmt und das Glasfaserkabel killt. Denn was ich bisher gesehen habe, als man mir das Kabel vor die Tür gebaut hat: Tief liegt es nicht.&lt;/p&gt;

&lt;p&gt;Weil der neue Glasfaser-Anschluss an sich schon teuer genug ist, wollte ich nun nicht mehr gleichzeitig einen zweiten festen Internet-Anschluss zusätzlich im Haus haben. Also entschied ich mich für eine Backupleitung über 5G – eine “EhDa”-Vertragssituation nutzend.&lt;/p&gt;

&lt;h2 id=&quot;ubiquiti-unifi-5g-max&quot;&gt;Ubiquiti Unifi 5G Max&lt;/h2&gt;

&lt;p&gt;Wie sieht das nun technisch bei mir aus? Ich habe mit den Ubiquiti Unifi 5G Max gekauft. Sozusagen ein durch Unifi managebarer Router mit einem 5G Modem.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.c0t0d0s0.org/images/unifi5g.jpeg&quot; alt=&quot;Unifi 5G&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Wie ihr vielleicht schon in meinen Blogartikeln gelesen habt, habe ich mittlerweile enorme Freude an Dingen, die einfach funktionieren. Ohne dass ich viel dafür tun muss. Mein Netzwerk ist daher komplett auf Basis von Ubiquiti-Komponenten aufgebaut. Deshalb habe ich mich auch beim 5G für ein Gerät der Unifi-Reihe entschieden. Denn mittlerweile hält sich meine Lust, stundenlang an etwas herumzutinkern&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, was es schon fertig gibt, halt arg in Grenzen.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;In der momentanen Umgebung läuft das Ganze über ein Unifi Cloud Gateway. Im Rahmen der Umstellung auf Glasfaser wird das allerdings durch ein Unifi Cloud Gateway Fiber ersetzt. Ich habe dieses primär gewählt, weil es 10 GBit/s unterstützt. Damit ist dann der ganze Backbone in meinem Hause auf 10 GBit/s. Darüber werde ich aber noch in einem eigenen Artikel berichten.&lt;/p&gt;

&lt;h2 id=&quot;erkenntnisse&quot;&gt;Erkenntnisse&lt;/h2&gt;

&lt;p&gt;Vielleicht an dieser Stelle einige meiner Erkenntnisse aus der Inbetriebsetzung:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ich verwende die Indoor-Variante. Es gibt eine aussen verbaubare Version, die kein Display hat und deren Antennen wohl eine deutlich höhere Richtwirkung haben. Mir erschien das auf Basis der sehr nahegelegenen Basisstation nicht notwendig.&lt;/li&gt;
  &lt;li&gt;Das Gerät braucht Strom. So weit, so offensichtlich. Es ist aber kein Netzteil dabei. Es hat auch keinen Netzteilanschluss. Eine USB-C-Schnittstelle habe ich auch nicht gesehen. Es erhält seinen Strom via Power-over-Ethernet. Entweder man hat einen entsprechenden Switch (habe ich) oder man braucht noch zusätzlich einen PoE-Injektor. Wer beides nicht hat, guckt erst mal blöd aus der Wäsche, bis der Lieferant des geringsten Misstrauens eins von beiden herangeschafft hat.&lt;sup id=&quot;fnref:13&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:13&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
  &lt;li&gt;Die Inbetriebnahme ging sehr schnell. Das Gerät wurde rasch zur Adoption angeboten und war danach Teil des zentralen Managements. Das Update auf die aktuellste Version dauert dann etwas. Sobald man die eSIM aktiviert hat, passiert dann das Meiste automatisch. Es funktioniert einfach. So wollte ich das haben. Es bindet sich von selbst als zusätzlicher Internet-Zugang ein. Auch die gesamte Konfiguration, damit später eine automatische Umschaltung stattfindet, passiert automatisch. Das Verfahren schaltet hier ja nicht von einem Port des Routers auf einen anderen um. Der Unifi 5G Max ist eine eigenständige Box irgendwo im Netzwerk. Die ganze Inbetriebnahme kam daher schon sehr meinem Ziel entgegen, nicht frickeln zu wollen. Dass ich dennoch debuggen musste, lag an einigen Altlasten in meiner Konfiguration.&lt;/li&gt;
  &lt;li&gt;Apropos eSIM: Will man eine eSIM via QR-Code benutzen, braucht man die Unifi Mobile App. Damit kann man die eSIM dann recht einfach freischalten. Das Gerät unterstützt zwei physikalische SIMs (eine physikalische SIM, wenn man die eSIM-Funktionalität verwendet). Diese Funktionalität werde ich auf Dauer auch wohl nutzen. Wenn der Glasfaseranschluss fertig ist, läuft mein Internet über Telekom. Im Unifi 5G Max steckt momentan eine Telekom-SIM als eSIM. Ich werde wohl für den absoluten Notfall da eine Vodafone-Prepaid-Karte reinstecken, damit ein grossflächiger Telekom-Ausfall mich nicht so betrifft. Das Ganze würde dann als dritte WAN-Anbindung eingebunden werden.&lt;/li&gt;
  &lt;li&gt;Man kann ebenfalls pro Netzwerk angeben, ob es die HA-Funktionalität fürs Internet nutzen soll. Ich habe beispielsweise das Appliances-Netzwerk davon ausgenommen. Es soll Notebooks und Telephone weiterhin mit Internet versorgen, nicht als kompletter Internetanschluss für alles. Es interessiert mich in diesem Fall nicht, ob die Fernseher und das ganze Kleingerätegeraffel ins Netz kommen.&lt;/li&gt;
  &lt;li&gt;Bei dem gemessenen Durchsatz (dazu später mehr) wäre es tatsächlich möglich, alles über das Backup laufen zu lassen. Aber das ist nicht das Ziel der Lösung.&lt;/li&gt;
  &lt;li&gt;Ich habe da jetzt eine Art Modell “Rote Steckdosen/Weisse Steckdosen” in Benutzung, das ich schon öfters in Unternehmen gesehen habe. Rote Steckdosen waren USV-abgesichert, weisse nicht. Ich lasse momentan nur bestimmte Netzwerke automatisch umschalten. Der Rest steht dann halt für mehrere Stunden im Dunklen, bis die Entstörung erfolgt ist. Momentan gibt es eh keine neuen Folgen von The Pitt. Ich komm schon einen Tag ohne HBO Max aus.&lt;/li&gt;
  &lt;li&gt;Für diese Aufteilung in rote und weisse Steckdosen gibt es einen kommerziellen und einen technischen Grund. Der kommerzielle Grund: Mein momentaner Mobilfunktarif bei der Telekom ist hinsichtlich der genutzten Datenmenge unlimitiert. Ich könnte also auch fortgesetzt sämtlichen Traffic über diese Leitung führen. Ich schrieb aber davon, dass ich mir vermutlich zur Umgehung des kompletten Telekomnetzes noch eine Vodafone-SIM besorgen werde, auf die ich dann im Ausfall noch zusätzliches Datenvolumen buchen muss. Da habe ich dann nicht den Luxus, kein Limit zu haben. Der technische Grund ist auch relativ einfach: Wenn ich bandbreitenbeschränkt bin (und das bin ich beim Umschalten auf 5G im Vergleich zu meiner Leitung), möchte ich diese Bandbreite nur durch notwendige Systeme belegt sehen. Alle Appliances nicht umzuschalten wirft da schon mal einiges an Last ab.&lt;/li&gt;
  &lt;li&gt;Kommen wir zum Restdebuggen: Wenn ihr Policy-Routing aktiviert habt, dann schaltet “Kill Switch” aus, wenn ihr aus Sicherheitsgründen diesen nicht braucht. Via Policy Routing kann man Traffic in eine vom Default abweichende Richtung zwingen. Beispielsweise das ganze Netz “blahfasel_us” durch einen VPN-Provider leiten, den man so konfiguriert hat, dass der Endpunkt in den USA steht. Die Option “Kill Switch” sorgt jetzt dafür, dass für den Fall, dass das VPN nicht verfügbar ist, nicht alles unverschlüsselt den normalen Weg raus geht, weil automatisch umgeschaltet worden ist. Ich habe die Policies inzwischen komplett gelöscht, da sie ein Überbleibsel dessen waren, wie ich die zwei Internetanschlüsse bisher integriert hatte.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;in-der-praxis&quot;&gt;In der Praxis&lt;/h2&gt;

&lt;p&gt;Butter bei die Fische. Ich messe 150 MBit/s im Downlink. Im Uplink sind es 105 MBit/s. Die 105 MBit/s finde ich erstaunlich hoch, ich bin hier eine deutliche Asymmetrie gewohnt. Messpunkt ist hier der 5G Max selbst. Die Ping-Zeit ist etwa 30 ms. Für meinen Anwendungsfall ist das mehr als ausreichend.&lt;/p&gt;

&lt;p&gt;Die Geschwindigkeit ist hier eindeutig durch das Mobilfunknetz limitiert. Wenn ich die Daten der nächstgelegenen Basisstation richtig interpretiere, ist das schon so etwa das, was man von der Verbindung erwarten kann.&lt;/p&gt;

&lt;p&gt;Wie lange dauert das Umschalten? Ich möchte das anhand eines Pings zeigen. Testcase war hier die Abschaltung des Kabelmodems.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;64 bytes from 159.195.145.249: icmp_seq=24 ttl=55 time=24.725 ms
Request timeout for icmp_seq 25
64 bytes from 159.195.145.249: icmp_seq=26 ttl=51 time=27.036 ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Anhand der veränderten TTL sieht man übrigens auch sehr einfach, dass die Datenpakete jetzt einen anderen Weg gehen. Nach Wiederherstellung des Links über das Kabelmodem steht dort wieder der alte Wert:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;64 bytes from 159.195.145.249: icmp_seq=0 ttl=55 time=30.953 ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Die Antwort ist also: Recht schnell. Man wird das sicherlich in den Applikationen merken, da jetzt natürlich sämtlicher Traffic von einer anderen IP kommt. Wie die Applikationen damit zurechtkommen, ist von deren Design abhängig.&lt;/p&gt;

&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;/h2&gt;

&lt;p&gt;Die Verfügbarkeitssicherung mit dem 5G Max in der Unifi-Welt funktionierte schnell und problemlos. Die Geschwindigkeit liegt am oberen Ende dessen, was mir das Mobilfunknetz zur Verfügung stellt. Man hat natürlich die Einstandskosten, um eine Komponente in dieser Welt zu erwerben. Ich habe für meinen 5G Max etwa 420 Euro bezahlt.&lt;sup id=&quot;fnref:12&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:12&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; Die Kosten für die Zusatzleitung sind stark von eurer Mobilfunkvertragssituation abhängig. Ich habe sie recht preisgünstig als Zusatzkarte bekommen, die sich die Eigenschaft “unlimitiert” mit der Hauptkarte teilt. Bei euch mag das anders aussehen. Aber es bleibt ja immer die Möglichkeit, eine Prepaid-Karte zu verwenden und dann ggf. eine Dayflat draufzubuchen, sodass erst mal dort keine Bereitstellungskosten entstehen.&lt;/p&gt;

&lt;h2 id=&quot;verbesserungsvorschlag&quot;&gt;Verbesserungsvorschlag&lt;/h2&gt;

&lt;p&gt;Bei all dem habe ich natürlich auch einen Verbesserungsvorschlag für das Produkt. Der 5G Max läuft ständig für einen Anwendungsfall, der möglicherweise in der gesamten Lebenszeit des Produktes nie auftreten wird. Trotzdem nuckelt das Gerät dauerhaft an meinem Strom. 5,09 W wird vom Management für den Port angezeigt. Das sind etwa 45 kWh im Jahr, also je nach Tarif 15 bis 18 Euro. Für sich genommen nicht viel. Es ist eher die grundsätzliche Frage, ob ein Gerät durchlaufen muss, das man vielleicht nie braucht.&lt;/p&gt;

&lt;p&gt;Nun wird das Gerät über einen Switch mit Strom versorgt. Im zentralen Management kann ich auf diesem Port den Strom ein- und ausschalten. Ich fände eine Option grossartig, die es mir erlauben würde, auf Kosten einer geringeren Reaktionsgeschwindigkeit Strom zu sparen. Nämlich dadurch, dass erst dann, wenn die primäre Internetanbindung ausfällt, der Strom auf dem Port eingeschaltet wird, an dem der 5G Max hängt. Dieser muss dann zwar auch erst booten, verbraucht aber auch nur für diese Zeit Strom. Ist das primäre Internet wieder eine Stunde stabil, kann man dann den Strom auf dem Port auch wieder ausschalten.&lt;/p&gt;

&lt;p&gt;Natürlich geht dadurch eine wichtige Information verloren: Schalte ich das Gerät aus, weiss ich nicht, ob es funktionieren wird, wenn ich es wieder einschalte – gegebenenfalls erst nach vielen Monaten, Jahren gar. Dafür muss nur die SIM wegen Untätigkeit vom Provider abgeschaltet worden sein. Auch will man, dass das Gerät regelmässig auf die neuste Softwareversion gebracht wird. Zu diesem Zweck wäre es nützlich, das Gerät einmal in der Woche hochzufahren, nach Updates zu schauen und zu testen, ob die Verbindung noch funktioniert.&lt;/p&gt;

&lt;p&gt;Ich überlege gerade, ob sich sowas auch selbst über eine &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; implementieren liesse. Da könnte man sich dann auch wildere Features einfallen lassen: Beispielsweise tagsüber sofort verfügbares Backup, in der Nacht muss erst der Strom eingeschaltet werden. Oder das Hochfahren des Ports, sobald bestimmte Clients im Netz aktiv werden. Ich werde über den Fortgang der Idee berichten. Und ja, ich weiss: Da ist wieder das Frickeln an einem Problem. Aber die Arbeit mit der Unifi-&lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; ist wahrscheinlich ein rechtfertigender Erkenntnisgewinn.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Ja, ich weiss, dass ich damit so einigen toten Baum einer sehr kurzen Verwendung zuführe, bevor ich das Blatt Papier dann shreddere, aber es funktioniert bei mir so am besten. Und nein, ich gebe die Daten in kein LLM, um sie vergleichen zu lassen. Es sind nicht meine Daten. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:10&quot;&gt;
      &lt;p&gt;Habe gerade Urlaub und habe mir vorgenommen, möglichst viel vom zweiten Band vom Herrn der Ringe zu lesen. Tolkien weiss schon, sich auszudrücken. Und mir gefällt dieser Begriff “Flotsam und Jetsam”&lt;sup id=&quot;fnref:11&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fn:11&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; irgendwie so gut, dass ich ihn jetzt einmal benutzen wollte. Peter Gabriels letztes B-Seiten-Album hiess übrigens genauso. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:10&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Dafür habe ich aber mal einen Schwan auf der Autobahn gesehen. Wenn es aber den Schwan gibt, dann wird es das Kantholz vermutlich auch geben. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Okay, um hier präzise zu sein: Ich frickel immer noch gerne an Problemen herum. Aber meine Lust dazu lässt sich am potentiellen Erkenntnisgewinn und der möglichen Wiederverwendbarkeit der Erkenntnisse messen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Und momentan habe ich genügend monetäre Einheiten zu meiner Verfügung, dass die Entscheidung für “selbst bauen”, “billig Hardware” oder “wat vernünftiges” in einem gesunden Rahmen nicht durch monetäre Zwänge vorgegeben ist. Mag auch damit zusammenhängen, dass mein Spielzeug-Budget momentan nicht ausgegeben wird, da ich einfach keine Lust habe, für SSD und DRAM so viel Geld auf den Tisch des jeweiligen Hökers zu legen, und ich nicht mehr den neusten Graphikkarten hinterherrenne. Der Flightsimulator läuft auch auf meiner jetzigen Graphikarte hinreichend immersiv. Ich denke, dass dieses Umdenken nicht nur bei mir stattfinden wird und dass das den grossen Herstellern entsprechender Hardware noch in den “Hintern beissen wird”. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:13&quot;&gt;
      &lt;p&gt;Der ehemals in der Nähe befindliche Computerladen ist jetzt eine Moschee. Und das finde ich beklagenswert. Nicht weil dort eine Religion ausgeübt wird – zwei Häuser weiter ist ein Königreichssaal, und mich ruft jeden Mittag eine sehr nahegelegene Kirchenglocke an den Herd. Meinethalben kann hier auch noch gerne eine Synagoge hinkommen. Auf einem unbebauten Grundstück haben die Zeugen Jehovas jetzt ihren Parkplatz. Sondern weil ich jetzt nicht mehr einfach über die Strasse gehen kann, wenn ich ein Ersatzteil brauche. Aber einen PoE-Injektor hätten sie wahrscheinlich auch nicht dagehabt. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:13&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:12&quot;&gt;
      &lt;p&gt;Es gibt von Ubiquiti ein Gerät mit dem Namen &lt;a href=&quot;https://eu.store.ui.com/eu/en/products/u5g&quot;&gt;Unifi 5G Backup&lt;/a&gt;. Das soll rein zum Backup einer anderen Leitung dienen, während der 5G Max die Leitung auch ersetzen kann. Ob das jetzt ein technisches Limit oder eine Platzierung ist, habe ich nicht geprüft. Auch sonst ist der 5G Backup gegenüber dem 5G Max limitiert. Kostet bei Ubiquiti 89 € netto. War aber praktisch nie lieferbar bei Ubiquiti und stand ständig auf “sold out”. Ja, bis kurz nachdem ich meinen Unifi 5G Max gekauft habe. War ja klar. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:12&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:11&quot;&gt;
      &lt;p&gt;Ein Kapiteltitel in “The Lord of the Rings – The Two Towers”. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/unifi5gmax.html#fnref:11&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/unifi5gmax.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/unifi5gmax.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>German</category>
      
<category>Homelab</category>
      
      
</item>
    
    
    
    
    
    
    
    
    
<item>
<title>Prisencolinensi.... was!?!</title>
<description>Wie man seinen Eltern LLM erklärt ...</description>
<content:encoded>&lt;div class=&quot;lang-switch&quot;&gt;
&lt;a class=&quot;lang-switch__link&quot; hreflang=&quot;en&quot; href=&quot;https://www.c0t0d0s0.org/blog/en_prisencolinensinainciusol.html&quot;&gt;in English 🇬🇧&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Wie erklärt man seinen Eltern, beide über 75, wie ein LLM funktioniert? Oder anderen Menschen, die sich nicht mit der Materie beschäftigen. Mit Adriano Celentano. Und seinem Lied „&lt;a href=&quot;https://www.youtube.com/watch?v=bQDY3HFkh_Y&quot;&gt;Prisencolinensinainciusol&lt;/a&gt;”.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Er schrieb das Lied, um zu zeigen, wie ein Lied auf Englisch klingt – für jemanden, der kein Englisch kann. Er wollte zeigen, das man in jener Zeit nur irgendwas singen musste, das wie Englisch klingt, um Erfolg zu haben. Und die Chartplazierungen gaben ihm recht. Nehmen wir also an, Adriano Celentano kann kein Englisch, hat aber ein Supergehör für Sprache.&lt;/p&gt;

&lt;p&gt;Er hört sich ein paar Lieder an und bekommt ein Gefühl für die Sprachmelodie, für die Aussprache. Und was man häufig zusammen hört, das reiht man später auch selbst häufig aneinander. Er nimmt die englische Musik und singt einfach weiter. So entsteht „Prisencolinensinainciusol”. Es ist kein Englisch, es ist Kauderwelsch. Aber es klingt wie Englisch. Und für viele ist es von Englisch nicht zu unterscheiden, weil sie selbst kein Englisch können. Für sie ist es gut. Und so kommt Adriano Celentano in die Charts.&lt;/p&gt;

&lt;p&gt;Jetzt hört der Celentano in unserem Beispiel anders als der reale Celentano aber nicht nach diesem Hit auf, Lieder auf diese Art zu singen. Er hört noch mehr englische Musik und bemerkt mehr Zusammenhänge. Ihm fällt auf, dass „I”, „lo”, „ve” und „you” sehr häufig vorkommen. Je mehr englische Musik er hört, desto besser kann er Silben aneinanderreihen, desto mehr Muster lernt er. Er wird immer besser darin, diese Muster zu finden, und er findet immer mehr davon, je mehr Musik er hört. Für ihn ist das alles immer noch Kauderwelsch.&lt;/p&gt;

&lt;p&gt;Er versteht immer noch nicht, dass Elvis gerade darüber singt, dass man auf Verdächtigungen keine Träume bauen kann. Aber er kann die Silben irgendwann so gut aneinanderreihen, dass das Lied selbst für jemanden, der der Sprache mächtig ist, Bedeutung hat.&lt;/p&gt;

&lt;p&gt;Ihr sagt, ihr hättet gerne ein Liebeslied, und singt ihm die erste Strophe vor: „Wise men say / Only fools rush in.” Adriano antwortet mit „So I walk in, want to live with you.” Singe ich ihm dieselbe Zeile noch einmal vor, kann beim nächsten Mal etwas ganz anderes herauskommen: „However I don’t care, want to watch TV with you.” Es ist immer ein wenig Zufall dabei, was er als Nächstes singt. Denn er entwirft nicht das ganze Lied, sondern hängt Silbe an Silbe, Note an Note – während er singt. Und ganz selten kommt dabei auch mal „But I can’t help falling in love with you / Shall I stay?” heraus.&lt;/p&gt;

&lt;p&gt;Es hängt auch davon ab, was man Adriano überhaupt zu hören gibt. Füttert man ihn nur mit den Dialogen schlechter 70er-Jahre-Erotikfilme, kommt wahrscheinlich „Now I storm in, want to go in bed with you” heraus. Bekommt er dagegen nur Shakespeare und die Musik seiner Zeit, dann klingt die Antwort eher so:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Sweet lady, whose faire eyes my fortune keepe,&lt;/em&gt;
&lt;em&gt;I looke, I love, and loving lose my sleepe.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Auch das ist Kauderwelsch – nur eben Kauderwelsch im Kostüm. Versmaß stimmt, Reim stimmt, die alte Schreibweise stimmt. Gesagt wird nichts. Und wer aussucht, was Adriano zu hören bekommt, entscheidet damit, wie er singt. Zu demjenigen kommen wir gleich noch.&lt;/p&gt;

&lt;p&gt;Nun ist in der Kunst alles erlaubt (naja, fast alles). Wer Trio gehört hat, weiß das. Erlaubt ist, was gut klingt und die Seele berührt. Bei Fakten gelten andere Ansprüche. Der Mechanismus bleibt aber derselbe: Adriano ändert sein Verfahren nicht. Er sucht weiter das, was am besten klingt. Das LLM weiß nicht, dass 333 bei Issos Keilerei war. Es weiß nicht, was 333 ist, was Issos ist und was eine Keilerei ist. Es weiß nur, dass auf die Frage „Wann war die Keilerei bei Issos?” die 333 besser klingt als jede andere Zahl. Weil sie millionenfach so in den Texten steht. Da er sich aber nur darauf verlässt, was am Besten klingt, singt der virtuelle Adriano manchmal Unsinn. Denn nicht immer ist richtig, was gut klingt. Es ist ein Modell der Sprache, und zwar ein großes. Nicht mehr, nicht weniger.&lt;/p&gt;

&lt;p&gt;Damit das nicht bloß eine Behauptung bleibt: In diesem Text steckt ein Beispiel. Für den Shakespeare-Absatz wollte ich zuerst eine echte Zeile nehmen und habe ein LLM danach gefragt. Es lieferte prompt einen Zweizeiler: „Where both deliberate, the loue is slight: / I lookt, I lou’d, and lou’d at the first sight.” Klingt großartig. Die erste Zeile gibt es tatsächlich – allerdings nicht bei Shakespeare, sondern bei seinem Zeitgenossen Christopher Marlowe. Die zweite gibt es überhaupt nicht. Bei Marlowe folgt an dieser Stelle die berühmte Frage, wer denn je geliebt habe, ohne auf den ersten Blick zu lieben. Der erfundenen Zeile fehlt dabei nichts: richtiges Versmaß, alte Schreibweise, sauberer Reim auf „slight”. Sie klang einfach am besten. Das ist die 333, live, mitten in diesem Text.&lt;/p&gt;

&lt;p&gt;Und er wird immer besser darin, englische Songs zu schaffen – je mehr Songs er hört, je mehr Text er liest. Irgendwann hat er alle Songs gehört und alle Texte gelesen. Dann kann er nicht mehr wachsen. Er kann nur noch durch mehr Übung besser werden, aber es kommt nichts Neues mehr dazu.&lt;/p&gt;

&lt;p&gt;Weil er so gut ist, fragen immer mehr Leute Adriano Celentano nach englischen Liedern. Für englische Songs ist er kein Bob Dylan, kein Lennon und kein McCartney. Aber er ist gut. Er schreibt so viele englische Songs, dass er irgendwann selbst nicht mehr erkennt, dass er dieses Lied geschrieben hat. Um weiter zu wachsen, lernt er nun auch aus Songs, die er selbst geschrieben hat. Aber damit werden seine Songs immer ein wenig schlechter. Es kommt nichts mehr von Dylan, Lennon oder McCartney dazu, das ihn besser machen würde. Und so landet er irgendwann wieder bei „Prisencolinensinainciusol”.&lt;/p&gt;

&lt;p&gt;Um das zu verhindern, hat er jemanden, der ihm hilft. Sein Manager gibt ihm nur englische Texte, bei denen er sich einigermaßen sicher ist, dass sie nicht von Celentano stammen. Das ist mühsame Arbeit, und sie wird umso mühsamer, je mehr Text es von Celentano gibt. Aber es ist eine wichtige Arbeit. Und es ist derselbe Mann, der entscheidet, ob Adriano Erotikfilme oder Shakespeare zu hören bekommt.&lt;/p&gt;

&lt;p&gt;Darüber hinaus erledigt der Manager eine noch wichtigere Aufgabe: Er sagt Adriano, welche Lieder gut angekommen sind und welche nicht. Adriano lernt daraus und singt danach mehr von den Liedern, die gut ankommen. Der Manager ist übrigens auch der Grund, warum Adriano überhaupt antwortet. Sich selbst überlassen, würde er einfach weitersingen: Fragt man ihn etwas, dichtet er die nächste Zeile dazu, denn auf Fragen folgen in Texten meistens weitere Fragen. Erst durch die Rückmeldung seines Managers lernt er, dass jemand, der so etwas singt, eine Auskunft will und keine zweite Strophe.&lt;/p&gt;

&lt;p&gt;Das Irre an der Situation ist: Obwohl unser weiterentwickelter virtueller  Adriano nicht weiß, was er da singt, singt er sehr sehr oft richtig gut. Obwohl er nicht weiß, was die Dinge bedeuten, liegt er mit seinen Aussagen sehr oft richtig. Es funktioniert. Ich sehe die Resultate jeden Tag&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Das sagt vielleicht viel über unser Wissen und unsere Kreativität aus. Aber das ist ein Thema für einen anderen Nachmittag mit Kuchen auf der Terrasse.&lt;/p&gt;

&lt;h2 id=&quot;postscriptum&quot;&gt;Postscriptum&lt;/h2&gt;

&lt;p&gt;Ich hatte gestern Abend einen Gedanken, als ich diesen Text fürs Blog verfasste: Es gibt immer weniger „Bohemian Rhapsody”, immer weniger „Lose Yourself”. Dafür immer mehr Songs, deren Texte glatt klingen, nirgends hängen bleiben und so schnell vergessen sind, wie sie gehört wurden. Musikalisch scheinen wir im Zeitalter des Prisencolinensinainciusol zu sein. Nur mit Texten, die syntaktisch und grammatikalisch einen Sinn haben. Besser ist das nicht. Wer die Texte schreibt, weiß ich nicht. Ich weiß inzwischen nur ziemlich gut, wie es klingt, wenn es keiner war. Bin ich da etwas auf der Spur?&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Ich bin mir bewusst, das die die Beschreibung an manchen Stellen technisch unvollständig und vereinfacht ist. Man beachte bitte das Zielpublikum. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Mein &lt;a href=&quot;https://github.com/jmoekamp/kaloriendingens&quot;&gt;Programm&lt;/a&gt;, mit dem ich momentan meine Postherzopbluesplautze versuche mir abzuhungern, ist in wenigen Tagen entstanden. Und es funktioniert super. Weitaus besser als ich es in der kürze der Zeit hinbekommen hätte. Und es macht genau das was ich will wie ich es will. Ich lebe und arbeite nicht in den Code gewordenen Ideen von jemand anders. Das macht die diese ganze Technik für mich so interessant und wird wahrscheinlich die größten Auswirkungen haben. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/prisencolinensinainciusol.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>German</category>
      
<category>AI</category>
      
      
</item>
    
    
    
    
    
    
    
    
    
<item>
<title>Thock</title>
<description>Tastatur und Flasche auf Jörgs Schreibtisch. Als das Wasser floss.</description>
<content:encoded>&lt;div class=&quot;lang-switch&quot;&gt;
&lt;a class=&quot;lang-switch__link&quot; hreflang=&quot;en&quot; href=&quot;https://www.c0t0d0s0.org/blog/en_keyboard.html&quot;&gt;in English 🇬🇧&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Ich benutze seit einigen Jahren eine Keychron Q6. Ich bin eigentlich auch mehr oder minder zufrieden damit gewesen. Die Tastatur fühlte sich ganz gut an, sah irgendwie auch brauchbar aus. Quasi mechanisches Keyboard für Leute, die keinen Bock haben, selbst zu bauen, wie ich es mittlerweile verstanden habe.&lt;/p&gt;

&lt;p&gt;Eigentlich hätte ich ewig bei dieser Tastatur bleiben können. Vielleicht irgendwann mit neuen Schaltern versehen, neue Keycaps vielleicht. Einen vernünftigen, zwingenden Grund für eine neue Tastatur gab es nicht.&lt;/p&gt;

&lt;p&gt;Ich hatte nur ein Problem damit: Sie war nicht wireless. Die Wirelessvariante kam einige Wochen, nachdem ich meine Q6 erwarb, auf den Markt. So wurde damals aus meinem eigentlich als kabellos geplanten Schreibtisch wieder ein Schreibtisch mit Kabeln.&lt;/p&gt;

&lt;p&gt;Wie bei allem, was nur ein bisschen nervt: Man lässt es, redet sich ein, dass es nicht nervt – bis es irgendwann genug nervt. Doch dieser Tag sollte nie kommen.&lt;/p&gt;

&lt;p&gt;Es kam der Tag, an dem die Flasche kippte. Als es warm war – nicht während der ersten Hitzewelle dieses Jahres. Mit Wasser. Ich habe mein Notebook gerettet, aber binnen Sekunden war ich im Markt für neue Tastaturen. Ein Reparaturversuch mit reichlich Isopropanol führte nur zu einer teilweise funktionierenden Tastatur. Ich erinnerte mich in diesem Moment der Niederlage an einen kürzlichen Blogartikel in meinem &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt;-Reader und schritt zur Tat.&lt;/p&gt;

&lt;p&gt;Für mich ging es danach erst mal für eine Zeit durch das Purgatorium einer Tastatur, die so anders war, als meine Haupttastatur es war, bevor sie ertrank. Keine schlechte Tastatur. Eine Apple-Tastatur, die ich um des TouchID-Buttons willen habe. Aber hinreichend anders, um ungewohnt zu sein. Anders genug, um mich zu bremsen. Anders genug, um mich zu nerven.&lt;/p&gt;

&lt;h2 id=&quot;kontakt&quot;&gt;Kontakt&lt;/h2&gt;

&lt;p&gt;Unser Kontakt mit dem Digitalen ist sehr von Auge und Ohr geprägt. Die Interaktion ist wenig körperlich. Bis auf die Hände, die Finger. Die Finger sind unser Weg, diese Welt zu manipulieren. Irgendetwas in diese Welt zu bringen. Ja, klar gibt es Spracheingabe, aber am Ende muss man dort auch mit der Tastatur die Fehler beseitigen, die Ähms auffiltern und die ganzen Flüche entfernen, weil das System wieder etwas falsch verstanden hat.&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Die Tastatur ist eines unserer Gateways vom achten in den siebten Kreis der Hölle … äh … des OSI-Modells. Für mich ist sie das wesentliche Arbeitswerkzeug. Und damit stand für mich fest, dass eine neue Tastatur her musste, die noch mal ein Sprung gegenüber der Q6 sein sollte.&lt;/p&gt;

&lt;h2 id=&quot;das-neue-keyboard&quot;&gt;Das neue Keyboard&lt;/h2&gt;

&lt;p&gt;Wofür habe ich mich entschieden? Das Gehäuse und das PCB&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; sind eine Neo Code 98 ISO Tri-Mode. Also eine “fast fullsize”. Die Switches sind Gateron Oil Kings. Es sind relativ schwere Linears. Also kein Druckpunkt. Stabilisatoren&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; sind AEboard Stabies. Ich wollte TX AP Stabies, aber die waren nicht lieferbar. So wie alles, was mit Custom-Tastaturen zu tun hat, irgendwie daraus besteht, sich um “nicht lieferbar” herumzuarbeiten. “Hey, die sehen ja gut aus.” – “Zonk. Nicht lieferbar.”&lt;/p&gt;

&lt;p&gt;Aber das Internet meinte, die AEboard Stabies sind praktisch genauso gut. Keycaps sind Black on Grey von Monacokeys mit Esc, Enter und Cursor in Schwarz auf – so eine Art – Rot. Layout ist ISO.&lt;/p&gt;

&lt;p&gt;ANSI führt regelmäßig zum Wunsch, das Keyboard aus dem Fenster zu werfen. Ich schlage die gegenüber einem ANSI-Enter deutlich größere ISO-Enter-Taste recht hoch an. Da ist bei ANSI schon zur Hälfte eine andere Taste. Ich hab’s mal versucht, als ich zu einer Sun Workstation eine ANSI-Tastatur hatte. Nie wieder.&lt;/p&gt;

&lt;p&gt;Sie hat sowohl wired als auch 2,4 GHz als auch BT&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. Sie blinkt nicht. Meine Q6 sah zuweilen aus wie eine Dorfgroßraumdiskothek. Und aus irgendeinem Grunde schaltete sich die Dorfdiskothek gelegentlich wieder ein, egal wie oft man diese ausschaltete. Die neue Tastatur kann nicht Diskothek. Sie ist leuchtbenachteiligt. Ihr fehlen die LEDs. Und das empfinde ich als sehr angenehm.&lt;/p&gt;

&lt;h2 id=&quot;lektionen-in-demut&quot;&gt;Lektionen in Demut&lt;/h2&gt;

&lt;p&gt;Ich habe vor einiger Zeit eine Revision eines Fahrradteils durchgeführt. Auseinandergenommen, gründlich gesäubert, wieder zusammengebaut, bemerkt, dass ein Teil falsch montiert ist, wieder auseinandergenommen, korrigiert, wieder montiert. Eigentlich ist das Teil non-serviceable und wird im Ganzen getauscht. Aber “non-serviceable” stieß auf meinen Trotz.&lt;/p&gt;

&lt;p&gt;Insgesamt eine Lektion in Demut. Demut, dass die Augen doch die Jahre auf dem Buckel haben, die man gelebt hat. Demut, dass meine Finger doch nicht wirklich geeignet sind, kleinste Schrauben zu montieren, Demut, dass dem Menschen doch kein dritter Arm nebst dazugehöriger Hand vergönnt ist. Am Ende funktioniert alles tadellos. Non-serviceable? Pah!&lt;/p&gt;

&lt;p&gt;Das Leben dachte anscheinend, ich bräuchte eine weitere Lektion. Ich könnte aus der Fahrradteil-Odyssee die falschen Schlüsse ziehen. Und so wiederholte sich alles. Das Zusammenbauen der Stabilisatoren war eine Probe für die Geduld und die Angemessenheit der Brillenstärke. Und auch hier schlich sich ein Fehler ein. Ich hielt mich streng an die Anleitung. Baute Stabilisatoren ein, wo die Anleitung es gebot. Auch an der Stelle, wo die linke Shift-Taste später ihren Platz haben würde. Und dachte nicht richtig darüber nach.&lt;/p&gt;

&lt;p&gt;Der geneigte Leser wird meinen Fehler bereits jetzt erkennen: Auf einer ISO-Tastatur hat man meist ein “split left shift”. Also eine kleine Shifttaste und daneben “&amp;lt;&amp;gt;”. Zum einen brauchen diese kleinen Tasten keinen Stabilisator. Zum anderen: Die Stelle hat drei Einbaupositionen für Mikroschalter. Links, Mitte, rechts. Mit Stabilisator ist nur die mittlere Position zugänglich, die anderen sind von diesem überdeckt. Und nun ratet, welche Positionen für “split left shift” benötigt werden. Jaaaa, richtig.&lt;/p&gt;

&lt;p&gt;Wanderer, kommst du in meine Lande, verkündige dorten, du habest mich hier fluchen gehört, wie es die Mehrarbeit befahl.&lt;/p&gt;

&lt;p&gt;An sich ist der Fehler leicht zu korrigieren. Halt einfach den Stabilisator abschrauben. Allein, das geht nicht im eingebauten Zustand. Stabies schraubt man gleich als Erstes auf die Platine, und eigentlich müsste man alles auf diesen Stand zurückbauen. Was bei einer Hundertschaft Tasten einer Bestrafung für Menschen gleicht, die für ihre Eltern Gandalfs grauen Vorhang verschoben haben. Ohne dass diese es wollten. Weil sich die Taste am Rand befand, konnte ich die leicht flexiblen Eigenschaften der PE-Plate ausnutzen und den Stabie herausfummeln, ohne die Tastatur vollständig zu demontieren. So wurde daraus nur eine Strafmaßnahme für Menschen, die letztes Wochenende ihre Eltern nicht angerufen haben.&lt;/p&gt;

&lt;p&gt;Es ist halt nicht nur “Read the fine manual”. Es ist auch “Think about the fine manual”.&lt;/p&gt;

&lt;h2 id=&quot;die-ersten-wochen&quot;&gt;Die ersten Wochen&lt;/h2&gt;

&lt;p&gt;Wie fühlt sich also diese neue Tastatur an? Es ist nun kein orgiastisches Tippgefühl, das bei jedem Tastendruck ein Hoch der Gefühle durch den Körper treibt. Das wäre auch ein wenig viel verlangt. Es ist auch kein Handschmeichler. Als würde man seine Hände darin baden. Es ist immer noch nur eine Tastatur.&lt;/p&gt;

&lt;p&gt;Was es realistisch ist: Sie erfüllt ihre Aufgabe stets zu meiner vollsten Zufriedenheit. Sie ist besser als die Q6. Deutlich. Und die Q6 war schon keine schlechte Tastatur. Das habe ich mit einer gewissen Überraschung wahrgenommen.&lt;/p&gt;

&lt;p&gt;Ich muss mich noch an die relativ stark gefederten Linears gewöhnen. Ich merke das durchaus an den Fingern. Die Keychron hat meinen Fingern deutlich weniger Widerstand geleistet. Es fühlt sich aber gut an. Wie die Keychron Q6 ist die neue Tastatur recht schwer. Etwa 3 kg. Ich mag schwere Tastaturen. Aus einer Vielzahl von Gründen. Unverrutschbarkeit. Einsatzmöglichkeiten während einer Zombieapokalypse. Wertigkeit. Ich habe die Neigung, beim Tippen die Tasten so anzuschlagen, als würde ich sie durch das Holz des Tisches treiben wollen. Stabilität ist für meine Tastaturzwecke ein Muss. Das hatte ich schon bei der alten Tastatur, das wollte ich auch bei der neuen Tastatur. Und diesen Wunsch erfüllt die Tastatur, ohne ins Übertriebene abzugleiten.&lt;/p&gt;

&lt;p&gt;Und der Klang? Ein tiefer, wohlgefälliger Klang ohne Klappern. Thock nennt man das in den Gefilden der Tastatur-Aficionados. “Sie klingt gut” nenne ich das.&lt;/p&gt;

&lt;p&gt;Ist die Tastatur nun perfekt? Nein. Ich bin mir unsicher, ob die Keycaps auf Dauer bleiben werden. Schwarz auf Grau sieht gut aus. Diese subjektive Schönheit geht aber auf Kosten der objektiven Sichtbarkeit. Momentan gefällt mir die Optik noch zu gut, um tätig zu werden. Aber das mag sich ändern.&lt;/p&gt;

&lt;h2 id=&quot;bubble&quot;&gt;Bubble&lt;/h2&gt;

&lt;p&gt;Auf meiner Reise zur neuen Tastatur bin ich durch allerlei Lande gezogen. Während ich zur Keychron durch meine damalige Bubble schlicht geinfluenced wurde, musste ich mich hier selbst informieren.&lt;/p&gt;

&lt;p&gt;Und die Menschen, die diese Lande bewohnen, sind schon etwas seltsam. Wie man die Schalter korrekt nachölt, wird episch diskutiert. Die Wahl des richtigen Tastaturfetts&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; und der richtigen Fettungsstellen füllt seitenweise Forenbeiträge.&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; Es gibt Leute, die sogar die Federn in den Schaltern tauschen. Bei anderen habe ich das Gefühl, sie kaufen sich Keycaps, die von einem finnischen Keller-Underground-Laden stammen, weil sie … nun ja … eben aus einem finnischen Keller-Underground-Laden sind. Die Videos, in denen Leute Tastaturen anschlagen und mit einem Mikrofon aufnehmen, sind Legion.&lt;/p&gt;

&lt;p&gt;Es scheint so, als würde jeder menschlichen Tätigkeit, jedem Hobby auch der Exzess innewohnen. In jene Tiefen des Kaninchenbaus bin ich jedoch nicht vorgedrungen.&lt;/p&gt;

&lt;p&gt;Aber was sag ich … ich habe mich vor einigen Jahren für einige Wochen mit Tubelessklebeband und den passenden Ventilen beschäftigt. Von meiner wochenlangen Recherche, was für meinen “Urlaub 2025”-Plan die beste Hinterradnabe wäre, möchte ich gar nicht anfangen. Ich sag ja … Exzess.&lt;/p&gt;

&lt;p&gt;Trotzdem haben meine Kollegen mit einer gewissen Verwunderung wahrgenommen, dass ich eine Tastatur selbst zusammengebaut habe. Scheint wohl Stage 4 Nerddom zu sein …&lt;/p&gt;

&lt;h2 id=&quot;postscriptum&quot;&gt;Postscriptum&lt;/h2&gt;

&lt;p&gt;Was ich daraus gelernt habe? Wieder einmal, warum am Eingang des Computerraums an meiner Schule das Schild stand: “Essen und Trinken verboten”. 40 Jahre später hab ich’s aber immer noch nicht verinnerlicht. Dabei ist an meinem Schreibtisch sogar ein Tassenhalter vom schwedischen Tinnefladen mit angeschlossenem Möbelhaus befestigt. Dieser Halter hätte das Kippen zuverlässig verhindert. Aber dann hätte ich jetzt auch keine neue Tastatur.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.c0t0d0s0.org/images/keyboard_full.jpeg&quot; alt=&quot;Keyboard&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Ich bin froh, dass es keine direkten Hirn-Rechner-Interfaces gibt. Ich müsste jeden Text hinsichtlich “Damit verbleibe ich mit freundlichen oh guck ein Eichhörnchen Grüßen”-Fehlern überprüfen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Die Platine im Gehäuse, auf der die Tastatur elektrisch aufbaut. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Eine Shifttaste ist ziemlich lang. Ist diese nur in der Mitte vom Schalter unterstützt, wackelt das ziemlich. Oder geht nur auf einer Seite nach unten. In geringerem Maße trifft das auf jede etwas größere Taste zu (also Enter, Backspace etc.). Darum baut man ein Dingsbums unter die Taste, das die Taste stabilisiert. Eben den Stabilisator. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Daher Tri-Mode. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Ist den Leuten eigentlich klar, wie sehr das Wort nach einem Hazing-Ritual für Neuankömmlinge in einer Gruppe klingt? Nach dem berühmten Diskettenschmierfett. Ich bin mir sicher, würde man heute noch Disketten auf breiter Front verwenden, so hätte sich das längst von einem Scherz zu einer validen Frage gewandelt. Mit der unvermeidlichen Gegenfrage: “Willst Du eher mehr Wobble?” &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Ich hege die Vermutung, es würde hier auch über Anleitungen diskutiert werden, die das Mischen von Schlangenaugen und Froschzungen in einem Topf um Mitternacht beinhalten, wenn es nur dem ultimativen Thock dient. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/keyboard.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sat, 25 Jul 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/keyboard.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/keyboard.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>German</category>
      
<category>Hardware</category>
      
<category>Homelab</category>
      
<category>Apple</category>
      
      
</item>
    
    
    
    
    
    
    
    
    
<item>
<title>Jenseits der Komponentenkiste</title>
<description>Leben mit hohen Komponentenpreisen</description>
<content:encoded>&lt;div class=&quot;lang-switch&quot;&gt;
&lt;a class=&quot;lang-switch__link&quot; hreflang=&quot;en&quot; href=&quot;https://www.c0t0d0s0.org/blog/en_madmax.html&quot;&gt;in English 🇬🇧&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;In den meisten postapokalyptischen Filmen, die ich so kenne, fangen die Menschen irgendwann an, die präapokalyptischen Überreste einer vermeintlich besseren, aber vergangenen Zeit zu etwas Neuem zusammenzufügen. Oft, um in dieser Welt zu überleben. Mad Max fällt mir da als Film ein. Selten, um versehentlich auf dem Weg zur tropischen Insel eine bessere Welt zu schaffen, wie im Fall der &lt;em&gt;Phoenix&lt;/em&gt; von Zefram Cochrane&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Irgendwie habe ich gerade ein ähnliches Gefühl, wenn es um das Zusammenstellen neuer Technik für mein Homeoffice geht. Ich lebe in einer Zeit, in der das Versprechen von immer mehr Leistung für immer weniger Geld nicht mehr gilt. Denn dieses wurde preislich durch das “Age of the WTF!?!?” ersetzt. Als Privatperson kauft man ja de facto auf dem Spotmarkt, und der scheint momentan nur einen Weg zu kennen … jenen nach oben.&lt;/p&gt;

&lt;p&gt;Ich hege die Vermutung, dass ich mit Scalping auf Grafikkarten momentan mehr Gewinn machen würde als mit meinen ETFs. Ich bin froh, dass ich mich durch meine Mac-Nutzerschaft wenigstens für den Desktop ein wenig aus dem Komponentenkaufgeschäft heraushalten kann, auch wenn ich da preislich Kummer gewöhnt bin.&lt;/p&gt;

&lt;p&gt;Ich hatte bisher immer die Neigung, in einem gesunden Rahmen beim Neuesten zu gucken und dann zu kaufen. Zunehmend richte ich aber meine Investitionen danach aus, möglichst viel von meinem Altbestand irgendwie weiternutzen zu können.&lt;/p&gt;

&lt;p&gt;Gemerkt habe ich das vor einigen Tagen: Ich stellte fest, dass für bestimmte Tests 64 GB in einem MiniPC schon ganz schön wären. Ich brauchte mehr VMs. Viel mehr VMs. Sehr viel mehr VMs.&lt;/p&gt;

&lt;p&gt;Ich verwende einen UM890Pro von Minisforum als Virtualisierungsumgebung unter Proxmox. Den habe ich schon eine Weile. Der MiniPC hatte mal 64 GB. So hatte ich ihn gekauft. Nur hatte ich irgendwann einen 32-GB-Riegel davon genutzt, um einem Ugreen-NAS mehr als die mitgelieferten 8 GB zu geben. Ich wollte schnell mit dem NAS in Betrieb gehen. Sowohl das NAS als auch der MiniPC nutzten die gleichen DIMMs. DDR5 SODIMM. Klasse! Schraubendreher. DIMM-Transplantation.&lt;/p&gt;

&lt;p&gt;Ich brauchte die 64 GB im MiniPC damals nicht wirklich. Ich dachte: “Ach, die 32 GB kaufst Du irgendwann nach”. Ja, mag sein, dass dadurch der MiniPC etwas langsamer wurde. Aber ich brauchte die letzten Prozent Performance ebenfalls nicht. Aus irgendwann wurde nie, weil ich die fehlenden 32 Gigabyte nicht vermisste. Und vielleicht wären die 48-GByte-DIMMs ja preisgünstig geworden. 96 GB hatte schon seinen Reiz.&lt;/p&gt;

&lt;p&gt;Guter Plan? Ja, vielleicht, damals. Die Kräfte des Marktes lachten jedenfalls über diesen Plan.&lt;/p&gt;

&lt;p&gt;Fast forward. Wir schreiben Juni 2026. Aus nie wurde eines Sonntags die Notwendigkeit für “Jetzt”. Ich brauchte diesen Speicher. Dem NAS den Riegel wegnehmen war keine Option. Das NAS brauchte den Hauptspeicher ebenso. Vielleicht keine 32 GByte, aber definitiv mehr als die mitgelieferten 8 GB und auch mehr als 16 GB. Immer wieder das DIMM aus dem NAS klauen und für die Tests in den MiniPC einbauen? Sichere Anleitung, irgendwann die Herrscher der Elektrostatik zu erzürnen und dann ganz ohne Speicher dazustehen.&lt;/p&gt;

&lt;p&gt;Also dachte ich: Okay … kaufe ich sie halt neu und stelle mich schon mental auf einen Faustschlag ins Gesicht ein. Ich wusste einigermaßen, was mich erwartet. Gehe auf die Webseite eines Hardwarehökers in der Nähe meiner alten Heimat (alte Verbundenheit) und lese etwas von aufwärts von 340 Euro, nächster Händler 399 €, noch nen Händler 359,00 €. Nee, ne?&lt;/p&gt;

&lt;p&gt;Okay … was habe ich denn noch so rumstehen? Mad Max – Jenseits der Komponentenkiste. Man traut sich ja schon fast nicht mehr, irgendwas noch wegzuwerfen.&lt;/p&gt;

&lt;p&gt;Ein Fehlkauf sollte die Lösung sein: Mein letztes Jahr gekaufter refurbishedter … refurbischter … äh … gebraucht erworbener HP EliteDesk 800 G5 hat 32 GB, allerdings erstens als DDR4 und zweitens in Form von zwei Riegeln. Das, was ich mit dem System vorhatte, als ich es bestellte, ging sich leider nicht aus. Also fristete er sein Dasein auf meinem Schreibtisch als gelegentliches Docker-Testenvironment. Eher so eine Beschäftigung als Fenstergucker denn wirkliche Nutzung.&lt;/p&gt;

&lt;p&gt;Aber da wären 32 Gigabyte. Aber sie passten natürlich weder in den MiniPC noch ins bisherige NAS. Schon alleine, weil es eben zwei Module waren.&lt;/p&gt;

&lt;p&gt;Eigentlich musste also neuer Hauptspeicher her. Trotzdem hab ich es nicht so ganz eingesehen, so viel Geld für 32 GB Notebookspeicher auf den Tisch des Hauses zu legen. So alleine vom Materialwert. So ein kleines Tüddelplatinchen für so viel Euro.&lt;/p&gt;

&lt;p&gt;In der Zeit bin ich über den Nachfolger des NAS-Systems gestolpert. Ich hatte bisher ein UGREEN NASync DXP2800. Den hat UGREEN kürzlich umgearbeitet und in einer leistungsstärkeren Version herausgebracht und mit dem Namenszusatz GT versehen.&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Interessanterweise hat dieses System aber einen entscheidenden Rückschritt gemacht: Es nimmt DDR4 an. DDR4? Heureka! Oder dessen Haushaltsversion in Form der flackernden Glühbirne über dem Kopf.&lt;/p&gt;

&lt;p&gt;Da der GT neu im Angebot war, habe ich diesen für 399 € erworben. Etwa zu dem Preis, zu dem ich Marken-DIMMs bei den Hökern meines Vertrauens gesehen habe. Okay, jetzt erstmal kein Geld gespart, aber dafür jetzt 10 GBit und eine schnellere CPU. Und deutlich mehr Hardware in der Hand als das Tüddelplatinchen.&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Man bekommt Barebones ja immer noch zu einem recht guten Preis. Aber mit den Komponenten, die man braucht, um das Gerät standesgemäß in Betrieb zu setzen, wirds dann halt teuer.&lt;/p&gt;

&lt;p&gt;Was habe ich also gemacht? Ringtausch mit Ausrede zum Hardwareneuerwerb - vorerst ein letztes Mal! Mir nen neues NAS gekauft, um den Speicher des HP im NAS zu verwenden. Damit habe ich mein 32-GB-DDR5-SODIMM wieder zurückbekommen, damit ich es wieder in den MiniPC stecken kann. Tilt.&lt;/p&gt;

&lt;p&gt;Der EliteDesk funktioniert natürlich nun nicht mehr. Ihm wurde sein Gedächtnis genommen und er wartet darauf, in die Kiste gelegt zu werden. Oder mit Funden aus dieser Kiste wiederbelebt zu werden.&lt;/p&gt;

&lt;p&gt;Das Ganze fühlt sich ein wenig nach der Situation eines völlig anderen Films an: “Der tapfere kleine Toaster als Retter in der Not”, als das kleine Radio seine WFC-11-12-55 an den Supercomputer “Wittgenstein” weitergibt und sich damit opfert, um einige Hunde zu retten. Schnüff. Ich bin gerade auf der Suche nach dem 8-GByte-Modul, das sich binnen kürzester Zeit nach dem Umbau als verschollen herausstellte. Oder ich bekomme noch 32 Gigabyte DDR4 aus Nome.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Das alte NAS hat mittlerweile eine neue Heimat gefunden&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. Wobei ich mich wie gesagt ernsthaft frage, ob es eine gute Idee ist, momentan irgendwelche Hardware wieder herzugeben. Zumindest wurde der Tausch dadurch wirtschaftlich etwas sinnvoller.&lt;/p&gt;

&lt;p&gt;Geschichte zu Ende? Nee. Warum brauchte ich die zusätzlichen 32 Gigabyte? Die vielen VMs … einige davon sind wirklich wichtig geworden für das, was ich so über den Tag hinweg mache. Es ist nicht mehr nur mein Homelab. Eine gemirrorte Disk wäre da jetzt ganz angemessen. Und damit ging das Drama auf die zweite Etappe.&lt;/p&gt;

&lt;p&gt;Ich hatte mir damals für den EliteDesk eine ganz gute SSD geleistet. 512 GB. Für gute 50 €. Nach dem Hauptspeicher-Uppercut kam nun der SSD-Jab. Der Hersteller meiner SSD verkauft die nicht mal mehr als 512-GB-Version. Zwei 1-TB-SSDs neu zu kaufen war zwar nicht außerhalb meiner finanziellen Möglichkeiten – so teuer sind sie dann doch nicht geworden –, aber ganz eindeutig außerhalb meines finanziellen Wollens. Irgendwo sind auch beim Nerd Schmerzgrenzen erreicht.&lt;/p&gt;

&lt;p&gt;Ich habe mir eine Billig-SSD gekauft, also steckt jetzt neben der sehr hochwertigen SSD eine SSD aus der Grabbelkiste. Bisher vertragen sie sich. Vielleicht gibt es keinen Klassenkampf zwischen den beiden, weil die einfache SSD heute einfach mal doppelt so teuer ist wie damals die hochwertigere. “Du magst doppelt so gut sein, ich bin aber doppelt so teuer”. Aber mit dieser Konfiguration lässt sich weder ein Staat machen noch vernünftigerweise ein RAID-1 bauen. Zu unterschiedlich die Charakteristiken in Haltbarkeit und Leistung. Was ich jetzt mache? Es läuft ein stündliches Backup der VMs auf die preisgünstige SSD und täglich eines auf das NAS. Statt RAID jetzt Dauerbackup. Es scheint jetzt alles zu funktionieren.&lt;/p&gt;

&lt;p&gt;Meine zwei 4-TB-SSDs im NAS kosten mittlerweile weit über 1200 Euro. Ich hoffe gerade inständig, dass davon keine kaputtgehen wird.&lt;/p&gt;

&lt;p&gt;Nun habe ich eine total merkwürdige Storagekonfiguration im Virtualisierungsserver und eine bunte Mischung aus Alt- und Neukomponenten im NAS. Ich glaube, ich werde meinen MiniPC in Rockatansky umbenennen.&lt;/p&gt;

&lt;p&gt;Zefram hat die Vulkanier mit seiner handgedengelten Rakete auf sich aufmerksam gemacht und bei Mad Max sind die Leute auch von A nach B gekommen, auch wenn weder A noch B besonders wünschenswerte Orte waren. Und wenn ich ehrlich bin: Ich brauche zuhause nicht mehr Leistung, als sie mir die Hardware gibt, die ich schon eine Weile habe. Wenn etwas meine Systeme wirklich auslastet, sind es amoklaufende Browser. Und damit melde ich mich das erste Mal seit vielen Jahren aus dem Nachbeschaffungszyklus ab, in dem ich mich seit einer Quantum Bigfoot 1995 mitdrehe.&lt;/p&gt;

&lt;p&gt;PS: Wie ich das alles dem Finanzamt erklären soll? Keine Ahnung.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Jaha, Star Trek spielt nach einer Apokalypse. Ich habe mich nur immer gefragt: An wen will Zefram den Warpantrieb in einer postapokalyptischen Welt verkaufen? An einen Milliardär, der der Welt entfliehen möchte? &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;Aber ohne Racing Stripes am Gehäuse. Sie haben die bisherigen Chromimitate durch etwas edlere Imitate eines anderen Metalls ersetzt. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Leider ist das System momentan nicht mehr zu diesem Preis erhältlich. Es lohnt sich, nach gelegentlichen Sales zu gucken. So habe ich das non-GT-System recht preisgünstig erworben. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Ich habe damals den Film mit meiner kleinen Schwester gesehen. Und noch heute bei der Szene, in der die Röhre ins Bild rollt und einem sofort klar ist, was passiert ist: Schnüff. Doppelschnüff. Auch viele Jahre später noch.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; Wie kann man das in einem Film für Kinder zeigen? Was wäre gewesen, wenn die Ersatzröhre aus Nome nicht angekommen wäre? Was? &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Ohne Hauptspeicher. Bei der neuen Besitzerin soll das System auch wieder mit 32 GB laufen. Und ich bin momentan wenig geneigt, Hauptspeicher abzugeben, sondern beuge mich über ihn, um “Meiiiin Schaaaaaatz” zu krächzen. Auch wenns nur 8 Gigabyte sind. Und auch, wenn ich nicht weiß, unter welchem Stapel es momentan vergraben ist. Ich weiß, es ist da. Für ein 48-GB-DIMM würde ich vermutlich zu Smaug werden. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Und warum zum Henker erinnere ich mich daran noch so genau? &lt;a href=&quot;https://www.c0t0d0s0.org/blog/madmax.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/madmax.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/madmax.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>German</category>
      
<category>Hardware</category>
      
<category>Homelab</category>
      
      
</item>
    
    
    
    
    
    
    
    
    
<item>
<title>25 Jahre</title>
<description>Noch lange nicht genug — ein Vierteljahrhundert bei Sun und Oracle</description>
<content:encoded>&lt;div class=&quot;lang-switch&quot;&gt;
&lt;a class=&quot;lang-switch__link&quot; hreflang=&quot;en&quot; href=&quot;https://www.c0t0d0s0.org/blog/en_25years.html&quot;&gt;in English 🇬🇧&lt;/a&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Ich habe Dinge gesehen, die ihr Nicht-ITler niemals glauben würdet. Gigantische Server, die Core Dumps warfen, kurz vor Weihnachten. Ich habe Lastspitzen gesehen, glitzernd in Grafana, nahe dem Ende der Nacht. All diese Momente werden irgendwann verloren sein in der Zeit, so wie verwaiste Tickets im Jira. Zeit, sich eine Bildschirmarbeitsplatzbrille verschreiben zu lassen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;25 Jahre. Es sind wirklich schon 25 Jahre. Auch wenn ich hoffe, dass noch „30” und „35” dazukommen&lt;sup id=&quot;fnref:8&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, fühlen sich 25 Jahre irgendwie besonders an. Dieser Eintrag ist ein Ausdruck der Verwunderung über diese lange Zeit. Geschrieben in einem Blog, das mich fast genauso lang begleitet.&lt;sup id=&quot;fnref:9&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:9&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Dabei lief eigentlich alles anders, als ich es 2001 für mich ausgemalt habe.&lt;/p&gt;

&lt;p&gt;Die beste Freundin meiner besten Freundin erwähnte mal eine Regel beruflichen Aufstiegs: „Nach drei Jahren kann man gehen, nach fünf Jahren sollte man gehen, nach sieben Jahren muss man gehen.” Diese Frau hatte in großen Unternehmen Karriere gemacht, und irgendwie erschien mir diese Regel am Ende des letzten Jahrtausends sinnvoll.&lt;/p&gt;

&lt;p&gt;Und das war auch mein Plan, als ich 2001 bei Sun anfing. Ein paar Jahre dabei bleiben, Sun im Lebenslauf stehen haben und mir dann etwas anderes suchen. Vielleicht sogar wieder als Manager. Möglicherweise in einer anderen Stadt? Eventuell sogar ins Ausland gehen? Ein guter Plan. Fand ich.&lt;/p&gt;

&lt;p&gt;In Hamburg war ich wegen einer abendlichen Vorbeifahrt&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; an der Binnenalster gelandet. Dies war wahrscheinlich der Moment, in dem ich mich in die Stadt verliebte. Es war kein großer Plan, sondern ein Zufall, der mein Leben tiefgreifend beeinflussen sollte. In jenem Moment wusste ich, dass ich in Hamburg und damit bei Sun unterschreiben würde.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.c0t0d0s0.org/images/binnenalster.jpg&quot; alt=&quot;Binnenalster&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sieben Jahre sind lange vorbei. Es ist 2026. Ich habe mich zum dritten Mal dem ‚muss’ verweigert. Viel ist passiert. Sun wurde längst von Oracle übernommen. Ich bin immer noch dabei. Mittlerweile länger bei Oracle als bei Sun. Aber: Meine Aufgaben unterscheiden sich sehr von jenen, die mir mein damaliger Manager in jenem Sommer vor 25 Jahren – kurz bevor sich die Welt an einem Morgen im September grundlegend änderte – gab. Ich fand mein Wachstum nicht im Sprung von Firma zu Firma. Ich unterscheide mich sehr von dem Menschen, der damals 2001 den Eingang zur Sun-Geschäftsstelle in der Eiffestraße gesucht und nicht sofort gefunden hat.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Warum ich geblieben bin? Es war und ist mit Sicherheit nicht alles „Ponyhof”.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; Nichts ist das so lange. Nichts ist das immer. Wer das über eine Zeit von 25 Jahren sagt, nutzt die Gnade des selektiven Erinnerns. Aber man wächst nicht an einem Ort, wenn man an diesem nicht jeden Tag etwas lernen kann. Man gewinnt nicht, wenn man nicht jeden Tag etwas an jemanden weitergeben kann. Man geht nicht voran, wenn die Neugier irgendwann verkümmert. In den 25 Jahren konnte ich jeden Tag lernen, lehren, neugierig sein. Jeden einzelnen Tag.&lt;/p&gt;

&lt;p&gt;Viele besondere Menschen kreuzten meinen Weg: Von jenem Herrn am Empfang der Frankfurter Geschäftsstelle, der ein phänomenales Gedächtnis für Namen und Gesichter hatte, bis hin zu der Frau, die den verdammten Spanning Tree erfunden hat. Wenn ich durch eine Stadt laufe, kann ich sehen, wo ich überall ein kleines bisschen beigetragen habe.&lt;/p&gt;

&lt;p&gt;Und schlussendlich: Man ist nicht 25 Jahre in einer Firma, ohne dass die Linie zwischen Kollegen und Freunden in Teilen bis zur Unkenntlichkeit verwischt wird. Oder dass man zu manchen Menschen Respekt und Vertrauen aufbaut, das weit über das im professionellen Leben gebotene Maß hinausgeht.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.c0t0d0s0.org/images/sunoracle.jpeg&quot; alt=&quot;SunOracle&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Wenn Du das Universum lachen hören willst, mache einen Plan. Wenn ich auf das letzte Vierteljahrhundert zurückblicke, muss dieses Lachen nicht notwendigerweise etwas Schlechtes sein.&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:8&quot;&gt;
      &lt;p&gt;Ja, ich weiß, das fordert das Schicksal in einer Vielzahl von Richtungen heraus. Aber nach &lt;a href=&quot;https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill.html&quot;&gt;2025&lt;/a&gt; sehe ich das mit einer gewissen Nonchalance. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:8&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:9&quot;&gt;
      &lt;p&gt;Und dessen zwanzigsten Geburtstag ich vor zwei Jahren schlicht übersehen habe. Vielleicht ist dieser Text auch ein bisschen Ausgleich dafür. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:9&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Ich konnte mich nicht entscheiden, welches Angebot ich damals annehmen sollte. Ich fuhr durch Berlin&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;, ich fuhr durch Frankfurt&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;. Und dann war da diese Fontäne&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Weil ich in der Aufregung nicht um die Ecke guckte, wo dieser sich unübersehbar befand. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Nicht so schlimm, denn &lt;a href=&quot;https://www.youtube.com/watch?v=NJDEB4xY-tM&quot;&gt;ich find Ponies doof&lt;/a&gt; … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;Meinetwegen kann das Universum gerne bis zu meiner Rente weiterlachen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Jeder wollte um die Jahrtausendwende in Berlin sein, ich irgendwie nicht … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Frankfurt mag schöne Stellen haben, doch allein ich fand sie nicht … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Hach … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/25years.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/25years.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/25years.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>German</category>
      
<category>Sun</category>
      
<category>Oracle</category>
      
      
</item>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
<item>
<title>After the ban</title>
<description>Redirecting instead of rejecting!</description>
<content:encoded>&lt;p&gt;At some point it also became clear to me that evaluating the result codes from all IPs (not what they loaded, only what the HTTP server thought of it) had, on the one hand, turned into a fairly substantial PII collection (which is why I kept it only in main memory) — one that under certain circumstances would have allowed me to “depseudonymize” the data in the pseudonymized logfile within the first 24h. Stopgap solution … yes. Final architecture … not really.&lt;/p&gt;

&lt;p&gt;On top of that, this table was pretty annoying. Reboot the machine? Data gone. New daemon version? In most cases, data gone. I did learn a technique along the way that let me swap code on the fly, but that didn’t apply to data structures. I need a new field? Data gone! And once the data was gone, the reaction component lost a key data element. At some point a function had been added that checked whether the service had even been running long enough to have collected enough data. Which, due to changes, was rarely the case.&lt;/p&gt;

&lt;p&gt;Beyond that, the signal was mostly fairly weak. Essentially the signal was only strong enough when an IP was making regular feed requests. The feed requests were a kind of heartbeat that the system monitored. My hypothesis was: a scanner doesn’t simulate a feed reader for hours on end.&lt;/p&gt;

&lt;p&gt;For everyone else, the desired signal “there’s more behind this IP  than just the abuser” was rather weak. Or to put it more precisely: in one direction it was indeed quite informative. If between hour -24 and hour -1 there were several valid accesses from an IP, I could assume it was probably a CGNAT, NAT or VPN. The reverse, however, didn’t hold — the number of accesses to my blog is simply too low for that. I think you’d need several orders of magnitude&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; more traffic. The data was so thin that the statement “because I haven’t seen a 200 response, it’s not a NAT, CGNAT or VPN” would have been pure speculation. So this approach was of limited value to me.&lt;/p&gt;

&lt;p&gt;Now, ideas usually don’t come to you in front of the computer, but on the toilet, while making tea, or in the shower. I had this one while reading: I’m looking at the wrong side of the ban. For me, the information about what happens &lt;em&gt;after&lt;/em&gt; the ban would have considerably more value than the information about what happens &lt;em&gt;before&lt;/em&gt; the ban.&lt;/p&gt;

&lt;p&gt;In the previous solution I was hooked into the firewall log. So I knew that something was happening. A request had been rejected by the firewall. I knew from the rule what it was: HTTP or HTTPS. But I didn’t know what was inside it. My server didn’t either. It refused to have the conversation. I had no log of what the client would have liked to do.&lt;/p&gt;

&lt;h2 id=&quot;rebuild&quot;&gt;Rebuild&lt;/h2&gt;

&lt;p&gt;With this thought in mind, I rebuilt the setup. I had originally come at this from the angle that all the noise in the logfiles annoyed me. So a new solution had to keep requests away from my web server just like an IP block does. What doesn’t reach the server doesn’t get logged.&lt;/p&gt;

&lt;p&gt;But I don’t necessarily have to block the request entirely. I can also redirect it elsewhere. And that’s exactly what the new solution does. As before, the system hooks into the honeypot log. The detection component is Apache. As before, an IP address can only end up in this file by being associated with a request that violated a detection pattern, so that — also as before — every IP address in it is handed over to the reaction component.&lt;/p&gt;

&lt;p&gt;However, there is now only one reason why an IP address gets blocked outright. If an IP comes from an ASN on Spamhaus’s “Filter-on-Sight” list, a reject ban is issued. Nothing good comes out of those gates. I don’t even want to know what comes out of there. And that’s straight away for seven days. For all practical purposes that’s a permanent ban, since on the next violation the ban gets extended by another 7d.&lt;/p&gt;

&lt;p&gt;I didn’t want to make the ban permanent outright. If no traffic is coming from an IP — or in some cases a subnet — then I don’t need a filter rule for it. And the existence of the filter rule gives me some visibility that something is coming out of those networks, without me having to look more closely into the logfile. I can also see more quickly where a subnet ban is worthwhile and where it isn’t.&lt;/p&gt;

&lt;p&gt;The decisive difference between this solution and the old one is that alongside the rejects there are also redirects. And a redirect is essentially the default response when hitting the honeypot. If you’ve triggered the detection rules, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nftables&lt;/code&gt; redirects you internally from the original webserver&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; to another web server&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. Instead of port 80 you land on port 10080. Instead of port 443 you get internally redirected to port 10043&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. This means all further accesses from these IP addresses are no longer in the logfile of the primary server. So, my first requirement was met. Second, I now have an additional logfile that contains only the actions of banned users. I now know what happens after the ban.&lt;/p&gt;

&lt;h2 id=&quot;what-happened-after-the-ban&quot;&gt;What happened after the ban?&lt;/h2&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# cat c0d0s0.org-access.log-blocked | head -1
a:b:c:: - - [23/Apr/2026:05:25:30 +0200] &quot;GET / HTTP/2.0&quot; 301 854 &quot;-&quot; &quot;curl/8.14.1&quot;
# cat c0d0s0.org-access.log-blocked | tail -1
a.b.c.d - - [27/Apr/2026:05:14:05 +0200] &quot;GET /setup.php HTTP/1.1&quot; 404 14601 &quot;-&quot; &quot;-&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The dataset covers about 4 days.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# wc -l c0d0s0.org-access.log-blocked 
3208 c0d0s0.org-access.log-blocked
# wc -l honeypot.log-blocked 
2098 honeypot.log-blocked
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Based on this, 1100 requests landed on the ban web server that didn’t match the patterns in the detection component.&lt;/p&gt;

&lt;p&gt;The vast majority of these accesses are, frankly, candidates for new filter patterns. There was only one IP address from which actual accesses to &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; files had taken place. There are clear indications, though, that this was just a camouflage pattern. But even if it were a genuine access, I’d consider a false-positive count of one IP acceptable. At least the first four days suggest a high specificity of the measures.&lt;/p&gt;

&lt;h2 id=&quot;new-detection-logic&quot;&gt;New detection logic&lt;/h2&gt;

&lt;p&gt;I took the opportunity to put the detection logic on a new footing as well.&lt;/p&gt;

&lt;p&gt;Determining that something should become a 403, and actually making it a 403, are now separate functions.&lt;/p&gt;

&lt;p&gt;A large set of SetEnvIfNoCase statements sets an environment variable. This contains a short identifier for the rule.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;SetEnvIfNoCase Request_URI &quot;/wp-[a-z-]+\.php&quot;  honeypot=S2-WP001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If this environment variable is set, a central rewrite rule kicks in that actually produces the 403.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;RewriteCond %{ENV:honeypot} !^$
RewriteRule .* - [F,L]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;improvement-in-monitoring&quot;&gt;Improvement in monitoring&lt;/h2&gt;

&lt;p&gt;This rebuild was necessary primarily because I wanted to introduce one significant change. The environment variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;honeypot&lt;/code&gt; now contains a short identifier that names the rule. This means I can carry that information through into the log.&lt;/p&gt;

&lt;p&gt;The last matching rule wins, not the one that fits best. Unfortunately I couldn’t get the correct content to reliably end up there within my tangle of RewriteRules. Sometimes it would say &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-&lt;/code&gt;, sometimes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;. Rarely did it contain the correct rule identifier. Only after the rewrite to SetEnvIfNoCase was the variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;honeypot&lt;/code&gt; reliably set. Or so I thought. Here too I had to deal with the issue of redirects and the resulting renaming of environment variables. Internally, displaying the ErrorDocument is a redirect, which means the environment variables are renamed accordingly. I log both the variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;honeypot&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REDIRECT_honeypot&lt;/code&gt;. A somewhat brute-force solution, but it makes sure I get the information I want into the files.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;LogFormat &quot;%t %a %{remote}p %A %{local}p \&quot;%r\&quot; %{honeypot}e %{REDIRECT_honeypot}e&quot; connlog
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flyswatter&lt;/code&gt; then assembles the correct reason for filtering from both:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2026-04-27 19:28:54,469 INFO ipapi check a.b.c.d: triggered (datacenter) -&amp;gt; extending ban to 86400s (redirect)
2026-04-27 19:28:54,541 INFO Verdict on a.b.c.d: REASON:S2-WP008 NOSELF NOFASTTRACK NOBADASN:9999999/NARF-ASN NOABUSE:32 IPAPI:datacenter NOGROUP NOPREBAN DURATION:1d/redirect
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I can see right away which rule led to the ban: Section 2 — Wordpress rule 8.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# grep &quot;S2-WP008&quot; .htaccess 
SetEnvIfNoCase Request_URI &quot;(wp-conflg|setup-config|wp-setup|readme\.html|license\.txt)&quot; honeypot=S2-WP008
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;implementing-the-new-logic-on-two-servers&quot;&gt;Implementing the new logic on two servers&lt;/h2&gt;

&lt;p&gt;For this I have two &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; templates in my repository&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. &lt;a href=&quot;https://codeberg.org/c0t0d0s0/flyswatter/src/tag/v0.03/htaccess-primary&quot;&gt;This&lt;/a&gt; version goes into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; of the primary server (reachable on 80, 443).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://codeberg.org/c0t0d0s0/flyswatter/src/tag/v0.03/htaccess.redirect&quot;&gt;A slightly modified ruleset&lt;/a&gt; is meant for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; of the redirect server. Note in particular the second whitelist rul  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SetEnvIf Request_URI &quot;^/notfound/&quot;&lt;/code&gt;. That’s where the always-served document I mentioned earlier lives. This second whitelist entry was needed to make sure the rewrite logic doesn’t fire on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/notfound/index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/notfound/index.html&lt;/code&gt; in turn is wired up via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ErrorDocument&lt;/code&gt; block.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ErrorDocument 404 /notfound/
ErrorDocument 403 /notfound/
ErrorDocument 410 /notfound/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since there’s almost nothing else on the web server, practically every request becomes a 404 and the corresponding ErrorDocument is served. And because I’ve assigned the same ErrorDocument to 403 and 410, the redirect server only ever responds with this one document.&lt;/p&gt;

&lt;p&gt;You could also just copy the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; from the primary server into the redirect server and add the second whitelist rule. Since the redirect server is supposed to display exactly one page, please clear out all other rewrite rules and redirects in the process. Anything else leads to surprisingly hard-to-find problems (for example, the main web server’s site still being served).&lt;/p&gt;

&lt;h2 id=&quot;feeds&quot;&gt;Feeds&lt;/h2&gt;

&lt;p&gt;There is one exception: the feeds remain reachable even on the redirect server. So the server isn’t entirely contentless. My readership consumes this blog largely as an &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feed. If for whatever reason a feed reader’s IP gets banned, they can still read the feeds. The collateral damage of a false-positive block is therefore considerably reduced.&lt;/p&gt;

&lt;p&gt;I had previously considered building an exception for IPs that regularly poll the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feeds, until I noticed that it’s significantly simpler and more stable to just serve the feeds from the redirect server as well. That way I can also block an IP that scans and pulls feeds at the same time.&lt;/p&gt;

&lt;h2 id=&quot;additional-information-source&quot;&gt;Additional information source&lt;/h2&gt;

&lt;p&gt;The previous version already queried an IP’s reputation (at AbuseIPDB) and issued a 1-day ban once a certain threshold was exceeded.&lt;/p&gt;

&lt;p&gt;In this version another information source has been added. The system queries ipapi.is to learn more about those IP numbers that ended up in the honeypot (and only those). Part of the information this service provides is whether an IP is a VPN endpoint, a TOR exit node or a proxy. If that’s the case, the ban is shortened to 1 hour, since here the probability is highest that legitimate users may also be behind that IP. I built a caching daemon for the lookup. The free queries are limited and I want to stay within that budget.&lt;/p&gt;

&lt;p&gt;That said: if the quota is exhausted, the worst that can happen is that all bans are issued at the default length of one day. The system is set up to fail conservatively at this point.&lt;/p&gt;

&lt;p&gt;There are a number of additional conditions in my version of the script that shorten or extend a ban. I’ve removed those from the version in the Codeberg repository, because they work for me but not necessarily for anyone else. Feel free to go wild here.&lt;/p&gt;

&lt;h2 id=&quot;weakness&quot;&gt;Weakness&lt;/h2&gt;

&lt;p&gt;While I was at it, I found another weakness in this mechanism. A non-trivial number of honeypot requests still arrive at the primary server. This happens whenever the scanner works with high parallelism. For example, 16 requests come in at the same time, but the mechanism hasn’t fired yet because it’s hooked into the logfile and has to wait for something to appear there. The follow-up batches do then end up on the redirect server.&lt;/p&gt;

&lt;p&gt;The response to these requests, however, is identical on the primary server and on the redirect server: 403 Forbidden for everything that’s known, 404 for everything that isn’t.&lt;/p&gt;

&lt;p&gt;The access log of the redirect server is very tidy. Which is why a single command is also quite handy for distilling out new rules.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cat /var/log/apache2/c0d0s0.org-access.log-blocked | grep &quot;404&quot; | cut -d &quot; &quot; -f 7 | sort | uniq -c | sort -n
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Anything that’s a 403 is already covered by rules. Anything that returns 200 is intentional. Anything that’s a 404 isn’t covered by the rules. It’s relatively easy to define rules from the rest.&lt;/p&gt;

&lt;p&gt;Strictly speaking, this expansion isn’t necessary. From what I’ve observed, while individual requests may not be caught by the ruleset, scan runs almost always contain at least one pattern that is caught. And that’s enough to trigger the redirect. So not full coverage, but enough tripwires that one of them fires during typical scanner runs.&lt;/p&gt;

&lt;h2 id=&quot;new-version&quot;&gt;New version&lt;/h2&gt;

&lt;p&gt;I’ve uploaded a new version of the setup. You can find it with instructions &lt;a href=&quot;https://codeberg.org/c0t0d0s0/flyswatter/src/tag/v0.03&quot;&gt;here&lt;/a&gt;. The warning still applies that this is mostly vibecoded. So: caveat usor!&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;closing-remark&quot;&gt;Closing remark&lt;/h2&gt;

&lt;p&gt;I think this will be the last blog entry on this topic, because the experimenting — both with the idea itself and with vibecoding — has run its course. I’m still working through my conclusions on both fronts. But that will take a while before it makes it into its own post. That said, if a new idea on this topic hits me on the toilet or in the kitchen, I’ll definitely post about the implementation here.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;In my opinion, “order of magnitude” is misused about as often as “quantum leap”. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;I will call this server  “primary server”. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;I call it “redirect server” from now on. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Yes, that was a typo. I just never bothered to fix it. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;I still need to restructure these so the ruleset isn’t duplicated. Later …. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;“Caveat utilitor” is probably more correct (my Latin is so far back that there were still native speakers around), but “caveat usor” sounds better … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/aftertheban.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Mon, 27 Apr 2026 15:21:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/aftertheban.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/aftertheban.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>Security</category>
      
<category>Jekyll</category>
      
<category>Apache</category>
      
<category>English</category>
      
      
</item>
    
    
</channel>
</rss>

