- 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
125 lines
6.8 KiB
Markdown
125 lines
6.8 KiB
Markdown
# 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.
|