There is a way for anything on your network to look up a name without your DNS server ever hearing the question. No setting changed on the machine, no administrator rights, nothing you would find in a log. The lookup leaves as an ordinary HTTPS request on port 443, goes to a resolver somewhere on the internet, and comes back with an answer your own resolver would have refused to give.

The blocklist never fires. The threat feed never gets the query. The log line you would have gone looking for was never written.

It is called DNS over HTTPS, DoH for short, and it was built for a good reason. Plain DNS travels in clear text on port 53, so the coffee shop, the airport and your internet provider can read every name you resolve and change the answers if they fancy it. DoH wraps the lookup in the same encryption as the rest of the web and hides it in the crowd. As a privacy measure for a person on a hostile network, it does exactly what it says.

The trouble is that the thing it defeats and the thing you rely on are the same thing.

Your resolver is not just a lookup service. It is a control point: where a known-bad domain gets answered with nothing, where a query to a command server shows up in a log, where Protective DNS refuses the malware domain before the connection is made. DoH takes the lookup off your resolver and hands it to one you never chose, and every control you hung off that resolver goes with it.

Ordinary DNS goes through your resolver. DoH goes round it.Same laptop, same question. One answer passes your controls, one never meets them.Ordinary DNS, port 53DNS over HTTPS, port 443Laptopasks for a nameYour resolverblocklist and threat feed checkedquery logged against the clientbad name answered NXDOMAINThe internetonly if it passedLaptopasks for a nameYour resolvernever askednothing to blocknothing to logHTTPSto a resolverof its choosingSomeone else's resolveranswers anythingThe firewall sees one more encrypted web connection.It has thousands of those a minute, and on the wire this one looks like the rest.
The same laptop asking the same question. On the left it goes through your resolver, which checks the name, logs it and only then asks the internet. On the right it goes straight out over HTTPS to a resolver of the client’s choosing. Your resolver never hears it, so there is nothing to block and nothing to log, and at the border it is one more encrypted web connection among thousands.

This is not an argument against encrypting DNS. Encrypted DNS is right, and the last section of this post is how to run it. It is an argument about who gets to choose the resolver, because that choice is the whole game, and DoH was designed to take it away from you and give it to the browser, the app and, if you are not careful, the attacker.

What DoH Actually Is

Strip the branding off and DoH is a normal web request that happens to carry a DNS question.

Ordinary DNS is a small binary message sent over UDP or TCP to port 53. DoH puts that same message, or a JSON version of it, inside an HTTPS request to a web server that speaks the protocol; the reply is an HTTPS response1. That is the entire idea.

RFC 8484 standardised it in October 2018, and the intent was never hidden. The point, its own introduction says, is “allowing web applications to access DNS information via existing browser APIs”1.

Existing browser APIs. A web page. Nobody found that as an awkward side effect years later. It sits in the first paragraph of the standard, written down as the goal.

Here is a lookup done the DoH way, from a command line, against a public resolver, asking for example.com:

$ curl -s -H 'accept: application/dns-json' \
    'https://cloudflare-dns.com/dns-query?name=example.com&type=A'
{"Status":0,"TC":false,"RD":true,"RA":true,"AD":true,"CD":false,
 "Question":[{"name":"example.com","type":1}],
 "Answer":[{"name":"example.com","type":1,"TTL":146,
            "data":"23.192.228.80"}]}

No special client. No port but 443. A single HTTPS request, the same shape as fetching a web page, and a name resolved by a machine on the other side of the world that has never heard of your network or your rules. Google runs the same endpoint, so does Quad9, so do dozens of others.

Now look at what your firewall sees. A TLS connection to a web server on 443, which it cannot read inside because that is the point of TLS, and cannot tell from the hundreds of others opening every second to content delivery networks and analytics and adverts. The DNS question is gone. It left the building dressed as web traffic and nobody at the door could see its face.

On the wire, a DoH lookup is a DNS question sealed inside a web request.Same question. One is written on the envelope, one is sealed three layers in.Plain DNS, port 53DoH, port 443DNS queryname=badsite.example type=AThe firewall reads this in full.It sees the name, checks it, blocks or logs it.TLS record (all the firewall sees)HTTP request to a web serverDNS query (sealed)name=badsite.exampletype=AOn port 443 the firewall sees only the outer layer.A TLS connection to a web server, the same as a page load, an advert or an analytics beacon. The name never surfaces.
A plain DNS query is written on the envelope: the firewall reads the name and acts on it. A DoH query is the same question sealed inside an HTTP request inside a TLS record, and all the firewall sees is the outer layer, a connection to a web server on 443 that looks like every other one. The name never surfaces where a control could reach it.

There are three ways a client can move a DNS lookup, and it is worth laying them side by side, because the difference is the whole post.

TransportPortYour resolver sees itRefusable at the borderEncrypted
Plain DNS53 (UDP/TCP)Yes, if you force it throughYes, close 53 outboundNo
DNS over TLS (DoT)853Only if it points at yoursYes, close 853 outboundYes
DNS over HTTPS (DoH)443Only if it points at yoursNo, you cannot close 443Yes

Plain DNS is readable and blockable, and that is exactly why it was easy to control and easy to spy on. DoT encrypts the lookup but keeps its own port, so you can still refuse it at the border. DoH is the one with no handle on it: encrypted like DoT, but sharing the one port you can never close, so the only lever left is which resolver the client chose, and that is the lever this post is about.

Who Gets To Pick The Resolver

The reason this matters is that a modern machine has five different things on it that can each decide where DNS goes, and you control exactly one of them by default.

Five things on one machine can pick a resolver. You set one of them.Who decides where the lookup goesLayerWho picks the resolverYours by default?Operating systemYour network, through DHCP or router advertisementsYesBrowserThe vendor's default, unless your policy overrides itOnly if you set the policyApplication or its libraryWhoever wrote the code, at build timeNoScript on a web pageWhoever runs the site, or any script it loadsNoMalwareThe operator, hardcoded, often by address not nameNoNone of the bottom three needs administrator rights, a setting changed, or anything you would see in the OS.
Five layers on one machine, each able to choose its own resolver. The operating system uses the one your network hands out, and that one is yours. The browser uses its vendor’s default unless your policy says otherwise. An application, a script on a web page and malware each choose for themselves and need nothing from you to do it.

The operating system asks the resolver your network handed out over DHCP or router advertisements. That one is yours, and it is the model everything older than about 2019 assumed: one resolver, handed out by the network, which is why network-level DNS controls worked for thirty years.

The browser broke it. Firefox and Chrome both ship the machinery to do their own DoH, to a resolver their vendor picked, over your head, standing down only when they spot a managed network. And an application can carry its own DoH client and a hardcoded resolver in its code, decided at build time; it does not read your DHCP or ask. Plenty of legitimate software already does.

A script on a web page is the one that should stop you, because it needs nothing installed at all. That curl command above is a single HTTPS request, and a browser makes HTTPS requests for a living. A few lines of JavaScript on any page a user opens can send lookups to a public DoH endpoint, because the big providers deliberately allow cross-origin requests so web apps can use them, the stated purpose in RFC 8484. The page you are reading could resolve names through a resolver in another country right now and you would see one more HTTPS connection.

And malware picks its own resolver for the obvious reason: it does not want you to see where it is calling. It carries the resolver in its code, often reaching it by address so there is no bootstrap lookup to catch, and needs your permission for none of it.

Read that column again. The bottom three need no administrator rights, no setting changed, and nothing that shows in the operating system. The control you spent years building, one resolver, one blocklist, one log, assumed the top row was the only row. It has not been for years.

The Same Trick The Browser Vendors Feared

The web-page case is neither theoretical nor recent. It is how protocol helpers get abused: a web page emits bytes, something downstream acts on them, and cannot tell they came from an attacker’s page rather than a real client, because on the wire they are identical. With DoH the downstream piece is a public resolver, which answers with no way to know the JavaScript asking came from a phishing page, and your resolver, the one with the blocklist and the log, was never in the path to have an opinion. Not a hole punched through your controls, but a road built around them, paved in the same encryption you tell everyone to use.

It Is Already The Malware Author’s Channel

You do not have to imagine how this gets used. It has been documented for years, by named researchers, on real samples, and the direction of travel is one way only: from a criminal bot in 2019 to a state intelligence tool the year after, and busier every year since, with fresh backdoors still landing in 2026.

SampleReportedActorWhat DoH carried
Godlua1st July 20192Criminal botnetThe lookup for its command server’s name
PsiXBot6th September 20193Criminal (infostealer)Command-and-control domain resolution, via Google’s DoH
OilRig (APT34)Q2 20204Iranian state-alignedStolen data, exfiltrated over DoH to Google and Cloudflare
ChamelDoH16th June 20235ChamelGang (APT)Its whole command channel, DNS TXT over DoH to Google and Cloudflare
BRICKSTORM4th December 20256China-nexus backdoorC2 buried under HTTPS and nested TLS, DoH among the layers
Dohdoor26th February 20267Undetermined (UAT-10027)C2 lookups sent to Cloudflare’s DoH on 443

Godlua, the first widely reported case, was a Linux and Windows backdoor whose write-up records it “uses DNS over HTTPS to get the C2 name to ensure secure communication between the bots, the Web Server and the C2”2. On a network watching port 53, resolving your command server is a gift to the defender. Over DoH there is nowt to watch.

Proofpoint’s line on PsiXBot is the one worth quoting, a threat-intelligence vendor saying the quiet bit out loud. Using DoH for command and control, they wrote, “should be a warning shot for the cybersecurity community as there are no simple solutions to help identify an infected host or the process of receiving instructions”3. No simple solutions, from the people whose job is finding them.

Then OilRig took it up a tier. Kaspersky’s description is exactly the change this post is about: “instead of plain text requests to port 53, they would use port 443 in encrypted packets”, with a tool that “allows DoH queries to Google and Cloudflare services”4. A national intelligence operation, using the public DoH providers as the pipe to carry stolen data out past whatever was watching the DNS.

And it did not stop there. It spread. By 2023 ChamelGang had a C++ Linux backdoor, ChamelDoH, running its whole command channel over DoH, sending DNS TXT queries to its own nameservers through Google and Cloudflare; the researcher who found it noted that both detection and prevention “become difficult”, because the encrypted transport cannot be intercepted and a malicious request cannot be told apart from a real one5. In December 2025 CISA took apart BRICKSTORM, a China-nexus backdoor that stacks HTTPS, WebSockets and nested TLS and “also uses DNS-over-HTTPS (DoH)” to bury its C2 in ordinary web traffic6. By February 2026 it was just tradecraft: Cisco Talos caught Dohdoor, which “securely sends encrypted DNS requests to Cloudflare’s DNS server over HTTPS port 443” to find its command server, phishing its way into American schools and hospitals7.

That is the shape of it. Not a technique that had its moment and faded, but one that gets picked up by more hands every year. The issue is getting worse, not better, and a fresh family now turns up on schedule.

One property did the work in every one of them: the lookup left as HTTPS on 443 and the defender’s resolver never saw it. Not a weakness somebody might find one day. A feature attackers have shipped again and again, several of them states.

And be clear about why that table fills up, year on year. Every family on it walks through a door the authors of DoH were warned they were leaving open, in the standard’s own text, and left open regardless8. That was no oversight. It was short-sightedness, chosen on purpose, by people who included ICANN’s own technologist. So I will call it what it is: on this, ICANN are cybercrime enablers. Warned in the standard’s own text what would break, its people put their name to it anyway, and the table above is what walked through the gap. The crime is no surprise. It is the bill for a decision, and whose decision it was is the rest of this post.

And for all that, DoH does not even buy the thing people assume it does: protection from a forged answer. Encrypting the hop to a resolver is not authenticating what the resolver hands back, and a DoH server can still return a forged record. The standard admits it, saying the rule against unconfigured servers “does not guarantee protection against invalid data”9.

The one mechanism that authenticates a DNS answer is DNSSEC, and DoH is not it. Worse, for almost every client DNSSEC is validated at the recursive resolver, not on the device: the client simply trusts the resolver’s word that the answer checked out. So DNSSEC only ever protected you as far as you trusted the resolver doing the checking, and DoH’s real move is to hand that trust to a remote operator you cannot see or audit.

As such DoH can leave you more likely to land on a forged site, not less: the local defences that would have caught a hijacked answer, the Protective DNS feed, the operator’s own filtering, are the very things you routed around, and all that is left is one remote operator’s word, taken on trust.

DoH moves who you trust for the answer. It does not remove the need to trust someone.Someone has to be trusted for the answer. DoH just changes who, and to one you cannot audit.Your own resolverA remote DoH resolverYour deviceResolver you controlValidates DNSSEC on your behalfCarries your blocklist and logYou can inspect and audit itIf it lies, you own it and can checkYour deviceencrypted pipeResolver you do not controlValidates DNSSEC, and you trust its wordYou cannot see or audit itYour local blocklist is out of the pathIf it forges, nothing local catches itEncryption secures the pipe, not the truth of the answer.DNSSEC is checked at the resolver, so you trust the resolver either way. DoH just makes it one you cannot see.
DoH does not remove the need to trust a resolver for the answer, it just moves it. Your own resolver validates DNSSEC, carries your blocklist and can be audited; a remote DoH resolver validates on your behalf and you take its word, over an encrypted pipe that secures the hop and says nothing about whether the answer is true.
What DoH is sold as protecting againstDoes it?
Eavesdropping on the hop to the resolverYes, the lookup is encrypted
Tampering on that hopYes
A forged record from the resolver itselfNo, that is DNSSEC’s job, not DoH’s
A malicious, coerced or compromised resolverNo, you now trust it completely
Malware, tracker and court-order blockingNo, it routes around them

And none of this is a new idea DoH tripped over by accident. Filtering malicious domains at the resolver is exactly what OpenDNS has done for the best part of twenty years, blocking phishing and malware for millions of users before the answer ever reached them, which is the model Cisco paid to own in 201510. Two decades of resolver-level security that protected people who never configured a thing, and DoH undermined the whole model in a single hit: point the app at its own resolver, and OpenDNS, or whatever your network chose, is not in the path any more.

Why The Old Answer Stopped Working

For as long as DNS lived on port 53, the network answer was simple. Force every client to use your resolver, and block outbound port 53 everywhere else at the border. A machine reaching for an outside DNS server got refused, so it had to come through yours, so your controls applied to everything. Crude, and it worked.

DoH kills that in one move by using 443. You cannot block outbound 443. It is the web. So the port you would close to force DNS through your resolver is the one you can never close, and the encryption that stops your ISP snooping also stops you telling a DoH lookup from a page load.

The two things you would use to regain control, close the port and read the traffic, are both gone by design. Defeating exactly those two, in the hands of a hostile network, is what DoH was built to do.

And reading the traffic is not the escape it sounds like, because there is only one way to do it: break and inspect all of it. To see the DNS inside a 443 connection you have to man-in-the-middle every HTTPS connection on the network, put your own root certificate on every device, and decrypt and re-encrypt the lot. That is what a growing number of admins now resort to, to claw back the visibility a single firewall rule used to give them for nowt.

And it is a far worse trade: you have weakened TLS for everything, put a decryption box in the path of every login and every bank session, and built one target that compromises all of it, a posture US-CERT warned against outright11. The proportionate control was broken, so the disproportionate one is what is left.

Which is the bind. The mechanism that shields a journalist on airport WiFi from a hostile network is the one that shields malware on your network from you, and the protocol cannot tell the two apart. A resolver being bypassed does not know whether it is a censor or a security team. It only knows it has been cut out.

The Correct Answer Was Always DNS Over TLS

Here is the part that gives the game away. Encrypting DNS never needed any of this. It was done two years before DoH, in a way that left the person running the network able to do their job.

DNS over TLS, RFC 7858, is from May 2016. Its abstract says what it is for in the first line: to “provide privacy for DNS”, encryption that “eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network”12. That is the whole privacy case, met: the coffee shop and the ISP shut out exactly as they are with DoH, because the lookup is encrypted end to end.

And it was co-authored by Paul Hoffman, who then co-authored the DoH standard too1. Not two rival camps, then. The same people, who had already solved privacy, solving it again a different way.

Who Hoffman is matters, because it says where this came from. He is no bystander in DNS: his name is on more than eighty RFCs, the DNS terminology standard among them, and he does the work as a technologist at ICANN13. So the standard that hid DNS on 443 was co-written from inside ICANN, the American body that decides what goes in the root.

And ICANN is not the disinterested steward the word implies. I have set its record out separately: built in California, answerable to California, and willing to use its position over the namespace for its own ends. This was no privacy campaign from the edge. It was the establishment that holds the root, meeting a privacy case it had already met in 2016 a second time, in a way that removed the network operator.

So ask what the second way added, because privacy was not it.

StandardYearPortEncrypts DNSOperator can still see it is DNS
DNS over TLS (RFC 7858)2016853YesYes
DNS over HTTPS (RFC 8484)2018443YesNo
Privacy was solved in 2016 by DoT. DoH came two years later and added only bypass.Encrypted DNS: what came first, and what came afterMay 2016DNS over TLS (RFC 7858), port 853Encrypts DNS. Operator can still see it is DNS. Privacy solved.Oct 2018DNS over HTTPS (RFC 8484), port 443Same lead author. Same encryption. Operator can no longer see it.Jul 2019Godlua: first malware to hide its C2 over DoHJul 2019ISPA brands Mozilla an "Internet Villain" for DoH, then withdraws itSep 2019PsiXBot resolves its C2 domains over Google's DoHFeb 2020Firefox turns DoH on by default in the US, resolver CloudflareQ2 2020OilRig (APT34) exfiltrates data over DoHThe privacy was complete in 2016.Everything below the second dot is bypass and what bypass was used for. None of it required a new privacy standard.
The order is the argument. DNS over TLS solved the privacy problem in 2016, on a port the network operator can still govern. DNS over HTTPS arrived two years later from the same lead author, added nothing to the privacy but the move to port 443, and everything below that second point is bypass and what bypass was used for.

The only box that changed is the last one. DoT runs on its own port, 853, so the operator can see that it is DNS and decide what happens to it: allow it to the sanctioned resolver, refuse it elsewhere. DoH puts the same encrypted lookup on 443 and mixes it into the web, where the operator cannot pick it out.

Same privacy, same encryption. The single difference between the two standards is whether the person running the network can still see their own DNS. That is not a privacy feature. Privacy shipped in 2016. It is a bypass feature, and it is the only thing DoH adds.

And they knew it. This is documented, not inferred. RFC 8484’s own Operational Considerations say it plainly: “Filtering or inspection systems that rely on unsecured transport of DNS will not function in a DNS over HTTPS environment due to the confidentiality and integrity protection provided by TLS”8.

Those systems are the security tools already protecting users: malware and command-server blocking, Protective DNS feeds, child-safety filters, enterprise inspection. The standard names them, in its own text, as the things that stop working. Breaking tooling that was already defending people was a choice, taken with eyes open and shipped on by default. Knowing the effect and choosing it anyway is a decision they can be asked to account for.

Which is why the privacy framing does not survive the timeline. Once DoT exists, privacy cannot be the reason for DoH, because privacy was already done, by the same author, two years earlier. So privacy was the smokescreen.

Pull it away and look at what the second standard actually set running: an arms race. It took a control that was one firewall line and turned it into a permanent chase, resolvers against blocklists against fresh resolvers, the operator losing by default, and a handful of US firms holding the plaintext at the end of it.

Call that a side effect of a privacy feature if you like. On the evidence, with DoT already shipped and the standard itself admitting it would break filtering, it is the point, and privacy was the word painted on the box. And it was pushed hard under that word, by the parties who gained.

Pushed and shipped DoHWhat else they are
MozillaCo-authored RFC 8484, then turned DoH on by default for US Firefox, resolver Cloudflare
GoogleShips DoH in Chrome, runs a large public DoH resolver, and is an advertising company
CloudflareThe default US Firefox resolver, so it receives those queries

The people selling it as privacy were the browser vendors, and the beneficiaries were not only the users.

Can I ask why, if the aim was privacy, the answer was not the encrypted-DNS standard that already existed and kept the operator in the loop, but a second one built so the operator could not see it? I am not asking who signed it off. I am asking what part of “privacy” required cutting out the one person accountable for the network.

Because that is the real target, and it is the network administrator: the professional responsible for the security and the safety of the network, treated as the adversary by default. DoH does not even remove the surveillance the privacy pitch complained about. As Bert Hubert of PowerDNS set out, DNS was “typically provided by the operator of a network”, and moving it to a third party by default is “a net-negative for privacy for everyone”, because that third party “gets a complete log per device of all DNS queries, in a way that can even be tracked across IP addresses”14.

The lookups are not hidden. They are handed to a US resolver operator instead of the admin, and the admin is the only party removed. The vendors know it, too. The “detect a managed network and stand down” logic in the next section exists precisely because the default overrides the admin, and they shipped the off-switch rather than change the default.

Now ask who gains from routing DNS past the operator. The poster child is the journalist on hostile airport WiFi, and that person is real. So is the advertising and tracking industry, whose domains walk past a network’s blocklist the moment an app or a browser resolves them over DoH.

Network-level blocking, the Pi-hole, the corporate blocklist, the filtering resolver, works by answering a tracker’s name with nothing. DoH is how the name gets answered anyway. And the largest operator of a public DoH resolver is Google15, an advertising company that also ships DoH in its own browser16.

A privacy feature, sold by the firm that sells the tracking, whose design defeats the tool people run to block it. Make of that what you will. I have made my mind up.

Even the crude version of this objection got aired. In July 2019 the UK ISP trade body nominated Mozilla an “Internet Villain” for DoH that would “bypass UK filtering obligations and parental controls, undermining internet safety standards in the UK”17. They picked a clumsy target and a worse frame, got shouted down, and withdrew it.

Strip the politics off, though, and the observation underneath was correct, and it holds whether the control being bypassed is a child-safety filter, a company blocklist or a Pi-hole in a spare room. DoH is built to get DNS past whoever runs the network.

And it is not a small matter, because DoH is now the hardest of the three to block at all. DoT sits on 853, where a network can still refuse it. DoH does not, so of every way DNS can leave a network it is the one with no handle on it, which makes it the biggest single risk of the lot.

That reaches the law, not just security. In the UK the blocking that carries legal weight is run at the ISP by DNS: the Internet Watch Foundation’s list of child sexual abuse material, and the copyright injunctions the High Court hands down under section 97A, are enforced through DNS and IP filtering on the resolver a customer is handed18.

Route the DNS half around that over DoH and the block does not apply to that client. A court can order a site blocked, a network can be told to enforce it, and a browser resolving over DoH finds the address anyway, over a channel the network cannot see and cannot close. Enforcing a cyber law or a court order at the network level, which is where it has always been done, becomes very close to impossible.

And this is where the bill lands on everyone, not just the network. Break the proportionate control, the surgical one that blocked a named domain at the resolver under a court order, and the state does not give up. It reaches for a blunter instrument. The UK’s Online Safety Act is that instrument: sweeping duties on platforms, mandated age checks, and Ofcom behind them with the fines, a regime that touches every user and every service in the country19.

I am not defending the Act. I am pointing at where the pressure for it came from. When the narrow tool that enforced the law at the network stops working, you do not get less enforcement, you get cruder, broader, more intrusive enforcement aimed at everyone, because the aimed version no longer holds. That is the price of breaking a basic control, and the people who broke it are not the ones paying it.

And ICANN could not care less, because from California it is not their problem. When a block fails or a platform breaches its duties, it is not ICANN that gets held up in court, it is the operator, the platform, the company, facing Ofcom and the fines. The fallout lands on everyone downstream of a decision the body that took it never has to answer for.

Break the surgical control and the state reaches for the sledgehammer. Everyone pays.Break the proportionate control, and a blunter one takes its placeThe surgical controlBlock one named domainat the resolver, under a court orderPrecise, proportionate,aimed only at the targetDoH breaks itthe lookup no longerpasses the resolverThe blunt instrumentThe Online Safety Act:age checks on everyone, duties onevery platform, Ofcom with the finesAimed at the whole countryBreak the narrow tool and the state does not give up.It reaches for the broad one, aimed at everyone, because the aimed version no longer holds.And the people who broke the narrow tool are not the ones who pay for the broad one.
The surgical control blocked one named domain at the resolver under a court order. DoH breaks it, so the state reaches for the blunt instrument: the Online Safety Act, aimed at every user and every platform in the country. Break the narrow tool and you do not get less enforcement, you get a broader one nobody can aim.

Line the consequences up and they are all the same shape: a thing the network used to enforce at the resolver, and no longer can.

What the network enforcedHow it was doneUnder DoH
Malware and command-server blockingresolver blocklist and threat feedbypassed; Godlua, PsiXBot and OilRig did exactly this
Ad and tracker blockingPi-hole or a filtering resolverbypassed; the tracker’s name resolves anyway
Court orders and the IWF listISP DNS filteringDNS-based block does not apply to that client

DoT was the honest answer. It encrypts your DNS and leaves the operator able to do their job. DoH kept the encryption and added one thing on top: the operator can no longer see it. Everything else about it is downstream of that one choice.

Made In The US, Fought Over Everywhere Else

None of this stops at the English Channel, and reading it as a British problem shrinks it to a fraction of its size. The same shape runs right across Europe and out to Australia. A legal instrument in at one end, a DNS block on the network at the other.

Australia has its Federal Court order the ISPs to disable access to overseas infringing sites under section 115A of the Copyright Act20. Portugal skips the court entirely: an administrative memorandum under which rights holders notify a body called MAPINET, and the ISPs block by DNS inside fifteen working days21. Different statutes, one load-bearing assumption, and it is the assumption DoH kicks out from under all of them. That the client resolves through the resolver it was handed.

So watch what a state does when that assumption fails. It stops leaning on the ISP and starts ordering the public resolvers themselves to return the wrong answer. That is not a forecast. It is a stack of judgments, and it is getting taller.

CountryThe blocking orderThe public resolverWhat happened
ItalyAGCOM’s Piracy Shield, names blocked inside 30 minutesordered to filter, 1.1.1.1 includedCloudflare refused, was fined €14,247,698, and is appealing22
FranceCanal+ sports-streaming injunctionGoogle, Cloudflare and OpenDNS all namedCloudflare serves an HTTP 451, Google fails the query in silence, OpenDNS switched itself off for the country23
Belgiumover 100 sports-piracy domainsthe same three resolversCloudflare complies with a 451, Google stays silent, OpenDNS left Belgium as well23
GermanyUniversal Music v Cloudflareordered at first instance, 1.1.1.1 includedoverturned on appeal, Cologne holding the resolver “passive, automatic and neutral”24
NetherlandsBREIN’s dynamic blockadeISP level, the resolver not yetZiggo, KPN and the rest block by DNS and IP, updated on request25

Read that as one thing, not five. A few US companies rewrote DNS for the whole planet on their own authority, broke the proportionate control every one of these countries had built, and left the courts to work out what to do with the wreckage. The answers those firms give, hauled in front of a different bench every few months, tell you exactly what the rest of the world weighs with them. One appeals and cries censorship. One fails the lookup and tells the user nothing. And OpenDNS, the resolver that quietly filtered malware for twenty years and that this post has already held up as the model to copy, does not argue at all. It switches itself off for France and for Portugal rather than serve them on those terms26.

Sit with that last one. It is the good example in this whole piece walking out of the room. The service that protected people who never configured a thing now finds a whole country easier to abandon than to serve, and the reason traces straight back to a design decision taken in California by people who never had to think about a French court or a Portuguese one.

That is the pattern, and I will name it. This is what US platform engineering does to everywhere that is not the United States. It builds for its own market, ships the result to the world as the default, and treats every other country’s law, every regulator, every community left downstream of the change as somebody else’s mess to clear up.

And the home government backs the firms to the hilt. In February 2025 the White House put its name to a memorandum casting other countries’ digital laws as “overseas extortion” of American companies, naming the UK and the EU and pointing the trade representative at tariffs by way of reply27. Six months on, a US regulator wrote to a dozen American tech firms warning that obeying the UK’s Online Safety Act or the EU’s Digital Services Act might itself break US law28. Read that twice. The country whose companies broke the controls now tells those companies that complying with another democracy’s answer to the breakage is the offence.

That says all of it. A law passed by an elected parliament in Westminster or Brussels is recast, from Washington, as an attack on America, and the firms are told to ignore it. It is not that they weighed the rest of the world and chose against it. The rest of the world was never on the scale.

The Fix Is Not To Ban Encryption

So the lazy conclusion is “block DoH”, and it is wrong, the same way “block ICMP” is wrong on the firewall. You do not want unencrypted DNS back. Clear-text lookups on port 53 are a real exposure and going back to them to regain visibility is trading one hole for another.

The thing you actually lost was not the encryption. It was the choice of resolver. So take that back and leave the encryption exactly where it is.

Keep the encryption. Take back the choice of resolver.Encrypted all the way. One machine allowed to talk DNS to the world.Clients53, DoT or DoH,to your resolver onlyDDR tellsthem whereYour resolverserves DoH and DoT itselfblocklist, threat feed, logcanary answered NXDOMAINBorderonly thisUpstreamor the rootsclient straight to 53, 853 or a public DoH resolver: refusedNothing here turns encryption off.The only thing taken away from the client is the right to choose somebody else's resolver.
The corrected layout. Clients may use plain DNS, DNS over TLS or DNS over HTTPS, but only to your own resolver, which now serves all three. That resolver keeps the blocklist and the log and is the only machine allowed to send DNS of any kind past the border. Port 53, port 853 and known public DoH resolvers are refused from everything else. Nothing here turns encryption off. The only thing taken from the client is the right to choose somebody else’s resolver.

The shape is the same one that fixes the DNS in an Active Directory domain: the argument is never “turn the feature off”, it is “decide who is allowed to drive it”. Here is what that means in parts.

Run encrypted DNS yourself. Stand up a resolver that serves DoH and DoT, not just port 53, so a client that wants encryption gets it from you. You cannot tell clients “no DoH” and mean it while offering no encrypted resolver of their own. Give them one, and keep the blocklist, the threat feed and the logging on it as before.

Advertise it, so clients find it on purpose. Discovery of Designated Resolvers (RFC 9462) lets a client query a special name, learn its network’s own encrypted resolver, and upgrade to DoH or DoT against that automatically29. A DDR-aware client then encrypts its DNS and uses yours: the privacy the user wanted and the control you needed, in one move.

Answer the browser’s own off-switch. Firefox checks a canary domain, use-application-dns.net, before turning DoH on by default: answer it with NXDOMAIN or SERVFAIL and Firefox stands down to the system resolver30. Two honest limits, both in Mozilla’s words. The canary “only applies to users who have DoH enabled as the default option. It does not apply for users who have made the choice to turn on DoH by themselves”30. So it is a default-off signal, not a lock, and it does nothing on the app and the malware, which never asked the browser anything.

Set the browser policy where you manage the machine. On a device you own, do not rely on the canary. Chrome’s DnsOverHttpsMode takes off, automatic and secure, and Google’s docs state that where it is unset, “for managed devices DNS-over-HTTPS queries will not be sent”31; Chrome disables its own auto-DoH the moment it sees an enterprise policy16. Point it at your resolver, or set it off and let DDR carry the encryption. Firefox has the matching Enabled, ProviderURL and Locked knobs32. Managed machine, managed decision, and the row you can actually close.

Refuse the alternatives at the border. The rules are short, and they all say the same thing: DNS of any kind, to the outside, only from your resolver.

RuleFromEffect
Block outbound port 53Everything except your resolverNo plain DNS to the outside
Block outbound port 853Everything except your resolverNo DoT to an outside resolver
Block HTTPS to public DoH resolver addressesEverything except your resolverCuts off the well-known DoH providers
Point your resolver’s upstream at Protective DNSYour resolverMalware domains refused before connection

You will not catch every DoH endpoint by address, and you cannot, because a new one is just a web server and there is no end of web servers. So sit with what that block now costs. To do for DoH what block 53 outbound did for free, you pull a list of DoH server addresses that somebody else keeps scanning for you: the maintained blocklists exist because this is the only way left, and one of them re-resolves every known public DoH domain to its current IPs every hour, by scheduled job, and ships the changes33. That is the trade the bypass forced.

Blocking outside DNSThen, on port 53Now, DoH on 443
The ruleone line: block 53 outboundsubscribe to a DoH-server IP blocklist
Completenesscomplete the moment it was savednever complete; new endpoints keep appearing
Upkeepnonerescanned hourly, pulled and reapplied
What it takesthe firewallthe firewall plus somebody else’s maintained feed

A control that was one static line is now a subscription to a moving target, chasing web servers that anyone can stand up faster than a list can name them. Protective DNS closes the other end: point your resolver’s upstream at a filtering service like the NCSC’s PDNS, which “was built to hamper the use of DNS for malware distribution and operation”34, and the bad domains are refused before the connection is made, for every client that comes through your resolver, which, once these rules are in place, is all of them.

Put those against the five rows from earlier, and every one of them has a control that closes it. That is the test of a fix: not “did we block DoH”, but “for each thing that can choose a resolver, what stops it choosing the wrong one”.

Who picks the resolverWhat closes it
Operating systemDDR points it at your resolver; keep it that way
BrowserPolicy on managed machines; the canary on the rest
Application / libraryBorder block on 53, 853 and public DoH resolvers
Script on a web pageSame border block; Protective DNS on your upstream
MalwareSame border block, plus Protective DNS refusing the domain

None of that turns a single bit of encryption off. Clients still get DoH, they just get it from you, and the ones that try to get it from somewhere else hit a wall. The privacy is intact and the control is back. As such, the only thing anyone lost is the freedom to pick a resolver you never approved, and that was never theirs to have on a network you are responsible for.

Can I Ask What Chose That Resolver

Here is the question to put to anyone who tells you the network is fine as it is.

When a machine on your network resolves a name, what decided which resolver answered? If the honest answer is “whatever the OS was handed”, good, but only if you have closed the other four rows of that table, because otherwise it is “whatever the OS was handed, unless the browser, an app, a web page or something nastier chose different, in which case I have no idea and no record”. That is not a DNS setup. That is a hope, and hope catches nowt.

I am not asking who runs the resolver. I am asking what, on each machine, gets to choose it, and whether you could name the resolver every lookup went to yesterday. On a network where DoH is unmanaged you cannot, and the gap is every app that bundles its own resolver, every page a user opens, and every piece of malware that read the same research I just linked. Three named threat actors built their channels on this exact gap, and one answers to a government.

A protocol that takes the choice of resolver away from the network was always going to be a gift to whoever the network was trying to watch, and pretending otherwise because the marketing said “privacy” is how a control that mattered gets switched off by default and nobody logs the day it happened.

Encrypt your DNS. Run the resolver yourself. Advertise it, answer the canary, set the policy, close the border. Keep the encryption and keep the choice. You can have both, and if you run networks for a living, having both is the job.

Privacy Was The Word On The Box

So credit where it is due. Thanks to ICANN, the American body that holds the root and co-wrote this from the inside, for running the US tech playbook one more time: take a problem that was already solved, wrap the fix in a virtuous word, and centralise the result onto a handful of US firms who end up holding the plaintext.

And it is always the US. The body that holds the root, the resolver two browsers now default to, the advertising firm running the biggest public one, the country the plaintext lands in: American, every time. It is a pattern, not a run of bad luck.

Privacy was the smokescreen. DNS was encrypted, private and still governable on port 853 in 2016, and everyone who mattered knew it. What the establishment shipped on top was a protocol built to blind the one person accountable for the network, a permanent arms race of blocklists rescanned by the hour, and court orders that stop dead at the browser.

Whether that was ineptitude or greed I will let you decide, though the record I linked points one way. Either way it beat common sense.

And decisions like this one are why the calls to take the root off ICANN keep coming back, and why they land: so the international community gets a say, instead of one country’s institution deciding the DNS for everyone else and calling it stewardship.

We used to do all of this with one line.


  1. RFC 8484 — DNS Queries over HTTPS (DoH), October 2018. The introduction states the goal of “allowing web applications to access DNS information via existing browser APIs in a safe way consistent with Cross Origin Resource Sharing (CORS)”. ↩︎ ↩︎ ↩︎

  2. 360 Netlab — An Analysis of Godlua Backdoor, 1st July 2019. Records that the sample “uses DNS over HTTPS to get the C2 name to ensure secure communication between the bots, the Web Server and the C2” — the first widely reported malware to abuse DoH. ↩︎ ↩︎

  3. Proofpoint — PsiXBot Now Using Google DNS over HTTPS, 6th September 2019. Reports the malware resolving hardcoded C2 domains through Google’s DoH service, and warns it “should be a warning shot for the cybersecurity community as there are no simple solutions to help identify an infected host or the process of receiving instructions”. ↩︎ ↩︎

  4. Kaspersky Securelist — APT trends report Q2 2020. On OilRig (APT34): the DNSExfiltrator tool “allows the threat actor to use the DNS over HTTPS (DoH) protocol […] instead of plain text requests to port 53, they would use port 443 in encrypted packets […] which allows DoH queries to Google and Cloudflare services”. ↩︎ ↩︎

  5. The Hacker News — ChamelDoH: New Linux Backdoor Utilizing DNS-over-HTTPS Tunneling for Covert CnC, 16th June 2023, reporting Stairwell’s finding (Daniel Mayer). ChamelGang’s C++ Linux implant is “a tool for communicating via DNS-over-HTTPS (DoH) tunneling”, sending DNS TXT requests to rogue nameservers through legitimate DoH providers so that “both detection and prevention become difficult”. ↩︎ ↩︎

  6. CISA — Malware Analysis Report: BRICKSTORM Backdoor, AR25-338a, 4th December 2025. “For C2, BRICKSTORM uses multiple layers of encryption (HTTPS, WebSockets, nested Transport Layer Security [TLS]) to hide its communications with the cyber actors’ C2 server. It also uses DNS-over-HTTPS (DoH)”. ↩︎ ↩︎

  7. Cisco Talos — New Dohdoor malware campaign, 26th February 2026. The backdoor, attributed to actor UAT-10027, “securely sends encrypted DNS requests to Cloudflare’s DNS server over HTTPS port 443” to resolve its command server, and targets US education and healthcare through phishing. ↩︎ ↩︎

  8. RFC 8484, Section 10, Operational Considerations: “Filtering or inspection systems that rely on unsecured transport of DNS will not function in a DNS over HTTPS environment due to the confidentiality and integrity protection provided by TLS.” The effect on network filtering is stated in the standard itself. ↩︎ ↩︎

  9. RFC 8484, Section 9, Security Considerations: a DoH server “can give a client invalid data in response to a DNS query”, and while the standard disallows responses from unconfigured servers, “this prohibition does not guarantee protection against invalid data, but it does reduce the risk.” DoH secures the transport, not the authenticity of the record; that is DNSSEC’s job. ↩︎

  10. OpenDNS — a recursive DNS resolver founded by David Ulevitch in 2005/2006, providing security filtering (phishing and malware blocking) and content filtering at the resolver for home and enterprise users; acquired by Cisco in 2015 and now part of Cisco Umbrella. Resolver-level DNS security long predates DoH. ↩︎

  11. US-CERT / CISA — HTTPS Interception Weakens TLS Security, alert TA17-075A, 16th March 2017. Warns that intercepting HTTPS by presenting a locally-trusted certificate and decrypting traffic weakens security, because many interception products fail to properly verify certificates and downgrade the connection’s protections. ↩︎

  12. RFC 7858 — Specification for DNS over Transport Layer Security (TLS), May 2016. The abstract: “This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS. Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network.” Co-authored by P. Hoffman (ICANN), who also co-authored RFC 8484. DoT uses the dedicated port 853. ↩︎

  13. Paul Hoffman (engineer) — “the author or co-author of over 80 Requests for Comments (RFCs)” and “currently a technologist at ICANN”; his IETF datatracker profile lists the record, including RFC 7858 (DoT), RFC 8484 (DoH) and RFC 8499 (DNS terminology). ↩︎

  14. Bert Hubert (PowerDNS) — Centralised DoH is bad for Privacy, in 2019 and beyond, RIPE Labs. DNS is “typically provided by the operator of a network”; centralised DoH “by default” is “a net-negative for privacy for everyone”, because the third party “gets a complete log per device of all DNS queries, in a way that can even be tracked across IP addresses”. ↩︎

  15. Google — DNS-over-HTTPS (DoH) — JSON API. Google Public DNS, one of the largest public resolvers, operates a DoH endpoint (dns.google) alongside Chrome’s own DoH support. ↩︎

  16. Chromium Blog — A safer and more private browsing experience with Secure DNS, May 2020. “If you are an IT administrator, Chrome will disable Secure DNS if it detects a managed environment via the presence of one or more enterprise policies.” ↩︎ ↩︎

  17. TechCrunch — Internet group brands Mozilla ‘internet villain’ for supporting DNS privacy feature, 5th July 2019 (Wayback snapshot). The ISPA nomination said DoH would “bypass UK filtering obligations and parental controls, undermining internet safety standards in the UK”; the nomination and the Internet Villain category were withdrawn after backlash. ↩︎

  18. Web blocking in the United Kingdom — the Internet Watch Foundation child-abuse-image list and copyright injunctions under section 97A of the Copyright, Designs and Patents Act 1988 are implemented by ISPs; “The technical measures used to block sites include DNS hijacking, DNS blocking, IP address blocking, and Deep packet inspection.” ↩︎

  19. UK Government — Online Safety Act: explainer. “The Online Safety Act 2023 […] puts a range of new duties on social media companies and search services”, with the “strongest protections […] designed for children”, including requirements to prevent children accessing harmful and age-inappropriate content; enforced by Ofcom. ↩︎

  20. Copyright Act 1968 (Australia), section 115A, “Injunctions relating to online locations outside Australia” — the Federal Court may order a carriage service provider to “take reasonable steps to disable access to the online location”, the Australian form of ISP-level site blocking by DNS and IP. ↩︎

  21. EDRi — Portugal: “Voluntary” agreement against copyright infringements. Under a 2015 memorandum of understanding, rights holders notify MAPINET, which forwards to the regulator IGAC, and “IGAC then contacts Internet Service Providers (ISPs) to restrict access to the websites through ‘Domain Name System (DNS) blocking’” within 15 working days, with no court order. ↩︎

  22. TorrentFreak — Italy Fines Cloudflare €14 Million for Refusing to Filter Pirate Sites on Public 1.1.1.1 DNS. Under Italy’s Piracy Shield, AGCOM (order 49/25/CONS) ordered DNS providers including Cloudflare’s public resolver to block; Cloudflare, calling it “unreasonable and disproportionate”, refused and was fined €14,247,698, which it is appealing. ↩︎

  23. TorrentFreak — DNS Piracy Blocking Orders: Google, Cloudflare, and OpenDNS Respond Differently, 11th May 2025. Under Canal+ sports-streaming injunctions in France and Belgium the public resolvers were ordered to block: Cloudflare returns an HTTP 451, Google silently refuses the query, and OpenDNS “pulled the plug” on both countries rather than comply. ↩︎ ↩︎

  24. TorrentFreak — Cloudflare Applauds Court for Rejecting DNS Piracy Blocking Order. In Universal Music v Cloudflare (the DDL-Music case) a lower court had ordered Cloudflare to block on its 1.1.1.1 resolver; the Higher Regional Court of Cologne declined to extend the duty to the resolver, which “contributes to the connection of internet domains in a purely passive, automatic and neutral manner”. ↩︎

  25. TorrentFreak — Dutch ISPs Must Block Pirate Bay Proxies and Mirrors Again, Court Rules, 15th October 2020. BREIN holds a “dynamic” blocking order against Ziggo, KPN and others; the court treats DNS blocking as a “clear and verifiable” measure, and new domains and proxies are added to the ISP blocklist on request. ↩︎

  26. Complete Music Update — OpenDNS pulls plug on France and Portugal after web-blocking injunctions. Cisco’s OpenDNS: “Due to a court order in France issued under the French Sport code and a court order in Portugal issued under the Portuguese Copyright Code, the OpenDNS service is not currently available to users in France […] and in Portugal.” ↩︎

  27. The American Presidency Project — White House Fact Sheet: Directive to Prevent the Unfair Exploitation of American Innovation, 21st February 2025. The memorandum directs the US Trade Representative to consider tariffs in response to other countries’ digital-services taxes and regulations, the EU’s and UK’s included, framed as foreign governments appropriating “America’s tax base”. ↩︎

  28. A&O Shearman — FTC chairman warns major tech companies of censorship in EU DSA and UK Online Safety Act, on letters of 21st August 2025: “Compliance with the requirements of non-US laws, such as the requirements in the EU Digital Services Act (DSA) and UK Online Safety Act, may result in companies censoring content”, which the regulator warns could conflict with US law. ↩︎

  29. RFC 9462 — Discovery of Designated Resolvers (DDR), November 2023. Defines how a client discovers “a resolver’s encrypted DNS configuration” and upgrades to it, querying _dns.resolver.arpa for the network’s Designated Resolver. ↩︎

  30. Mozilla — Canary domain — use-application-dns.net. “The canary domain only applies to users who have DoH enabled as the default option. It does not apply for users who have made the choice to turn on DoH by themselves.” A response other than NOERROR with an A/AAAA record — such as NXDOMAIN or SERVFAIL — signals Firefox to disable application DoH. ↩︎ ↩︎

  31. Google — DnsOverHttpsMode policy. Values off, automatic and secure; “If this policy is unset, for managed devices DNS-over-HTTPS queries will not be sent.” ↩︎

  32. Mozilla — Policy templates: DNSOverHTTPS. Enabled turns DoH on or off, ProviderURL sets the resolver, Locked “prevents the user from changing DNS over HTTPS preferences”, ExcludedDomains and Fallback tune the rest. ↩︎

  33. dibdot/DoH-IP-blocklists — a maintained list of the domain names and resolved IPv4/IPv6 addresses of public DoH servers, for firewall blocking; the lookup script “runs automatically every hour via GitHub actions” and updates the address lists when they change. jameshas/Public-DoH-Lists is a second, auto-generated equivalent. That these have to exist, and be rescanned continuously, is the point. ↩︎

  34. NCSC — Protective Domain Name Service (PDNS). “PDNS was built to hamper the use of DNS for malware distribution and operation […] a recursive resolver which prevents access to domains known to be malicious.” ↩︎