2026-05-16
DNS, as designed in 1987, painted itself into a corner. RFC 1035 set the maximum UDP response size at 512 bytes, reserved a handful of flag bits, and used a 4-bit RCODE field — only 16 possible error codes. By the late 1990s these limits were suffocating the protocol. IPv6 needed bigger answers. DNSSEC needed much bigger answers (signatures alone can exceed 512 bytes). New features needed signaling channels that didn't exist. You couldn't even extend the header without breaking every resolver on Earth.
RFC 6891 (which obsoletes RFC 2671 from 1999) solves this with a brilliantly sneaky trick: the OPT pseudo-RR. EDNS(0) doesn't change the DNS wire format at all. Instead, it smuggles extension data inside an additional resource record that older servers, by spec, must ignore.
An EDNS-aware client appends a single OPT record to the Additional section of its query. This record looks like a normal RR but its fields are repurposed:
DO bit — "DNSSEC OK")Because the OPT record's TYPE is 41, ancient resolvers simply don't recognize it and pass over it. New resolvers see the OPT and unpack a whole parallel extension namespace.
Nearly every DNS query on the modern internet carries an OPT record. Without EDNS(0):
For years, broken middleboxes and firewalls would drop EDNS queries instead of responding with FORMERR. Resolvers worked around this by retrying without EDNS — a slow, painful fallback that delayed every query through a broken resolver. On February 1, 2019, the major resolver vendors (BIND, Unbound, PowerDNS, Knot, plus Google and Cloudflare's public resolvers) coordinated to remove these workarounds. Operators of broken authoritative servers suddenly went dark. It was the closest thing the DNS community has had to a flag day since the 1983 NCP-to-TCP cutover, and it forced an enormous cleanup of legacy DNS infrastructure.
EDNS(0) is a textbook case of extending a deployed protocol without breaking it. The "(0)" in the name reserves version negotiation — there could one day be EDNS(1), signaled via the OPT record's version field. (There never has been; the option-list model proved flexible enough.) Paul Vixie has called it "the ugliest beautiful thing in DNS," which captures the spirit: it's a hack riding on top of the additional-records section, but it's the hack that kept DNS alive into the DNSSEC, IPv6, and privacy eras.
