This repository has been archived on 2026-09-17. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
nixos-config/docs/pinix-router-migration.md
pijukka 51f8ccef1a host(pinix): clean up leftover Mango references after the router migration
- mango-dns -> wan-dns-update (module, script, systemd units): same job
  (keep ipv6-test.0ff.space's AAAA pointed at the current WAN address),
  now named for what actually provides the uplink (Nokia tethering).
- Drop the dead `networking.dhcpcd.extraConfig` block in
  hosts/pinix/configuration.nix (end0 is the tnix maintenance link now,
  not an uplink; router-uplink.nix's mkForce for wan0 already won here).
- Fix stale "Mango" wording in configuration.nix and
  localServices/tailscale.nix to describe the actual Nokia/pinix-router-dns
  setup.
- Remove the now-dead transitional `enp1s0u1u2` dhcpcd stanza in
  router-uplink.nix -- wan0 has been the stable name across several
  reconnects/reboots.

Not touched: scripts/pinix-reachability-probe.sh,
scripts/configure-mango-dns.sh, docs/pinix-reboot-probe.md,
docs/pinix-bind.md -- built entirely around the old Mango DNAT setup
(uci/nft on the Mango itself), need their own rework for the Nokia
uplink rather than a rename. Noted in docs/pinix-router-migration.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C5FvfdKcQjEFQ4aLrepcS1
2026-09-13 16:07:15 +02:00

6.8 KiB
Raw Permalink Blame History

Mango durch pinix ersetzen

Stand: 13.09.2026, Umzug aktiv. Offen ist nur noch der Test mit einem echten WLAN-Client (siehe unten).

Ziel: Nokia 6300 per USB-Tethering an pinix; pinix stellt das WLAN pinix mit neuem, zufälligem Schlüssel bereit. tnix behält während der Migration Internet über den unabhängigen iPhone-Hotspot.

Reihenfolge

  1. Fester Ethernet-Wartungszugang: pinix 192.168.50.1/24, tnix 192.168.50.2/24. Kein zusätzliches Standardgateway. Zunächst am bestehenden Mango-LAN testen, dann Ethernet direkt verbinden.
  2. Nokia direkt an pinix: USB-Erkennung, IPv6, DNS64 und Wiederverbindung.
  3. Öffentliche Dienste und DNS vom Mango unabhängig machen.
  4. WLAN und Internetweitergabe auf pinix aktivieren und mit Client testen.

Aufbau

  • hosts/pinix/router-uplink.nix: Nokia per .link-Datei stabil als wan0 (Treiber rndis_host, Modell Nokia_6300_4G), IPv6 per RA (accept_ra = 2), IPv4-Standardroute des Telefons verworfen. Eigener Unbound pinix-router-dns auf 127.0.0.2 und den LAN-Adressen, der an die DNS64-Resolver der Telekom weiterleitet. BIND lauscht öffentlich auf der wechselnden globalen Adresse, nicht auf LAN-/Tailnet-ULAs. Firewall: öffentlich nur 53/80/443, SSH nur über end0 und tailscale0.
  • hosts/pinix/router-lan.nix: end0 (192.168.50.1, fd42:50:0::1) und wlan0 (192.168.51.1, fd42:50:1::1), NAT66 über wan0, radvd mit RDNSS auf pinix, dnsmasq nur für DHCPv4 auf wlan0 (lokales IPv4 ohne Router – Internet läuft über IPv6 plus NAT64/DNS64 der Telekom), hostapd pinix auf 2,4 GHz Kanal 6, WPA2-SHA256.
  • WLAN-Schlüssel: secrets/pinix-wifi.age (Empfänger: Nutzer + pinix), anzeigen mit agenix -d secrets/pinix-wifi.age. Nach jeder Rotation zusätzlich sudo systemctl restart hostapd auf pinix nötig — hostapd liest die Passphrase nur beim eigenen Start ein; nixos-rebuild switch löst dafür keinen Neustart aus, weil sich nur der Secret-Inhalt hinter dem unveränderten /run/agenix-Pfad ändert, nicht die Unit selbst. Gefunden am 13.09.2026: Passwort rotiert und deployt, hostapd lief aber unbemerkt mit der alten Passphrase weiter, bis der Neustart das behoben hat.
  • Öffentliche Adresse: mango-dns.timer führt ipv6-test.0ff.space (AAAA) jede Minute nach; dex. und head. (domain2) sind CNAMEs darauf. Der Dienstname stammt noch aus der Mango-Zeit, die Funktion ist unabhängig vom Router.

Konfigurationsbasis

Das Repository /home/drone/nixos-config auf pinix war hinter dem laufenden System zurückgeblieben. Ein erster Dry-Run hätte unter anderem Dex und Headscale entfernt; dieser Build wurde nicht aktiviert.

Die archivierte Quelle /nix/store/cca8s4fkcymj5nmv4df69bgdjbxixlhb-source wurde ausgewertet und ergab exakt den laufenden Systempfad /nix/store/ra5qca5ffp4412wdqw4f125yxvcpw6p5-nixos-system-pinix-26.11.20260910.8ce4ef6. Aus dieser Quelle wurden die pinix-Module und die beiden Dex-Hilfsskripte in das Repository auf pinix übernommen. Vorheriger Stand gesichert unter /tmp/pinix-before-router-source-reconcile-20260913.tar.gz auf pinix. Neue Quelldateien sind dort mit git add -N für Flake-Auswertungen sichtbar. Die Router-Stufen wurden aus diesem pinix-Checkout gebaut und aktiviert.

Der lokale Arbeitsstand auf tnix enthält zusätzlich die noch nicht aktivierte tailnet-dns.nix. Deren doppelte Definition von net.ipv6.conf.wan0.accept_ra wurde entfernt, weil router-uplink.nix das jetzt besitzt; sonst bricht die Auswertung des tnix-Stands ab.

Geprüft

  • tnix aktiviert mit 192.168.50.2/24; IPv6-Standardroute über iPhone weiterhin bevorzugt (Metrik 3003 gegenüber Ethernet 4000).
  • iw list auf pinix bestätigt AP-Unterstützung, 2,4 GHz und 5 GHz.
  • Wartungsweg: SSH von tnix über 192.168.50.1 zuerst über Mangos LAN-Switch, dann per Direktkabel (Ping 0,326 ms). Der erste Switch musste network-addresses-end0.service explizit starten, da das Gerät bereits vorhanden war.
  • Nokia: nach USB-Neuanschluss als wan0 mit öffentlicher IPv6-Adresse; beide Telekom-Resolver liefern DNS64 (64:ff9b::/96); GitHub über NAT64 mit HTTP 200.
  • Letzte Stufe aktiviert: /nix/store/236wq0yx33qwmfjnwwhn2zrn52knww88-nixos-system-pinix-26.11.20260910.8ce4ef6. systemctl is-system-running = running, keine fehlgeschlagenen Units; hostapd (AP-ENABLED), radvd, dnsmasq, pinix-router-dns, BIND, Traefik, Dex, Headscale, tailscaled aktiv; IPv4/IPv6-Forwarding an.
  • Von außen (tnix über iPhone-Hotspot, fremdes Netz): Ping auf die Nokia-Adresse ok; HTTP 301, https://dex.lukasrosier.com/dex/.well-known/openid-configuration und https://head.lukasrosier.com/health jeweils 200 über 2a01:598:…:3bdc; Port 22 von außen geschlossen. Cloudflare löst ipv6-test.0ff.space und dex.lukasrosier.com auf dieselbe Adresse auf.
  • Nach dem Umzug hielt pinix noch eine per RA gelernte Default-Route des Mango über end0 (Metrik 1024, gegenüber wan0 1007). Da end0 jetzt accept_ra = 0 hat, wird sie nicht erneuert und läuft von selbst aus.

Test mit echtem Client und gefundene Bugs

Test mit einem echten Geraet (iPad) im WLAN pinix am 13.09.2026 bestanden, aber erst nach drei weiteren, unabhaengigen Bugs, die dabei zutage kamen (alle behoben und deployt):

  • authentication.mode = "wpa2-sha256" (seltene AKM-Variante) statt wpa2-sha1 (der von praktisch jedem Geraet unterstuetzte WPA2-Standard) in router-lan.nix -- der Beitritt kam serverseitig nie an.
  • end0/wlan0 ohne automatisch erzeugte Link-Local-Adresse (addr_gen_mode=none, erzeugende Ursache nicht abschliessend geklaert): radvd verweigerte deshalb stillschweigend jede Advertisement ("interface is not ready" bei Debug-Verbositaet). Ein oneshot-Dienst (pinix-lan-linklocal in router-lan.nix) setzt addrgenmode eui64 bei jedem Boot zurueck, nach allem was die Interfaces sonst anfasst.
  • Die DNS64-Zugriffskontrolle in router-uplink.nix nutzte fd42:50::/48 (fixiert das 3. Hextet auf 0, deckt nur end0 ab) statt /32 (deckt end0 UND wlan0 ab) -- jede DNS-Anfrage vom WLAN kam als "Refused" zurueck, kein Client konnte etwas laden.

Aufräumen (erledigt am 13.09.2026)

mango-dns -> wan-dns-update umbenannt (Modul, Systemd-Einheiten, Skript), die Mango-Kommentare in hosts/pinix/configuration.nix und localServices/tailscale.nix korrigiert, der Übergangsname enp1s0u1u2 in router-uplink.nix entfernt (wan0 ist seit mehreren Boots/Reconnects stabil benannt). Nicht angefasst: scripts/pinix-reachability-probe.sh, scripts/configure-mango-dns.sh und die reinen Reboot-/Bind-Testprotokolle (docs/pinix-reboot-probe.md, docs/pinix-bind.md) -- die sind komplett auf die alte Mango-DNAT-Architektur zugeschnitten (eigene uci/nft-Schritte auf dem Mango selbst) und brauchen eine eigene Überarbeitung für den Nokia-Uplink, kein bloßes Umbenennen.