From c29f0953db87bdc6a110a3176de5d0074c29a182 Mon Sep 17 00:00:00 2001 From: Oliver G Date: Mon, 3 Aug 2026 07:54:55 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20IPv6-St=C3=B6rung=20auf=20hetzner=20ist?= =?UTF-8?q?=20behoben,=20Kommentar=20richtigstellen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die "tcp established"-Regel der Hetzner-Robot-Firewall wurde von IPv4 auf IPv4 & IPv6 erweitert; ausgehendes IPv6-TCP funktioniert wieder, per tcpdump verifiziert. Der AF_INET-Filter bleibt bewusst bestehen — er hält die gemessenen Antwortzeiten deterministisch und sichert den Lauf gegen eine Wiederholung ab. Der Kommentar behauptete bisher, der Filter sei ein Provisorium bis zur Reparatur. --- scripts/check_status.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/check_status.py b/scripts/check_status.py index 137a679..b5ca5e6 100644 --- a/scripts/check_status.py +++ b/scripts/check_status.py @@ -12,13 +12,13 @@ import urllib.request import urllib.error from datetime import datetime, timezone -# hetzner, von dem aus geprüft wird, hat zwar eine globale IPv6-Adresse und eine -# Default-Route, aber keine funktionierende IPv6-Konnektivität — jede Verbindung -# zu einem AAAA-Record läuft erst in einen ~20s-Timeout, bevor Python auf IPv4 -# zurückfällt. Das verfälscht die gemessenen Antwortzeiten massiv (20s statt -# 150ms) und zog den Lauf über das Cron-Intervall hinaus. Bis IPv6 auf hetzner -# repariert ist, wird hier ausschließlich über IPv4 geprüft — das entspricht -# ohnehin dem, was dieser Messpunkt tatsächlich erreichen kann. +# Bewusst nur IPv4. Am 03.08.2026 war ausgehendes IPv6-TCP auf hetzner tot (die +# "tcp established"-Regel der stateless Robot-Firewall galt nur für IPv4), und +# jede Domain mit AAAA-Record kostete ~20s Timeout, bevor Python auf IPv4 +# zurückfiel — Antwortzeiten von 20s statt 150ms, Lauf länger als das +# Cron-Intervall. Die Firewall-Regel ist inzwischen auf IPv4 & IPv6 erweitert und +# IPv6 funktioniert wieder; der Filter bleibt trotzdem, weil er die Messung +# deterministisch hält und den Lauf gegen eine Wiederholung absichert. _getaddrinfo_orig = socket.getaddrinfo