Not Using a Post-Quantum Key Exchange: What ssh Is Telling You
OpenSSH 10.1 warns when a connection settles on a classical key exchange. It is your client describing the server's offer, it goes silent the moment you pin KexAlgorithms - so a hardening line from 2018 hides it - and four algorithm names count as post-quantum, not the two most write-ups list. The server change, the client options, the commands that report what was actually negotiated, and the same migration in DoH and TLS.
Two Ways Out of a QUIC Deadlock, Both Closed Years Ago
After we reported an nginx HTTP/3 handshake that stalls forever on one lost packet, a maintainer reproduced it and a core developer diagnosed it further than our report had. His answer names two commits: one from October 2020 that added an escape hatch congestion control now silently swallows, and one from February 2021 that replaced the other escape hatch with PING frames. Neither is a bug alone; the defect lives in the overlap, and it took a post-quantum ServerHello to expose it.
A Leak Test Cannot Tell You Whether Your DNS Was Encrypted
A DNS leak test reports which resolver answered, and people read it as proof the query was encrypted. It is a different question: encryption happens on the hop a leak test never observes, so plaintext port 53 and DoH to the same resolver produce an identical result. The commands that do check it per protocol - DoH, DoH3, DoT, DoQ, ECH and DDR - plus what Windows, macOS, iOS and Android can and cannot show you, and why a browser is the only check that works on all four.
Accept DNS Configuration: Why Tailscale Replaced Your Resolver
Tailscale's --accept-dns defaults to true, so joining a tailnet hands DNS on that device to the tailnet and your configured encrypted resolver stops being consulted. Nothing fails and nothing is reported - the only notice is a comment written into resolv.conf. The three commands that show where queries actually go, and the three ways to keep both MagicDNS and your own encrypted DNS.
Ten Browser Tabs Look More Robotic Than a Bot
Restoring ten tabs puts 61 DNS queries on the wire in 145 milliseconds at a 16 ms cadence, and every hostname is asked for twice. Measured against 226 real clients on this resolver, that burst is more regular than the most machine-like moment 164 of 167 of them produced in 76 minutes. Whether a timing check calls it automated comes down to one undocumented counting choice, plus three corrections to our own account of a false positive, the last of which reverses the conclusion the other two reached.
Banned by Our Own Refusals: When a Defence Cites Its Own Output
Three verified Meta crawlers were hard-banned while asking for /robots.txt. The evidence against them was a status code our own configuration had just returned to them. A second loop ran the other way: a 59-second ban deleted a real user's earned history, and 69 seconds later the same client drew 72 hours. Both loops measured from the durable records, the test that separates a client's mistake from your own, and how to check your own Fail2Ban jail for the same shape.
67,751 Challenges, Not One Attempt: Compute versus Memory-Hard Proof of Work
When a browser proof-of-work challenge is not slowing an attacker down, the obvious lever is to add difficulty bits. It is the wrong one. Timed in the browser's own WebAssembly solver, a compute-bound challenge at 26 bits has a median cost of 19.1 seconds for a real user and a worst run of 64.4, while a memory-hard Argon2id solve at 4 bits took a measured 1.4 seconds - because one memory-hard probe costs about 387,000 SHA-256 probes. Then a fleet of native solvers was built to answer the question the flood evidence could not: a botnet can earn about 0.6 tokens per second per core, at roughly 16 times our verification cost. A second, larger flood two days later reproduced the result - 2,036 challenges issued, none attempted - while the host sat at a load average of 1.31 across four cores. Includes four published corrections, one of them a pair of bad proofs that looked like the swarm finally trying and turned out to be the author's own phone. The benchmark scripts are published with the raw output of four passes.
The Handshake That Failed One Time in Twenty: a QUIC Initial CRYPTO Deadlock
DoH3 here failed about one attempt in twenty, silently. The fault was upstream: when a post-quantum ServerHello spans two QUIC Initial packets and one is lost, nginx detects the loss and requeues the CRYPTO frame, but congestion control suppresses it - and the client cannot acknowledge anything until that frame arrives, so the window never reopens. The packet capture, the two lines in different files that cause it, the candidate fixes proposed upstream and how one of them measured on a different TLS library, two hypotheses we measured and discarded, and why post-quantum certificates remove the headroom that fix depends on.
When Our Leak Test Invented a Leak: a SERVFAIL That Looked Like Google
Our leak test reported a phone leaking to Google Public DNS. It was not. The probe zone was delegated to a host whose port 53 ran only a recursive resolver, so every probe SERVFAILed: Quad9 retried 18 times in 194ms, gave up, and the phone fell back to a secondary resolver 57ms later, which we recorded as the leak. Why the three obvious fixes each destroy the test, the RD-bit hypothesis we measured and discarded, and the packet-layer split that fixed it.
When Hardening Refused Every POST: the http2_body_preread_size Cliff
We lowered nginx's http2_body_preread_size to 16k as an anti-DDoS measure. Any value below 65535 makes nginx refuse every HTTP/2 request carrying a body - every RFC 8484 DoH POST - for at least five weeks. nginx -t passed, GET worked, and the error log was empty because the refusal logs at INFO and REFUSED_STREAM means retry is safe. The code path, why nginx is right to refuse, 211 measured refusals, and a 60-second reproduction on localhost.
Zero Open Admin Ports: Hiding AdGuard Home and SSH
The admin panel and SSH on this server answer two devices over Tailscale and nobody else. Stock AdGuard Home bound to localhost, an nginx geo allowlist that resets strangers, a DNS split view from the resolver itself, and one nftables rule that hides port 22 - each gate verified from both sides, plus the one-command version for a Raspberry Pi at home.
When UDP Clamping Exposes a TCP Bug
Part two of the amplification post-mortem. Our internal resolver had been Flag-Day-clamped for years and it changed nothing: the clamp sat on a hop no attacker can reach. Moving the EDNS 1232 clamp to the public edge halved the residual - and testing the TC=1 promise found every answer over 4 KB failing with SERVFAIL, a silent legacy limit in dnscrypt-proxy's TCP path. Both fixes, plus DNS Cookies (RFC 7873) as the finishing layer.
Is Your AdGuard Home or Pi-hole a DNS Amplification Weapon?
Our public resolver was turned into a 31.8x DNS amplifier aimed at strangers: 3.4 million spoofed queries for one fat TXT record, 4.6 Mbps of attack traffic sent by us. Why banning the source IPs would have made it worse, how to check your own resolver in two minutes, and the fixes - from a one-line filter rule to response rate limiting with a TC=1 slip.
How to Create an IP SAN Certificate with Let's Encrypt
Let's Encrypt puts a bare IP address into a certificate free of charge - the foundation verified DDR stands on - at the price of a 160-hour lifetime. How to issue one, the pros and cons stated honestly, and the complete production automation: ARI renewal, watchdog, DANE guard.
Anatomy of a Hardened DNS Zone
A record-by-record tour of the real dnsdoh.art zone, grouped by what each record defends: DNSSEC identity (ECDSA P-256), DANE pins on four transports, an HTTPS record with monthly-rotated ECH, DDR discovery, mail lockdown and CAA. Every record is public, so every claim comes with the dig command that proves it.
The Missing NSEC: When a Signed Zone Loses Its Delegation
Our signed zone delegates one subdomain, and on one provider every validating resolver refused it: SERVFAIL, EDE 22. The parent was serving the delegation without proving DS absence. The diagnosis across six providers, the report that got a platform-wide fix, the July re-test verifying it, and the five-minute audit to run against your own provider.
When Your Blocklist Bans Googlebot
We import public IP blocklists to shed abusive traffic. One had crowd-listed real Googlebot addresses, our firewall dropped them before nginx, and the site slid out of search. How we saw it (a crawler-only nginx log), how we verified bots (forward-confirmed rDNS), and the exempt-not-whitelist fix that lets crawlers through without opening a spoofing hole.
Verified DDR End to End
Running verified DDR in production: the SVCB answer clients discover, why the certificate has to carry the resolver's IP address, and what AdGuard Home's "certificates has no IP addresses; DNS-over-TLS won't be advertised via DDR" warning means, costs, and takes to clear.
How Devices Discover Encrypted DNS
A device handed a bare resolver address has to find out, unprompted, whether that resolver speaks anything encrypted. DDR and DNR are the two answers. Includes the single query that shows any resolver's designations, how the big three differ in what they advertise, and why Windows cannot inspect its own discovery.
Does DNS Use TCP or UDP?
Both, on port 53: UDP for almost every lookup, TCP for the answers that will not fit. Commands for Linux and Windows that show the truncation flag and the fallback happening, what six public resolvers advertise as their UDP limit, and what the fallback costs over 50 paired runs.
What Is DNS Hijacking?
Hijacking does not forge a packet in a race; it takes over a control point your lookups already pass through: malware on the device, the home router, an ISP that intercepts port 53, or a resolver someone else handed you. The name in the address bar stays right while the destination goes wrong. Where each redirect lives, how to spot one, and why encrypting the link to a resolver you chose removes most of the places it can stand.
DNS Record Types Explained
A domain is not a single fact but a small set of records, each answering a different question: where the site lives, how to connect to it, where email goes, which certificates are legitimate. A plain-English reference to A, AAAA, CNAME, MX, TXT, NS, and CAA, plus the modern records that changed DNS: HTTPS and SVCB for HTTP/3 and Encrypted Client Hello, and TLSA (DANE). With worked examples and current best practice.
What Is Anycast DNS?
A large public resolver hands out one IP address, yet that single address lives in dozens of cities at once. Anycast lets the network deliver your query to the nearest copy, which is most of why a public resolver feels instant worldwide and stays up while under attack. How one address ends up in many places, and what it does and does not protect.
Why Encrypted DNS Breaks on Hotel Wi-Fi
Public Wi-Fi forces you through a sign-in page by hijacking your DNS. Encrypted DNS refuses to be hijacked, so the login never appears and the network looks dead until you authenticate. Why the standoff happens, what your device is doing in the background, and how to get online in seconds without giving up encryption.
What Is QNAME Minimisation?
By default a resolver hands your full domain name to every server it asks, including the root and the TLD that only need the next label. QNAME minimisation trims each question to the minimum, so far fewer operators ever learn the whole name you looked up.
What Is EDNS Client Subnet?
To help content networks send you to a nearby server, your resolver can staple a slice of your IP address onto the queries it forwards, handing a piece of your location to every server behind every name you look up. Why it exists, how precise the leak is, and why encrypting your DNS does not close it on its own.
Can DNS Be Blocked or Censored?
Because every connection starts with a lookup, the resolver is the cheapest place to block a site. How ISPs and regulators filter by returning a wrong or empty answer, why the same name resolves differently depending on where you ask, and exactly what encrypted DNS does and does not get around.
How DNS Actually Works
Every connection starts with a name-to-number lookup you never see. How a domain name is built as a hierarchy ending in a hidden root dot, the cascade of caches a lookup falls through, and the commands that show the walk happening on Linux and on Windows - including two servers that both answer authoritatively for the same name, with different addresses, and the delegation that decides which one counts.
DNS Spoofing and Cache Poisoning
Plain DNS accepts the first matching reply it gets. If an attacker's forged answer arrives before the real one, the resolver caches it and serves the same lie to everyone, while the address bar still shows the right name. How the race works, and the layers that stop it.
Encrypted DNS vs VPN
They solve different problems: encrypted DNS deletes one signal, a VPN forwards all of them to a different company. Which to use for what, and three packet captures that show it - the name in the clear on a plain lookup, zero names once it is encrypted, and the site name still sitting in the TLS handshake either way.
Can Your ISP See the Sites You Visit?
With plain DNS your provider can name every site you open without breaking any encryption. What encrypted DNS actually seals, what still leaks through the SNI and the destination IP, and what timing alone gives away.
How DNS Ad-Blocking Works
DNS-level blocking refuses to look up known ad, tracker and malware domains, so the request dies before any connection is made. Includes the two commands that show a name being refused on Linux and on Windows, the three shapes a refusal can arrive in and how to tell one from a dead domain, and a measurement against a live malware feed showing what name-based filtering cannot reach.
What Incognito Mode Actually Hides
Private browsing wipes traces from your own device, but your ISP, your DNS resolver, the sites you visit and your network admin still see the same thing. What incognito does, what it does not, and what actually helps.
Harvest Now, Decrypt Later
Traffic recorded today can be stored until a quantum computer can open it, which is why the key exchange had to change first. What ML-KEM replaces, why it runs hybrid alongside X25519, and the commands that prove a server is really doing it - one curl flag for HTTPS and DoH, and a packet capture for DoT and DoQ, where no client exposes the setting.
Encrypted DNS Still Leaks the Site Name
You encrypted your DNS, but the TLS handshake still names the site you visit in plaintext (SNI). What Encrypted Client Hello fixes, why it depends on encrypted DNS, and what it still cannot hide.
What Your Browser Tells About You
Without cookies or your IP, a site can still recognise you from dozens of small browser details that combine into a near-unique signature. How fingerprinting works, why it survives cookie-clearing, and what actually helps.
What Your IP Address Reveals
An IP shows your rough location, your provider, and your connection type, but not your home address or your identity. What can be read from an IP, how, and what cannot.
DNS Caching & TTL Explained
Almost every DNS answer is reused rather than looked up fresh, and the TTL decides for how long. What the number means, a full countdown-and-reset cycle you can watch on a 60-second record, and the part most explanations skip: resolvers rewrite that number at both ends, so what reaches you is not always what the domain published.
Build a Validating, Hardened Resolver
A runbook for running your own DNS resolver: Unbound for DNSSEC validation, caching and hardening, with dnscrypt-proxy encrypting the upstream. The directives that matter and how to verify them.
What Is DNSSEC?
What DNSSEC signs, what it refuses, and what it leaves alone. Includes the one command that returns three different answers - validated, unsigned, and refused - the +cd flag that proves a SERVFAIL is a validation decision, and the PowerShell equivalents, which display a signature more legibly than dig does.
What Is a DNS Resolver?
What a DNS resolver is and what it does with your lookups. Includes the commands to find out which resolver your device was told to use, which one the authoritative server actually sees, and why those two answers differ - plus the caching trap that makes the popular one-liner report on a stranger.
DNSCrypt vs DoH vs DoT vs DoQ
Which encrypted DNS protocol to use, and what each costs. DoT needs nothing installed and sits on a port a network can block; DNSCrypt needs a client but rides 443 and is the only one with working relays; DoQ and DoH3 finish in fewer round trips. All six are then measured at the wire with one client against one Quad9 address, so only the transport varies: a cold lookup costs 168 bytes over Do53, 1,052 over DNSCrypt, 7,186 over DoT and 12,420 over DoH3, and the QUIC transports are the only ones where the client sends more than it receives. Includes a published correction to an earlier version of that measurement.
Does Your VPN Leak DNS?
A VPN encrypts your traffic, but your DNS lookups can take a different path. What a leak is, how to check for one, and how to read the result.
You Found a DNS Leak: How to Fix It
A leak is almost always one layer letting lookups out, an app or OS setting. How to pin the layer, fix it app-side or OS-side, and confirm it is closed.
How the DNS Leak Test Works
The test mints a name that has never existed, so no cache can answer it and the lookup must reach a nameserver we run - which records the resolver that asked. How the delegation makes that work, how to run the whole test from a terminal with dig and curl, and why the address you see is usually not the resolver you configured.