AAAA: IPv6 address record
One name → one IPv6 address. Same role as A, for IPv6. AAAA is pronounced "quad-A," and the name has four A's because the address it holds is four times the size of an IPv4 address (32 → 128 bits).
| Type number | 28 |
| RFC | 3596 |
| RDATA | A single IPv6 address (128 bits) |
| Reverse counterpart | PTR in .ip6.arpa |
What it holds#
A 128-bit IPv6 address. On the wire the RDATA is the raw 128 bits in network byte order (RFC 3596 §2.2); zone files and tool output render it in the canonical text form of RFC 5952 (lowercase hex, leading zeros dropped, longest zero run collapsed to ::):
2001:db8::1As with A, a name can have multiple AAAA records. Clients use whichever combination of A + AAAA they prefer (Happy Eyeballs: the client queries both record types but gives IPv6 a head start. If the A answer arrives first, the client still waits ~50ms for the AAAA (the Resolution Delay), then the IPv6 connection attempt starts first; IPv4 only begins if IPv6 has not succeeded after ~250ms, per RFC 8305 §§3 and 5).
When to use it#
- Always, on any name that has IPv6 connectivity. Lots of clients prefer IPv6 by default. Whether you have usable IPv6 depends entirely on the ISP: some delegate a generous prefix (several /64s via DHCPv6-PD), some hand out a single /64, and some offer none at all. RFC 6177 recommends end sites get significantly more than a single /64 (a site implies multiple subnets) but deliberately declines to name one size for every site; /48 and /56 are both common in practice.
- At the zone apex: same as A, valid choice for the bare name.
- For dual-stack endpoints: define both A and AAAA. Clients pick the winner.
When not to use it#
- Don't publish AAAA pointing to addresses that aren't actually reachable. Clients that "have IPv6" will try AAAA first; if it's broken they fall back to A after a delay, hurting startup latency. (This is a real, well-documented failure mode: the "broken IPv6" problem.)
- For aliasing: use CNAME.
dig example#
The learning zone uses a documentation address (RFC 3849) for illustration; the address is not routable.
dig @1.1.1.1 example.isitdns.net AAAA +short2001:db8::1nslookup -type=AAAA example.isitdns.net 1.1.1.1Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: example.isitdns.net
Address: 2001:db8::1The Non-authoritative answer: header is normal here: 1.1.1.1 is a recursive resolver relaying the zone's data, not one of the zone's authoritative servers, so the aa flag is not set.
Watch both at once with dig +short:
dig @1.1.1.1 example.isitdns.net A +short
dig @1.1.1.1 example.isitdns.net AAAA +short192.0.2.1
2001:db8::1nslookup -type=A example.isitdns.net 1.1.1.1
nslookup -type=AAAA example.isitdns.net 1.1.1.1Non-authoritative answer:
Name: example.isitdns.net
Address: 192.0.2.1
Non-authoritative answer:
Name: example.isitdns.net
Address: 2001:db8::1(Each nslookup run also prints the Server: / Address: header shown earlier; it is trimmed here.)
DoH query (HTTPS)#
DoH is DNS-over-HTTPS. The JSON API (a Cloudflare/Google extension, not part of RFC 8484) is the easiest to inspect:
curl -s -H 'accept: application/dns-json' \
'https://cloudflare-dns.com/dns-query?name=example.isitdns.net&type=AAAA' \
| jq .Answer[
{
"name": "example.isitdns.net",
"type": 28,
"TTL": 300,
"data": "2001:db8::1"
}
]The "AD": true field in the full response confirms DNSSEC validation passed end-to-end.
nslookupcannot do DoH/DoT/DoQ, usedigorcurlinstead. On Windows 11,Resolve-DnsNameuses the system-configured DoH resolver when the OS is set up for encrypted DNS; it does not accept a-DnsOverHttpsparameter or let you specify an arbitrary DoH endpoint. To probe a specific DoH service, use thecurlexamples above (or a third-party tool likekdig).
dig +https(wire-format DoH via dig) requires dig 9.18 or later. Use thecurlform above if your system dig is older.
Gotchas#
- Record type and transport are independent. An AAAA record does not mean the DNS query travels over IPv6. An IPv4-only client can fetch AAAA records (this page's
digexamples do exactly that when run from an IPv4 host), and resolvers routinely serve A records over IPv6 transport. The record describes the target address family, not the lookup's. - Happy Eyeballs masks broken AAAA. Apps that "feel slow" sometimes have a broken AAAA: IPv6 gets the first connection attempt; if it does not complete within the ~250ms Connection Attempt Delay (RFC 8305 §5), IPv4 kicks off and the client takes whichever succeeds first. A consistently losing IPv6 path means every connection pays that delay. Use
digfor both records and verify reachability withping -6(ping6on older systems) before publishing. - Reverse zones for IPv6 are painful. See the ip6.arpa breakdown: 32 single-character labels per address.
- EDNS / response size. A response carrying multiple AAAA records can exceed the classic 512-byte UDP limit faster than A. EDNS0 raises the limit; if EDNS is stripped en route, large responses get truncated and clients retry over TCP (
tc=1flag). See wireshark-dns-filters for EDNS capture filters. - Proxied records. When a managed DNS provider proxies a record, querying AAAA returns the provider's anycast IPv6 addresses, not what you configured in your zone.