Der “Ottonormalverbraucher” hat vermutlich nur das Plastikkästchen seines Internetanbieters zu hause hängen. Dieser Artikel soll nur ein Writeup meines Netzwerkaufbaus werden. Es geht um persönliche Erfahrungen, weniger um eine Anleitung. Produktnamen nenne ich hier nur der Vollständigkeit halber.

So fing auch meine Netzwerk-Reise an, eine “FritzBox” des Herstellers “AVM”, sowohl für WLAN als auch für das LAN. Es tut, was es soll, was will man mehr?

Lange Leitung

Ein Problem, dass ich recht früh nach Einzug hatte: Die TAE-Dose zum Anschluss des Internets ist im Flur. Da hing auch dementsprechend der Router. Der auserkorene Platz für meinen PC im Wohnzimmer liegt aber im anderen Eck der Wohnung.

Nun, ich glaube, anfangs habe ich noch mit WLAN hantiert. Unter Linux eh so ein hit-or-miss, je nachdem, welchen WLAN-Adapter man benutzt. Es lief nie zufriedenstellend.

Die nächste Idee war “Power-LAN”, also LAN über die Steckdose. Ich hab mich glaub ich mehrere Wochen damit herumgeschlagen. Am Ende war das aber mit mehr Fluchen verbunden. Die Konnektivität brach sporadisch einfach mal zusammen. Kein Ping ging mehr durch, es half nur ein Reset des Power-LAN-Adapters, meist verbunden mit Aus- und Einstecken, und damit verbunden der Neustart des PCs.

Finale Lösung war, mir ein 50m-LAN-Kabel zu kaufen, dazu Kabelkanal, und das Kabel dann halt schön an der Wand entlang Wohnzimmer-Flur zu verlegen. Das liegt heute noch so, teilweise noch vor den Schränken entlang, die zu dem Zeitpunkt halt schon eingerichtet waren. Schön ist anders, aber es funktioniert. Nachteil ist halt, dass das Kabel unter der Wohnzimmertür entlang verläuft, und beim Öffnen/Schließen der Tür mitgezogen wird. (Ich wohn zur Miete. Ich werd nicht die Wand aufreißen oder große Löcher für das Kabel reinbohren…).

Separates VoIP?

Irgendwann dachte ich mir mal, es wäre interessant, die Telefonie separat zu Regeln. Das Kästchen, das VoIP übernimmt, war aber mehr schlecht als recht einzurichten (umständlich), und irgendwie gab es immer wieder Probleme, dass Rufe nicht ein- oder ausgingen. Keine Ahnung, vielleicht ist da was mit den Firewall-Regeln der FritzBox kollidiert, es war mir am Ende zu müßig.

Mehr WLAN!

Das nächste Problem war, dass ich irgendwann zunehmend Probleme mit dem WLAN der FritzBox hatte, vorwiegend Verbindungsabbrüche mit dem Smartphone.

Ich hab mir dann den Rat von Bekannten zu Herzen genommen und mit einen Access Point der Firma Ubiquity geholt.

Das mit der separaten Controller-Software habe ich anfangs noch auf meinem Haupt-PC laufen lassen. Wird ja eh nur zur Konfigurations-Änderung gebraucht. Das Monitoring ist mir recht egal. Bis heute bekomme ich da Warnungen über tlw. schlechte “WiFi-Experience”. Joa, Wohnung ist halt so geformt, wie sie geformt ist.

Einschub: Werbeblocker

Ich glaub, einen Raspberry Pi mit PiHole hatte ich schon relativ früh laufen. Bei einem sporadischen Stromausfall war halt nur meist das Dateisystem der SD-Karte hinüber. Das hat mich sehr geärgert. Aber wenn er lief, wurde Werbung halt blockiert.

(Virtuelles) HomeOffice

Was zuerst kam, weiß ich nicht mehr.

1) Es ging ins HomeOffice. Ich wollte den HomeOffice-PC allerdings nicht in meinem “Privat-LAN” laufen lassen.

2) Ich hab mir einen kleinen (Mini-?)PC zugelegt, auf den ich Proxmox geklöppelt habe. Eine der ersten Anwendungen, die ich virtualisiert habe, war PiHole.

Mit der Kombi aus beidem, und einem Paar “Smart Switches”, konnte ich das Problem lösen. Mit VLANs hatte ich bisher nicht viel zu tun. Die Einrichtung war daher etwas müßig. Aber mit den Switches konnte ich meinen Home-Office-PC in ein separates Netzwerk-Segment verbannen. Gleichzeitig war es ein Problem, dass die FritzBox nur ein Netz verwalten kann. (Na gut, zwei, wenn man das “Gast-LAN” mitzählt).

Nach einiger Recherche bin ich dann zu OPNsense gekommen. Das wurde auch in Proxmox geworfen, die Netzwerkinterfaces aus Proxmox eingeleitet (die Einrichtung von VLANs in Proxmox war mit einigem Gerätsel verbunden. Die Verbindung zur FB war ein separates VLAN), und anschließend in Proxmox. Irgendwann lief es dann.

Mehr WLAN!

Zu der Zeit habe ich mir dann auch einen Saugroboter zugelegt, nachdem ich von Valetudo gehört habe. (Die “Cloud” läuft auf dem Saugroboter selbst). Obwohl streng genommen nicht notwendig, habe ich also ein separates WLAN für “IoT” eingerichtet. Der Saugroboter ist momentan auch mein einziges “IoT”-Gerät, sonst halte ich mich von dem Teufelszeug ;) fern.

Die APs von Ubiquity unterstützen das glücklicherweise. Hat sich also als gute Wahl erwiesen.

WPA Enterprise. Because I can.

Irgendwann dachte ich mal, “WPA Personal” mit “pre-shared key” (also “Passwort”, was üblicherweise im privaten Umfeld eingesetzt wird) ist zu langweilig. OPNsense bietet dankenswerterweise auch einen Radius-Server. In dem werden, vereinfacht gesagt, die berechtigten Geräte angelegt.

Das hat eine ganze Weile gut funktioniert. Bei WPA Enterprise hat jedoch mindestens der Access Point (bzw. der Radius-Server) ein TLS-Zertifikat. Android schien mit extrem zickig zu sein, was selbst signierte Zertifikate angeht. Jedes mal, wenn ich die WLAN-Konfiguration aus Android entfernt habe, hat es das Zertifikat des Radius-Servers mit gelöscht.

Da es mir zu umständlich war, das Zertifikat jedes mal neu zu installieren, bin ich zu Zertifikaten von Let’s Encrypt gewechselt, indem ich OPNsense unter einer Domain ins öffentliche Internet gestellt hab, damit ich mir per ACME Zertifikate holen kann.

Irgendwann hat Let’s Encrypt dann das “Root Certificate” umgestellt. Das gab dann nochmal extreme Problem, ich bekam Meldungen, das “Zertifikat ist abgelaufen”. Gemeint war iirc das Intermediate-Zertifikat. Da ich keinen Weg wusste, das zu lösen, bin ich wieder zurück zu WPA Personal.

OPNsense - Unbound hat ja auch Blocklisten!

Zwischenzeitlich hab ich meinen PiHole-Container auch wieder abgeschaltet. Ich hab gesehen, dass Unbound in OPNsense Blocklisten unterstützt.

Was mich allerdings geärgert hat, dass statische DHCP-Leases anscheinend nicht aufgelöst werden, wenn das betreffende Gerät offline war.

Drop the DNS?

Die Probleme gingen vor ca. einem Monat los. “Bestimmte Webseiten laden nicht mehr. Oder arschlahm”. Ich konnte mir lange nicht erklären, woran es lag.

DNS? Aber Tests mit dig auf der Kommandozeile verliefen erfolgreich.

Ich hab da viel gefrickelt, geflucht und rebootet. Im Endeffekt war es aber ziemlich sicher ein DNS-Problem. Aber die genaue Ursache ist mir bis heute nicht klar. Ich vermute, da wurde was gedroppt. Es scheint sich jedenfalls auf “irgendwas mit IPv6” zu beziehen. (Oder AAAA Queries).

Bei bestimmten Seiten blieb bei einem HTTPS-Testaufruf via curl der Verkehr bei “TLS Client Hello” stecken.

Vor ein paar Wochen hab ich erst wieder meinen PiHole-Container gestartet und das wieder als DNS-Server eingerichtet, da Unbound auf OPNsense auch immer ewig zum Starten brauchte, eben durch die Blocklisten. Das hat aber anscheinend auch nur kurzzeitig geholfen.

OpenWRT to the rescue

Da ich mit OPNsense so langsam die Nase voll habe, hab ich dann mal OpenWRT in Proxmox installiert und OPNsense abgeschaltet. Danach waren die Probleme verschwunden.

Die Einstellungen/Firewall habe ich bis heute aber noch nicht vollständig migriert.

Es geht doch nix über separate Hardware

Ich hab mir schon vor längerer Zeit mal einen Ubiquity EdgeRouter X zugelegt. Nach einigem Herumspielen damit habe ich allerdings befunden, dass ich mit dem User Interface nicht klarkomme. IIRC gab das Interface außerdem in bestimmten Bereichen (Firewall?) nur IPv4 her, kein IPv6.

Letztes Wochenende habe ich mit nochmal ein Herz gefasst, OpenWRT darauf gepackt, und das virtualisierte OpenWRT ersetzt. Grund war, dass ein iperf-Test mittendrin immer abgebrochen ist. Ich vermute mal, die unterliegende Hardware des ThinkCentre kam mit dem Paketansturm nicht klar.

PiHole: D…N…S…. ist… so… langsam

Mit dem Setup dachte ich glücklich werden zu können.

Mein PiHole hat zusätzlich einen Unbound laufen, der die ganzen Queries dann rekursiv ausführt.

Bestimmte DNS-Queries brauchten aber tlw. bis zu drei Sekunden. Das hat mich als nächstes verrückt gemacht. Das habe ich auch nur herausgefunden, nachdem ich auf die Idee gekommen bin, in PiHole mal was anderes als Upstream-DNS- Server einzustellen.

Was genau die Ursache ist - werden die DNS-Pakete vielleicht gedroppt? Kommt die OpenWRT-Firewall mit dem Connection Tracking nicht klar? Oder dauert das eigentliche Parsen der DNS-Replies so lange? - habe ich noch nicht untersucht.

Ich bin dann glücklicherweise auf “Stubby” gestoßen. Das ist ein kleines Stück Software, dass auf “normale” DNS-Queries lauscht, und diese dann als DNS-over-TLS (DoT) an konfigurierte Server weiterleitet. Und diese Software wird sogar für OpenWRT paketiert! Genial!

Also habe ich Stubby installiert, den DoT-Server des Digitalcourage e.V. als Upstream eingerichtet, Stubby als Upstream in PiHole eingestellt, und fertig ist die Kiste! DNS-Queries dauern jetzt evtl. minimal länger durch die Krypto-Operationen, aber ich habe ein Setup, dass ich für zuverlässig halte.

Endstand

  • FritzBox läuft im Prinzip nur als Modem und Telefonieserver, und bespielt den EdgeRouter mit OpenWRT.
  • EdgeRouter mit OpenWRT als “Hauptrouter” für mein Heimnetz. Bedient mein “privates LAN”, als Router für diverse VLAN-WLANs, und soll zukünftig evtl. noch als Wireguard-Endpoint laufen. Dort läuft auch Stubby als DoT-“Proxy”.
  • Ubiquity WLAN-Access-Point. Ist im Prinzip “nur ein Access Point”
  • ThinkCentre mit Proxmox. Hostet diverse VMs, unter anderem das Pi-Hole.
  • Zwei “Smart” Switches, die VLAN-Tagging unterstützen, und dafür sorgen, dass der Verkehr zwischen Wohnzimmer und Flur läuft. Naja - streng genommen nur noch einer. Den zweiten Switch im Flur hat der EdgeRouter ersetzt.

Verbleibende Ärgerlichkeiten

Nun, ein Problem bleibt noch. Eigentlich wollte ich den Zugriff auf den Adressbereich der FritzBox komplett blockieren, sodass keines der Netze mit der Konfiguration herumspielen kann - mit der Ausnahme meines “privaten LAN”. Leider macht OpenWRT das nicht so einfach, man kann keine Regel nach Prinzip “blockiere alle Source-Zonen AUSSER einen bestimmten” erstellen, und die Ausnahme-Regel wird hinter die allgemeine Regel gestellt. Keine Ahnung, wie ich das fixen muss. Ist aber relativ unwichtig.