Ein AAAA-Record ordnet einem Hostnamen eine IPv6-Adresse zu, so wie der A-Record eine IPv4-Adresse. Du setzt ihn nur, wenn dein Server über diese IPv6-Adresse wirklich erreichbar ist und der Webserver auf IPv6 lauscht. Ein AAAA-Record, der ins Leere zeigt, verursacht Timeouts und lässt Let's-Encrypt-Validierungen scheitern.
Bei vielen VServer-Anbietern gehört ein IPv6-Netz einfach dazu, oft ein ganzes /64. Trotzdem lassen viele Admins den AAAA-Record weg, weil „IPv4 ja funktioniert“. Das ist nicht falsch. Gefährlich wird es nur in der Gegenrichtung: ein AAAA-Record, der gesetzt ist, aber auf einen Server zeigt, der auf IPv6 nicht antwortet.
Was ein AAAA-Record ist
Der AAAA-Record ist das IPv6-Gegenstück zum A-Record und in RFC 3596 definiert. Die vier A stehen für die vierfache Länge: 128 statt 32 Bit. Aufbau und Verhalten sind identisch, nur der Wert ist eine IPv6-Adresse.
$ORIGIN example.com.
@ 3600 IN A 192.0.2.10
@ 3600 IN AAAA 2001:db8:10::1
www 3600 IN CNAME example.com.
Ein Client, der beide Protokolle hat, fragt A und AAAA ab und versucht dann meist zuerst IPv6. Klappt das nicht schnell genug, nimmt er IPv4. Dieses Verfahren heißt Happy Eyeballs (RFC 8305) und ist der Grund, warum ein kaputter AAAA-Record im Browser oft gar nicht auffällt.
Wann du einen AAAA-Record setzen solltest
Setz ihn, wenn diese drei Bedingungen erfüllt sind:
- Der Server hat eine öffentliche IPv6-Adresse, und sie ist im Interface konfiguriert.
- Die Firewall lässt die Ports 80 und 443 auch für IPv6 durch.
- Der Webserver oder Reverse Proxy lauscht auf
[::].
Ist eine der drei nicht erfüllt, lass den AAAA-Record vorerst weg. Ein fehlender Eintrag kostet dich ein paar IPv6-only-Nutzer, die über NAT64 meist trotzdem durchkommen. Ein falscher Eintrag kostet dich Zertifikate und Ladezeit.
IPv6 auf dem Server prüfen
ip -6 addr show scope global
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 2001:db8:10::1/64 scope global
valid_lft forever preferred_lft forever
Dann, ob der Server nach außen kommt:
ping -6 -c 3 2001:4860:4860::8888
Kommt keine Antwort, fehlt häufig das Default-Gateway. Manche Hoster vergeben die Adresse im Panel, konfigurieren sie aber nicht im Image. Auf Debian mit ifupdown gehört sie dann in /etc/network/interfaces, auf Ubuntu in die Netplan-Datei.
nginx, Caddy und Docker auf IPv6
nginx braucht für jede Portbindung eine eigene IPv6-Zeile:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
# ...
}
nginx -T | grep listen zeigt, ob alle Server-Blöcke beide Zeilen haben. Ein einziger Block ohne [::] reicht, damit genau diese Domain über IPv6 die falsche Seite liefert.
Caddy lauscht standardmäßig auf allen Adressen, also auch IPv6. Hier musst du nichts tun.
Docker bindet veröffentlichte Ports wie -p 443:443 in der Standardkonfiguration meist auch an die IPv6-Adressen des Hosts. Verlass dich nicht darauf, sondern schau nach:
ss -tlnp | grep -E ':(80|443)\s'
LISTEN 0 4096 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=812,fd=7))
LISTEN 0 4096 [::]:443 [::]:* users:(("nginx",pid=812,fd=8))
Fehlt die Zeile mit [::], lauscht der Dienst nur auf IPv4.
Welche Adresse aus dem /64 du nimmst
Viele Hoster geben dir nicht eine IPv6-Adresse, sondern ein ganzes /64-Netz, also 2^64 Adressen. Welche davon im AAAA-Record landet, ist deine Entscheidung. Bewährt haben sich kurze, merkbare Adressen wie 2001:db8:10::1 für den Webserver und 2001:db8:10::25 für den Mailserver. Das macht Logs und Firewall-Regeln lesbarer.
Für jede weitere Adresse muss sie auch im Interface konfiguriert sein. Unter Debian mit ifupdown kommt eine zusätzliche Zeile in /etc/network/interfaces, unter Netplan eine weitere Adresse in der Liste addresses. Eine Adresse, die nur im DNS steht, aber nicht auf dem Server, ist genau der kaputte AAAA-Record, um den es hier geht.
Firewall: IPv6 wird gern vergessen
ufw regelt IPv6 nur, wenn in /etc/default/ufw die Zeile IPV6=yes steht. Das ist auf Debian und Ubuntu der Standard, aber nicht auf jedem Image. Prüfen:
grep IPV6 /etc/default/ufw
ufw status verbose | grep -E '80|443'
In der Ausgabe sollte jede Regel zweimal auftauchen, einmal mit (v6). Nutzt du direkt nftables oder iptables, brauchst du für ip6tables eigene Regeln. Und die Cloud-Firewall im Panel des Hosters hat bei manchen Anbietern getrennte Einträge für IPv4 und IPv6. Ein offenes Port 443 für 0.0.0.0/0 öffnet dort nicht automatisch ::/0.
AAAA-Record setzen und testen
Im DNS-Panel legst du einen Eintrag vom Typ AAAA an, Name @ (oder die Subdomain), Wert ist die IPv6-Adresse. Bei betadomain geht das im Kundenbereich bei den DNS-Einträgen der Domain, genau wie beim A-Record.
Prüfen:
dig example.com AAAA +short
curl -6 -sI https://example.com | head -n 1
curl -4 -sI https://example.com | head -n 1
Beide curl-Aufrufe sollten dieselbe Statuszeile liefern, zum Beispiel HTTP/2 200. Kommt bei -6 ein Timeout, ist der AAAA-Record kaputt, egal was der Browser anzeigt.
Testest du von einem Rechner ohne IPv6, hilft das nichts. Dann führst du den curl -6 auf einem zweiten Server aus.
Let’s Encrypt und IPv6
Hier zeigt sich ein kaputter AAAA-Record am schnellsten. Let’s Encrypt fragt bei der HTTP-01-Validierung A und AAAA ab und versucht bevorzugt IPv6. Antwortet der Server dort nicht, sieht die Fehlermeldung von certbot etwa so aus:
Detail: 2001:db8:10::1: Fetching http://example.com/.well-known/acme-challenge/...: Timeout during connect (likely firewall problem)
Die IPv6-Adresse am Anfang der Zeile ist der Hinweis. Entweder IPv6 auf dem Server reparieren oder den AAAA-Record vorübergehend löschen. Mehr zu den Fehlerbildern im Artikel über das Let’s-Encrypt-Zertifikat.
AAAA-Record und E-Mail
Bei Mailservern ist IPv6 eine eigene Baustelle. Sobald dein Mailserver-Hostname einen AAAA-Record hat, versucht Postfix (bei inet_protocols = all) auch ausgehend über IPv6 zuzustellen. Große Postfächer wie Gmail prüfen bei IPv6-Absendern streng, ob ein passender PTR-Record existiert. Fehlt er, wird die Mail abgelehnt. Bevor du dem Mail-Hostnamen einen AAAA gibst, richte also den Reverse-DNS-Eintrag für die IPv6-Adresse ein, oder beschränke Postfix mit inet_protocols = ipv4 auf IPv4.
Nächster Schritt
Wenn curl -6 sauber antwortet, gehört der AAAA-Record dauerhaft in die Zone. Für eine neue Domain kannst du den Namen bei betadomain suchen. Endungen wie .io (61,99 €) oder eine günstige .net-Domain (16,99 €) bekommst du dort zum selben Preis bei jeder Verlängerung, und die AAAA-Records legst du im selben Panel an.
Domain gefunden? Prüfen und registrieren kannst du sie direkt bei Domains mit festem Jahrespreis – Jahrespreis ab 2,99 €.
Häufige Fragen
Brauche ich einen AAAA-Record, wenn ich schon einen A-Record habe?
Pflicht ist er nicht. Ohne AAAA-Record erreichen IPv6-only-Clients deine Seite nur über NAT64 oder gar nicht, was in einigen Mobilfunknetzen eine Rolle spielt. Hat dein VServer eine IPv6-Adresse, spricht wenig dagegen, sie auch zu nutzen.
Kann ein AAAA-Record auf eine IPv4-Adresse zeigen?
Nein. Der Wert muss eine IPv6-Adresse sein. IPv4-gemappte Adressen wie ::ffff:192.0.2.10 lassen sich zwar eintragen, sind aber im öffentlichen DNS sinnlos.
Wie schreibe ich die IPv6-Adresse im AAAA-Record?
In der üblichen Kurzform mit Doppelpunkten, zum Beispiel 2001:db8:10::1. Führende Nullen innerhalb eines Blocks und eine Folge von Null-Blöcken darfst du weglassen, die Nameserver speichern intern immer die volle 128-Bit-Adresse.
Warum schlägt certbot fehl, obwohl die Seite im Browser lädt?
Häufig ist ein AAAA-Record gesetzt, aber der Webserver lauscht nicht auf IPv6. Dein Browser fällt per Happy Eyeballs still auf IPv4 zurück, Let's Encrypt prüft dagegen bevorzugt über IPv6 und bekommt einen Timeout.