From dfd0ccbb9a04e6644dcbac2b341be2bb532f59fa Mon Sep 17 00:00:00 2001 From: Micha Date: Mon, 1 Jun 2026 12:51:16 +0200 Subject: [PATCH] Refine external IPv6 operator check --- docs/EXTERNAL_OPERATOR_RUNBOOK.md | 3 ++- docs/NETWORK_INVENTORY.md | 2 +- ops/maintenance/check-external-operator.sh | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/EXTERNAL_OPERATOR_RUNBOOK.md b/docs/EXTERNAL_OPERATOR_RUNBOOK.md index 29fb85d..98ca11b 100644 --- a/docs/EXTERNAL_OPERATOR_RUNBOOK.md +++ b/docs/EXTERNAL_OPERATOR_RUNBOOK.md @@ -17,6 +17,7 @@ bash /mnt/user/services/homelab-infra/ops/maintenance/check-external-operator.sh Erwarteter Stand vom 2026-06-01: - FRITZ!Box 7590 meldet FRITZ!OS `154.08.25`. +- FRITZ!Box IPv6-Firewall meldet `FirewallEnabled=1`; `InboundPinholeAllowed=1` bedeutet, dass IPv6-Freigaben technisch moeglich sind und in der UI gegengeprueft werden muessen. - Public DNS fuer `*.kaleschke.info` liefert A-Records auf `217.249.115.154`, keine AAAA-Records. - Host hat keine globale Provider-IPv6-Adresse; sichtbar ist nur Tailscale-IPv6 `fd7a:115c:a1e0::2c01:62b2`. - WAN-Smoke gegen die Public-IP: `443/tcp` offen, `80/tcp` und `222/tcp` geschlossen. @@ -92,7 +93,7 @@ In der FRITZ!Box: |---|---| | `System -> Update` | FRITZ!OS aktuell; am 2026-06-01 per TR-064 `154.08.25` beobachtet | | `Internet -> Freigaben -> Portfreigaben` | nur `443/tcp -> 192.168.178.58:443` | -| IPv6-Portfreigaben | keine unerwarteten Freigaben; insbesondere kein `222/tcp`, kein Admin-Port | +| IPv6-Portfreigaben | keine aktiven Freigaben; insbesondere kein `222/tcp`, kein Admin-Port | | Selbststaendige Portfreigaben/UPnP | fuer `Kallilabcore` aus; neue Geraete nur bewusst erlauben | | Gastnetz | bleibt aus, solange keine Gastnetz-Policy gepflegt wird | | Ausfallschutz | bewusst aus; nur neu bewerten, wenn ein Mobilfunk-Fallback gewuenscht ist | diff --git a/docs/NETWORK_INVENTORY.md b/docs/NETWORK_INVENTORY.md index a26c94b..07cfabe 100644 --- a/docs/NETWORK_INVENTORY.md +++ b/docs/NETWORK_INVENTORY.md @@ -153,6 +153,6 @@ docker network inspect backend_net | jq '.[0].Internal' | FRITZ!Box-Portfreigaben mit Repo-Soll abgleichen | **erledigt 2026-05-28** | Bereinigt: `80/tcp` entfernt (Cloudflare-DNS-Challenge ersetzt HTTP-01; Mobilfunk-Test bestaetigt Timeout auf `http://`, `https://` weiter ok). `222/tcp` bleibt bewusst nicht eingerichtet (Tailscale-only-Linie). UPnP-Selbstfreigabe-Recht fuer VONETS-Bridge (SolarEdge) deaktiviert. Aktiver Soll-Stand: ausschliesslich `443/tcp -> 192.168.178.58`. | | FRITZ!OS Update | **erledigt / beobachtet 2026-06-01** | TR-064 meldet `154.08.25`; nach Betreiber-Login nur noch FRITZ!Box-Konfig-Backup ablegen | | Gast-/IoT-Zugriff auf Admin-Ports | aktuell entschaerft | Gast-WLAN ist inaktiv; bei Aktivierung muessen `192.168.178.58:8082`, `192.168.178.58:8181` und ggf. weitere LAN-Ports per FRITZ!Box-Kindersicherung/Netzwerk-Filter abgesichert werden | -| IPv6 Exposure | technisch entschaerft | Public DNS liefert keine AAAA-Records fuer `*.kaleschke.info`; Host hat keine globale Provider-IPv6. In der FRITZ!Box trotzdem IPv6-Portfreigaben gegenpruefen: keine Admin-/SSH-Freigaben | +| IPv6 Exposure | technisch entschaerft | Public DNS liefert keine AAAA-Records fuer `*.kaleschke.info`; Host hat keine globale Provider-IPv6. TR-064 meldet IPv6-Firewall aktiv und Pinholes grundsaetzlich erlaubt, daher in der FRITZ!Box gegenpruefen: keine aktiven IPv6-Freigaben, keine Admin-/SSH-Freigaben | | WAN-Ausfallschutz | bewusst nicht eingerichtet | Mobilfunk-Stick-Failover an FRITZ!Box ist nicht aktiv; Internet-Ausfall = ACME/DDNS pausieren, lokale Apps laufen weiter | | Home Assistant InfluxDB Bind | validiert 2026-05-31 | `docker-proxy` bindet `127.0.0.1:8181`; keine LAN-Exposure. Wenn Home Assistant nicht lokal auf dem Host schreibt, braucht das eine bewusste Bind-Aenderung. | diff --git a/ops/maintenance/check-external-operator.sh b/ops/maintenance/check-external-operator.sh index 895edba..c0e0d9b 100755 --- a/ops/maintenance/check-external-operator.sh +++ b/ops/maintenance/check-external-operator.sh @@ -17,6 +17,21 @@ else echo "FRITZBox TR-064 descriptor not reachable at $FRITZBOX_URL" fi +if ipv6_fw="$( + curl -fsS --max-time 5 \ + -H 'Content-Type: text/xml; charset="utf-8"' \ + -H 'SOAPACTION: "urn:schemas-upnp-org:service:WANIPv6FirewallControl:1#GetFirewallStatus"' \ + --data '' \ + http://192.168.178.1:49000/igd2upnp/control/WANIPv6Firewall1 +)"; then + firewall_enabled="$(printf '%s\n' "$ipv6_fw" | sed -n 's:.*\(.*\).*:\1:p')" + pinhole_allowed="$(printf '%s\n' "$ipv6_fw" | sed -n 's:.*\(.*\).*:\1:p')" + echo "IPv6 FirewallEnabled: ${firewall_enabled:-unknown}" + echo "IPv6 InboundPinholeAllowed: ${pinhole_allowed:-unknown}" +else + echo "FRITZBox IPv6 firewall status not reachable via TR-064." +fi + section "Host IPv6" global_ipv6="$( ip -6 addr show scope global \