<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ciarán Doyle</title>
    <description>The latest articles on DEV Community by Ciarán Doyle (@ciarn_doyle_32d63ba6797d).</description>
    <link>https://dev.to/ciarn_doyle_32d63ba6797d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854016%2F6d4b5e61-3721-47c8-806d-e546f6b5b10a.jpg</url>
      <title>DEV Community: Ciarán Doyle</title>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ciarn_doyle_32d63ba6797d"/>
    <language>en</language>
    <item>
      <title>DNS Troubleshooting Checklist: The 10-Step Process I Use for Every Client Call</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Sat, 04 Apr 2026 08:26:50 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/dns-troubleshooting-checklist-the-10-step-process-i-use-for-every-client-call-15dm</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/dns-troubleshooting-checklist-the-10-step-process-i-use-for-every-client-call-15dm</guid>
      <description>&lt;p&gt;It happens every week without fail. The phone rings, it's a client in a panic — a shop in Tuam, a solicitor's office in Clifden, a small hotel out near Connemara — and the first thing they say is "the internet's gone." Nine times out of ten, it's not the internet. It's DNS.&lt;/p&gt;

&lt;p&gt;DNS troubleshooting is one of those things that looks like black magic until you have a repeatable process. Over the past decade doing network and infrastructure work across the West of Ireland, I've built a &lt;strong&gt;DNS troubleshooting checklist&lt;/strong&gt; that I run through on every single call, in roughly the same order, every time. It gets the job done. Here it is.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Confirm It's Actually a DNS Issue
&lt;/h2&gt;

&lt;p&gt;Before you touch anything, verify the problem. A DNS failure means names aren't resolving — but other network issues can look identical to the uninitiated.&lt;/p&gt;

&lt;p&gt;Quick test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that works but a website doesn't load, you've got a DNS issue. If even the ping fails, you're dealing with a broader connectivity problem and DNS is a red herring. Don't go chasing DNS gremlins when the router's acting the maggot entirely.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Check What DNS Servers the Device Is Using
&lt;/h2&gt;

&lt;p&gt;This is where most people skip straight past the obvious. Find out what DNS resolver the affected machine is actually pointing at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ipconfig /all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux/Mac:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/resolv.conf
&lt;span class="c"&gt;# or&lt;/span&gt;
nmcli dev show | &lt;span class="nb"&gt;grep &lt;/span&gt;DNS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the &lt;code&gt;DNS Servers&lt;/code&gt; line. Is it pointing at your router (e.g. &lt;code&gt;192.168.1.1&lt;/code&gt;)? A corporate DNS server? A public resolver like &lt;code&gt;1.1.1.1&lt;/code&gt; or &lt;code&gt;8.8.8.8&lt;/code&gt;? Knowing this shapes every step that follows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Try a Direct DNS Query with nslookup
&lt;/h2&gt;

&lt;p&gt;This is your first real diagnostic step. &lt;code&gt;nslookup&lt;/code&gt; troubleshooting is fundamental — it lets you query DNS directly, bypassing the browser cache and OS resolver cache.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then try querying a known public resolver directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup example.com 8.8.8.8
nslookup example.com 1.1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the domain resolves against &lt;code&gt;8.8.8.8&lt;/code&gt; but not against your local DNS server, your problem is upstream of the client device — it's the resolver or the network path to it.&lt;/p&gt;

&lt;p&gt;If you're on a machine without command-line access, I use &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;publicdns.info's online dig tool&lt;/a&gt; to run the same queries from a browser. It's saved me more than a few times when I'm remote-assisting someone who hasn't got a terminal window to hand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Flush the Local DNS Cache
&lt;/h2&gt;

&lt;p&gt;Cached records can cause DNS not resolving issues long after the actual problem is fixed. Always flush before assuming something is still broken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ipconfig /flushdns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mac:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dscacheutil &lt;span class="nt"&gt;-flushcache&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;killall &lt;span class="nt"&gt;-HUP&lt;/span&gt; mDNSResponder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux (systemd-resolved):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemd-resolve &lt;span class="nt"&gt;--flush-caches&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I had a client in Galway city — a small accountancy firm — swearing blind their new website still wasn't showing up a full day after their DNS change. Flushed the cache, restarted the browser. Sorted in 30 seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Check TTL and Propagation Status
&lt;/h2&gt;

&lt;p&gt;If you're dealing with a recent DNS change — new hosting, migrated domain, updated records — propagation time is a factor. TTL (Time to Live) determines how long resolvers cache a record before fetching a fresh copy.&lt;/p&gt;

&lt;p&gt;Check the current TTL on the record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the answer section — the number before &lt;code&gt;IN A&lt;/code&gt; is the TTL in seconds. If it's 86400, that's 24 hours. If someone lowered the TTL &lt;em&gt;after&lt;/em&gt; making the change, it's too late — the old TTL was already cached.&lt;/p&gt;

&lt;p&gt;I use the &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;DNS propagation checker at publicdns.info&lt;/a&gt; to see how a record looks from different resolvers globally. It's handy when a client is asking "is it live yet?" and you need a quick answer without spinning up a VPN.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Query Authoritative Nameservers Directly
&lt;/h2&gt;

&lt;p&gt;Don't trust what your local resolver tells you. Go straight to the source.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find the authoritative nameservers&lt;/span&gt;
dig example.com NS

&lt;span class="c"&gt;# Query one of them directly&lt;/span&gt;
dig @ns1.example-nameserver.com example.com A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the authoritative nameserver returns the correct record but end users are seeing the wrong one, the issue is caching at an intermediate resolver — not the DNS configuration itself. This distinction matters when you're telling a client what's actually wrong.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Check for DNS Hijacking or Interception
&lt;/h2&gt;

&lt;p&gt;This one's more common than people think, especially on compromised routers or in environments with overly aggressive filtering. To fix DNS issues caused by hijacking, you need to spot it first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the IP address returned is completely unexpected — especially if it's a private IP like &lt;code&gt;192.168.x.x&lt;/code&gt; or &lt;code&gt;10.x.x.x&lt;/code&gt; when querying a public domain — something is intercepting your DNS queries. Check the router firmware, look for rogue DHCP entries, and inspect any firewall or proxy rules.&lt;/p&gt;

&lt;p&gt;I've seen this twice in small businesses on the Wild Atlantic Way corridor — routers compromised and quietly redirecting DNS traffic. Not fun to unravel, but it's always worth checking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 8: Test with Alternative DNS Resolvers
&lt;/h2&gt;

&lt;p&gt;Swap the DNS server temporarily to rule out resolver-specific issues. This is one of the fastest DNS diagnostic steps you can run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On Windows (temporary):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netsh interface ip &lt;span class="nb"&gt;set &lt;/span&gt;dns &lt;span class="s2"&gt;"Local Area Connection"&lt;/span&gt; static 1.1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test the resolution again. If it works with Cloudflare's &lt;code&gt;1.1.1.1&lt;/code&gt; but not your ISP's resolver, the ISP resolver is the problem — either it's down, or it's returning stale/incorrect data. &lt;a href="https://developers.cloudflare.com/1.1.1.1/setup/" rel="noopener noreferrer"&gt;Cloudflare's DNS documentation&lt;/a&gt; has good guidance on setting this permanently across different OS types.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9: Check DNSSEC Validation
&lt;/h2&gt;

&lt;p&gt;If DNSSEC is enabled on a domain, a misconfiguration will cause resolvers to return &lt;code&gt;SERVFAIL&lt;/code&gt; even though the zone itself is fine. This one catches people out badly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com +dnssec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the &lt;code&gt;AD&lt;/code&gt; flag in the response — that means DNSSEC validated successfully. A &lt;code&gt;SERVFAIL&lt;/code&gt; with no useful error usually points at a broken DS record or an expired RRSIG. The &lt;a href="https://www.rfc-editor.org/rfc/rfc6781" rel="noopener noreferrer"&gt;IETF's DNSSEC operational guidance (RFC 6781)&lt;/a&gt; is dry reading, but it's the definitive reference if you need to go deep on this.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10: Document and Report
&lt;/h2&gt;

&lt;p&gt;This is the one people always skip, and it's the one that pays off six months later when the exact same issue reappears.&lt;/p&gt;

&lt;p&gt;Write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the symptoms were&lt;/li&gt;
&lt;li&gt;What resolver was in use&lt;/li&gt;
&lt;li&gt;Which step identified the root cause&lt;/li&gt;
&lt;li&gt;What the fix was&lt;/li&gt;
&lt;li&gt;Any TTL or propagation times involved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I keep a simple log per client. When someone rings me with "the DNS is gone again," I can pull up the notes from the last time in under a minute. Half the time, it's the same problem — same misconfigured router, same ISP resolver dropping the ball on a Friday afternoon.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Word
&lt;/h2&gt;

&lt;p&gt;DNS is boring until it breaks, and when it breaks everything stops. Having a repeatable &lt;strong&gt;DNS troubleshooting checklist&lt;/strong&gt; means you're not guessing — you're working through a proven set of diagnostic steps in the right order.&lt;/p&gt;

&lt;p&gt;The tools are mostly free. &lt;code&gt;nslookup&lt;/code&gt;, &lt;code&gt;dig&lt;/code&gt;, &lt;code&gt;ipconfig&lt;/code&gt; — they're on every machine. When I'm working remotely and the client doesn't have a terminal, &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;publicdns.info's dig tool&lt;/a&gt; does the job straight from the browser.&lt;/p&gt;

&lt;p&gt;Run the list, trust the process, and you'll have most DNS issues sorted before the kettle's even boiled.&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Why Your Website Works in Chrome but Not Safari: A DNS Caching Deep Dive</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Thu, 02 Apr 2026 22:15:21 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/why-your-website-works-in-chrome-but-not-safari-a-dns-caching-deep-dive-1f4b</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/why-your-website-works-in-chrome-but-not-safari-a-dns-caching-deep-dive-1f4b</guid>
      <description>&lt;p&gt;A cafe owner in Salthill rang me last month in a panic. "My website's down." I checked on my phone — loaded fine. She checked on hers — nothing. Her husband's laptop? Also nothing. Her daughter's phone? Worked perfectly.&lt;/p&gt;

&lt;p&gt;Same WiFi. Same network. Some devices could reach the site, others couldn't. Classic DNS caching issue, and it catches people out more often than you'd think.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually happened
&lt;/h2&gt;

&lt;p&gt;She'd migrated her site to a new host the day before. The domain's DNS records were updated to point to the new server's IP address. But here's the thing — not every device got the memo at the same time.&lt;/p&gt;

&lt;p&gt;DNS doesn't update instantly. When you change a DNS record, the old IP address is cached at multiple levels: your browser, your operating system, your router, your ISP's resolver. Each cache has its own expiry timer (the TTL — Time to Live), and until that timer runs out, the device keeps using the old, stale IP.&lt;/p&gt;

&lt;p&gt;Her phone had cleared its cache recently (she'd restarted it that morning). Her husband's laptop hadn't been restarted in a week. The browser was still sending requests to the old server, which was already shut down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where DNS gets cached
&lt;/h2&gt;

&lt;p&gt;There are four layers of caching between you and a DNS answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Browser cache&lt;/strong&gt; — Chrome, Firefox, Safari, and Edge all maintain their own DNS caches, separate from the OS. This is the most common source of "works in one browser, not another" problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. OS cache&lt;/strong&gt; — Your operating system caches DNS lookups too. This affects all applications on the device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Router cache&lt;/strong&gt; — Some routers cache DNS responses. Less common with modern routers, but it happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. ISP resolver cache&lt;/strong&gt; — Your ISP's DNS server caches responses based on the TTL set by the domain owner. You can't flush this one — you have to wait, or switch to a different resolver.&lt;/p&gt;

&lt;h2&gt;
  
  
  How browsers handle DNS caching differently
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting. Each browser has its own caching behaviour, and they don't all agree:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Browser&lt;/th&gt;
&lt;th&gt;Default DNS cache TTL&lt;/th&gt;
&lt;th&gt;How to clear&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chrome&lt;/td&gt;
&lt;td&gt;60 seconds (ignores TTL &amp;gt; 60s)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;chrome://net-internals/#dns&lt;/code&gt; → Clear host cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firefox&lt;/td&gt;
&lt;td&gt;60 seconds&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;about:networking#dns&lt;/code&gt; → Clear DNS Cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safari&lt;/td&gt;
&lt;td&gt;Follows OS cache&lt;/td&gt;
&lt;td&gt;Clear via OS (see below)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge&lt;/td&gt;
&lt;td&gt;Same as Chrome (Chromium-based)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;edge://net-internals/#dns&lt;/code&gt; → Clear host cache&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Chrome aggressively caps DNS TTL at 60 seconds internally, regardless of what the domain's actual TTL is set to. That's why Chrome often picks up DNS changes faster than Safari — Safari relies on macOS's system-level DNS cache, which respects the original TTL and can hold onto stale records for hours.&lt;/p&gt;

&lt;p&gt;This is exactly why my client's daughter (Chrome on her phone) could see the new site while her husband (Safari on his MacBook) couldn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to flush DNS on every platform
&lt;/h2&gt;

&lt;p&gt;When you're troubleshooting DNS caching issues, flushing the cache forces your device to do a fresh lookup:&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dscacheutil &lt;span class="nt"&gt;-flushcache&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;killall &lt;span class="nt"&gt;-HUP&lt;/span&gt; mDNSResponder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ipconfig /flushdns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux (systemd-resolved)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemd-resolve &lt;span class="nt"&gt;--flush-caches&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Chrome (all platforms)
&lt;/h3&gt;

&lt;p&gt;Navigate to &lt;code&gt;chrome://net-internals/#dns&lt;/code&gt; and click "Clear host cache". Then go to &lt;code&gt;chrome://net-internals/#sockets&lt;/code&gt; and click "Flush socket pools" — this clears any connections still pinned to the old IP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Firefox
&lt;/h3&gt;

&lt;p&gt;Navigate to &lt;code&gt;about:networking#dns&lt;/code&gt; and click "Clear DNS Cache".&lt;/p&gt;

&lt;h2&gt;
  
  
  How to verify the fix
&lt;/h2&gt;

&lt;p&gt;After flushing, confirm your device is resolving to the correct IP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare the result to what you expect. If you don't have &lt;code&gt;dig&lt;/code&gt; installed, use the &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;online dig tool at publicdns.info&lt;/a&gt; — it queries from an external server, so you'll see the current authoritative answer without any local caching interfering.&lt;/p&gt;

&lt;p&gt;If your local result differs from what publicdns.info shows, something between you and the authoritative server is still caching the old record.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to prevent this in the first place
&lt;/h2&gt;

&lt;p&gt;If you're planning a migration, lower the DNS TTL before you move:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;48 hours before migration:&lt;/strong&gt; Drop the TTL to 300 seconds (5 minutes) or lower&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait for the old TTL to expire&lt;/strong&gt; — if it was set to 86400 (24 hours), you need to wait at least that long after lowering it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do the migration&lt;/strong&gt; — update DNS records to the new IP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After everything's stable:&lt;/strong&gt; Raise the TTL back to a sensible value (3600-86400)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most DNS caching issues after migrations happen because someone skipped step 1. They change the IP while the TTL is still set to 24 hours, and then half their users are stuck on the old address for a day.&lt;/p&gt;

&lt;p&gt;You can check what TTL a domain currently has using &lt;a href="https://publicdns.info" rel="noopener noreferrer"&gt;publicdns.info&lt;/a&gt; — compare responses from different DNS servers to see if they've all picked up the change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The router wildcard
&lt;/h2&gt;

&lt;p&gt;One thing that caught me out on this particular job: after flushing the DNS on her husband's laptop, it still didn't work. Turned out their router (an older Eir-supplied one) was caching DNS responses too.&lt;/p&gt;

&lt;p&gt;Power-cycling the router cleared it. Not elegant, but effective. If flushing the device cache doesn't help and you're behind a home router, this is worth trying before you go down more complicated debugging paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Works in Chrome, not Safari"&lt;/strong&gt; → Chrome caps DNS cache at 60s, Safari uses OS cache. Flush macOS DNS: &lt;code&gt;sudo dscacheutil -flushcache &amp;amp;&amp;amp; sudo killall -HUP mDNSResponder&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Works on phone, not laptop"&lt;/strong&gt; → Phone was restarted recently, laptop has stale cache. Flush DNS on the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Works nowhere on my network"&lt;/strong&gt; → Router is caching. Power-cycle it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Works on my network, not others"&lt;/strong&gt; → ISP resolver still has old record. Wait for TTL to expire, or switch to a public DNS like 1.1.1.1 or 8.8.8.8.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Before any migration&lt;/strong&gt; → Lower TTL to 300 seconds at least 48 hours ahead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify current state&lt;/strong&gt; → Check &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;publicdns.info/tools/dig&lt;/a&gt; to see what the rest of the world sees.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Salthill cafe owner? Flushed DNS on the laptop, power-cycled the router, and everything was grand. Total fix time: about three minutes once I knew what the problem was. The trick is knowing where to look.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>networking</category>
      <category>troubleshooting</category>
      <category>webdev</category>
    </item>
    <item>
      <title>DNS for Sysadmins: The Commands and Tools You Actually Need</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Thu, 02 Apr 2026 22:08:49 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/dns-for-sysadmins-the-commands-and-tools-you-actually-need-567</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/dns-for-sysadmins-the-commands-and-tools-you-actually-need-567</guid>
      <description>&lt;p&gt;DNS comes up in sysadmin work constantly. Server migrations, email deliverability issues, "the website isn't loading" tickets, certificate renewals, debugging weird routing problems. You don't need to be a DNS expert, but you do need a solid toolkit.&lt;/p&gt;

&lt;p&gt;Here's the DNS commands and tools I use regularly, with real examples from actual problems I've dealt with.&lt;/p&gt;

&lt;h2&gt;
  
  
  dig - the workhorse
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;dig&lt;/code&gt; is the most useful DNS tool you'll ever learn. It queries DNS servers and shows you exactly what they return, with full detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic lookup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This queries your system's default DNS resolver for the A record. The output is verbose but everything in it is useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query a specific DNS server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig @8.8.8.8 example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This bypasses your local resolver and asks Google directly. Essential for comparing what different resolvers return.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query specific record types
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com MX    &lt;span class="c"&gt;# Mail servers&lt;/span&gt;
dig example.com TXT   &lt;span class="c"&gt;# SPF, DKIM, DMARC, verification records&lt;/span&gt;
dig example.com NS    &lt;span class="c"&gt;# Nameservers&lt;/span&gt;
dig example.com AAAA  &lt;span class="c"&gt;# IPv6 addresses&lt;/span&gt;
dig example.com CAA   &lt;span class="c"&gt;# Certificate Authority Authorization&lt;/span&gt;
dig example.com SOA   &lt;span class="c"&gt;# Start of Authority (serial, refresh, retry)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Short output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you just want the IP address, no fuss. I use &lt;code&gt;+short&lt;/code&gt; in scripts all the time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trace the full resolution path
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +trace example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows every step of DNS resolution: root servers, TLD servers, authoritative servers. Brilliant for finding exactly where a lookup goes wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check TTL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A1&lt;/span&gt; &lt;span class="s2"&gt;"ANSWER SECTION"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number between the domain name and record type is the remaining TTL. Useful before migrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverse lookup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig &lt;span class="nt"&gt;-x&lt;/span&gt; 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turns an IP address back into a hostname. Handy for identifying mystery IPs in logs.&lt;/p&gt;

&lt;h2&gt;
  
  
  nslookup - quick and dirty
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;nslookup&lt;/code&gt; is older and simpler than &lt;code&gt;dig&lt;/code&gt;. I use it mostly on Windows machines where dig isn't installed by default.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup example.com
nslookup example.com 8.8.8.8
nslookup &lt;span class="nt"&gt;-type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;MX example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works, but the output is harder to parse than dig's. If you have both available, use dig.&lt;/p&gt;

&lt;h2&gt;
  
  
  host - the one-liner
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;host&lt;/code&gt; gives you the basics with minimal output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;host example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns A, AAAA, and MX records in a single readable line each. I use it when I just need a quick "does this resolve?" check.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;host &lt;span class="nt"&gt;-t&lt;/span&gt; TXT example.com   &lt;span class="c"&gt;# Specific record type&lt;/span&gt;
host example.com 1.1.1.1  &lt;span class="c"&gt;# Query specific server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  whois - domain ownership and registration
&lt;/h2&gt;

&lt;p&gt;When you need to know who owns a domain, when it expires, or which registrar it's with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whois example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output format varies by registrar and TLD but you'll usually find registration date, expiry date, registrar name, and nameservers.&lt;/p&gt;

&lt;p&gt;If you're not at a terminal, &lt;a href="https://publicdns.info/tools/whois" rel="noopener noreferrer"&gt;publicdns.info has a web-based WHOIS tool&lt;/a&gt; that works with both domains and IPs. I keep it bookmarked for when I'm on a call with a client and need to check something quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-world scenarios
&lt;/h2&gt;

&lt;h3&gt;
  
  
  "Email isn't being delivered"
&lt;/h3&gt;

&lt;p&gt;Nine times out of ten, it's DNS. Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# MX records - where should email go?&lt;/span&gt;
dig example.com MX +short

&lt;span class="c"&gt;# SPF - who's allowed to send as this domain?&lt;/span&gt;
dig example.com TXT | &lt;span class="nb"&gt;grep &lt;/span&gt;spf

&lt;span class="c"&gt;# DKIM - signature record&lt;/span&gt;
dig selector._domainkey.example.com TXT

&lt;span class="c"&gt;# DMARC - policy&lt;/span&gt;
dig _dmarc.example.com TXT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If SPF is missing or wrong, email goes to spam. If MX records point to the wrong server, email doesn't arrive at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  "SSL certificate renewal is failing"
&lt;/h3&gt;

&lt;p&gt;Let's Encrypt and other CAs use DNS to validate domain ownership:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check the ACME challenge record exists&lt;/span&gt;
dig _acme-challenge.example.com TXT +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this returns empty, your cert renewal script didn't create the record, or DNS propagation hasn't reached the CA's resolver yet.&lt;/p&gt;

&lt;p&gt;Also check CAA records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com CAA +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If CAA is set and doesn't include your CA, certificate issuance will be blocked.&lt;/p&gt;

&lt;h3&gt;
  
  
  "The website loads from some places but not others"
&lt;/h3&gt;

&lt;p&gt;Usually a propagation issue after a DNS change, or a geo-DNS setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Compare what different resolvers see&lt;/span&gt;
dig @8.8.8.8 example.com +short
dig @1.1.1.1 example.com +short
dig @9.9.9.9 example.com +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If they return different IPs, use a &lt;a href="https://publicdns.info/tools/propagation" rel="noopener noreferrer"&gt;propagation checker&lt;/a&gt; to see the global picture.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Is DNSSEC working on this domain?"
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com +dnssec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for the &lt;code&gt;ad&lt;/code&gt; flag in the response (Authenticated Data). If it's there, DNSSEC is validating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web-based alternatives
&lt;/h2&gt;

&lt;p&gt;Sometimes you're not at a terminal. I keep &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;publicdns.info/tools/dig&lt;/a&gt; bookmarked. It does proper dig queries from a browser - all record types, choice of DNS provider, shows the full response. Covers 90% of what I need when I can't open a terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference card
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you need&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A record lookup&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specific server&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig @1.1.1.1 example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MX records&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig example.com MX +short&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TXT records (SPF/DKIM)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig example.com TXT&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nameservers&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig example.com NS +short&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full trace&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig +trace example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reverse lookup&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig -x 8.8.8.8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain info&lt;/td&gt;
&lt;td&gt;&lt;code&gt;whois example.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNSSEC check&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dig example.com +dnssec&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DNS looks simple until it isn't. Start with &lt;code&gt;dig&lt;/code&gt;, check the obvious records, and work outward from there. Most DNS issues turn out to be simpler than they first appear.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>sysadmin</category>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title>I Changed My DNS and My Site Disappeared: A Quick Guide to DNS Propagation</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Thu, 02 Apr 2026 21:59:05 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/i-changed-my-dns-and-my-site-disappeared-a-quick-guide-to-dns-propagation-3oj6</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/i-changed-my-dns-and-my-site-disappeared-a-quick-guide-to-dns-propagation-3oj6</guid>
      <description>&lt;p&gt;You've just migrated your website to a new host. You updated the nameservers at your registrar. You triple-checked everything. And now your site is gone. Vanished. Your client is ringing you in a panic.&lt;/p&gt;

&lt;p&gt;Don't worry. Your site is fine. It's DNS propagation, and it's completely normal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually happening
&lt;/h2&gt;

&lt;p&gt;When you change DNS records - nameservers, A records, CNAME records, whatever - the change doesn't take effect instantly across the entire internet. That's because DNS is cached at multiple levels:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your browser&lt;/strong&gt; caches DNS lookups (usually for a few minutes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your operating system&lt;/strong&gt; caches them too&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your router&lt;/strong&gt; might cache them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your ISP's DNS resolver&lt;/strong&gt; caches them (this is the big one)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other DNS resolvers&lt;/strong&gt; (Google, Cloudflare, etc.) all have their own caches&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you make a change, it updates at the authoritative nameserver immediately. But all those cached copies don't know about the change yet. They'll keep serving the old record until their cache expires.&lt;/p&gt;

&lt;p&gt;That expiry time is controlled by the &lt;strong&gt;TTL&lt;/strong&gt; (Time To Live) value on the DNS record.&lt;/p&gt;

&lt;h2&gt;
  
  
  TTL: the number that controls propagation speed
&lt;/h2&gt;

&lt;p&gt;Every DNS record has a TTL value, measured in seconds. It tells resolvers "cache this answer for this many seconds, then check again."&lt;/p&gt;

&lt;p&gt;Common TTL values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;300&lt;/strong&gt; (5 minutes) - for records that change frequently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3600&lt;/strong&gt; (1 hour) - a reasonable default&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;86400&lt;/strong&gt; (24 hours) - for records that rarely change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your A record has a TTL of 86400, it means every DNS resolver that cached it will keep the old value for up to 24 hours before checking for updates.&lt;/p&gt;

&lt;p&gt;This is why the standard advice is "DNS propagation takes 24-48 hours." In reality, it takes exactly as long as the TTL on the old record. If your TTL was 300 seconds, most of the internet will see the change within 5-10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trick: lower TTL before migrating
&lt;/h2&gt;

&lt;p&gt;If you know you're going to change DNS records, lower the TTL a day or two before the change:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Day before migration:&lt;/strong&gt; Change TTL from 86400 to 300&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wait 24 hours&lt;/strong&gt; (so the old high TTL expires everywhere)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make your DNS change&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Within 5-10 minutes&lt;/strong&gt;, most resolvers will pick up the new value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After migration is stable:&lt;/strong&gt; raise TTL back to 3600 or whatever you prefer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the single most useful DNS trick I know. I do it for every migration and it saves a pile of stress.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check propagation progress
&lt;/h2&gt;

&lt;p&gt;You're sitting there after making the change and you want to know: has it propagated?&lt;/p&gt;

&lt;h3&gt;
  
  
  From the command line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check what different resolvers see&lt;/span&gt;
dig @8.8.8.8 yourdomain.com A
dig @1.1.1.1 yourdomain.com A
dig @9.9.9.9 yourdomain.com A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If they all return your new IP, you're mostly there. If some still show the old IP, those resolvers haven't refreshed their cache yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using a propagation checker
&lt;/h3&gt;

&lt;p&gt;For a more complete picture, use a tool that checks from multiple locations worldwide. &lt;a href="https://publicdns.info/tools/propagation" rel="noopener noreferrer"&gt;publicdns.info has a propagation checker&lt;/a&gt; that queries servers across different countries simultaneously, so you can see exactly where the change has landed and where it hasn't.&lt;/p&gt;

&lt;p&gt;This is what I pull up on screen when a client is asking "is it done yet?" - shows them the green ticks rolling in across different regions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common propagation problems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  "My site works for me but not for my client"
&lt;/h3&gt;

&lt;p&gt;Your machine probably cached the new DNS record already (or you flushed your cache). Your client's ISP resolver still has the old one cached. Just wait for their TTL to expire.&lt;/p&gt;

&lt;h3&gt;
  
  
  "It's been 48 hours and it still hasn't propagated"
&lt;/h3&gt;

&lt;p&gt;Something else is wrong. After 48 hours, every cache in the world should have expired. Check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did you actually update the right records? (Check at your registrar, not just your DNS host)&lt;/li&gt;
&lt;li&gt;Are the nameservers correct? (&lt;code&gt;dig NS yourdomain.com&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Is there a DNSSEC issue? (Misconfigured DNSSEC can make your domain unresolvable)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  "It propagated and then went back to the old value"
&lt;/h3&gt;

&lt;p&gt;This can happen with load-balanced DNS or if you have conflicting records. Check that you don't have the old A record still present alongside the new one.&lt;/p&gt;

&lt;h3&gt;
  
  
  "My email stopped working after the DNS change"
&lt;/h3&gt;

&lt;p&gt;MX records. When you change nameservers, make sure the MX records exist on the new DNS host. This catches people out all the time. Email DNS is just as important as web DNS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking your current TTL
&lt;/h2&gt;

&lt;p&gt;Before making any DNS change, check what TTL your records currently have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig yourdomain.com A | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A1&lt;/span&gt; &lt;span class="s2"&gt;"ANSWER SECTION"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The number after the record name is the TTL in seconds. If it shows 86400, you'll want to lower it before making changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  After the change
&lt;/h2&gt;

&lt;p&gt;Once propagation is complete and everything is working:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Raise your TTL back to something reasonable (3600-86400)&lt;/li&gt;
&lt;li&gt;Test from multiple locations to confirm&lt;/li&gt;
&lt;li&gt;Keep the old server running for a few days as a safety net&lt;/li&gt;
&lt;li&gt;Check your email is still working (MX records)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;DNS propagation isn't mysterious. It's just caching. Lower your TTL before making changes, use a propagation checker to monitor progress, and wait for the old caches to expire. Your site didn't disappear - the internet just hasn't all got the memo yet.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>webdev</category>
      <category>devops</category>
      <category>hosting</category>
    </item>
    <item>
      <title>Setting Up Pi-hole? Here's How to Pick Your Upstream DNS</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Thu, 02 Apr 2026 21:57:45 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/setting-up-pi-hole-heres-how-to-pick-your-upstream-dns-5809</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/setting-up-pi-hole-heres-how-to-pick-your-upstream-dns-5809</guid>
      <description>&lt;p&gt;You've got Pi-hole installed. The dashboard is up. Ads are getting blocked. Grand. But there's one decision that trips people up more than it should: which upstream DNS server should Pi-hole forward queries to?&lt;/p&gt;

&lt;p&gt;Now, pi-hole blocks ads by intercepting DNS queries for known ad domains and returning nothing. But for everything else, it needs to forward the query to an actual DNS resolver. That upstream resolver is doing the real work of turning domain names into IP addresses. Picking the right one matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Pi-hole docs suggest
&lt;/h2&gt;

&lt;p&gt;The Pi-hole setup wizard gives you a list of common options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google (8.8.8.8)&lt;/li&gt;
&lt;li&gt;OpenDNS (208.67.222.222)&lt;/li&gt;
&lt;li&gt;Cloudflare (1.1.1.1)&lt;/li&gt;
&lt;li&gt;Quad9 (9.9.9.9)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any of these will work. But "works" and "works well for you" aren't the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to optimise for
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Speed
&lt;/h3&gt;

&lt;p&gt;I had a client in Connemara last month who had this exact issue, and DNS latency compounds. A page with 40 resources from 20 different domains means 20 DNS lookups. If each one takes 50ms instead of 5ms, that's nearly a full second added to your page load.&lt;/p&gt;

&lt;p&gt;The fastest upstream for you depends on where you are geographically. Google and Cloudflare have data centres everywhere, so they're usually fast. But a smaller regional provider might be closer to you.&lt;/p&gt;

&lt;p&gt;Test it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# From the machine running Pi-hole&lt;/span&gt;
dig @8.8.8.8 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
dig @1.1.1.1 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
dig @9.9.9.9 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Honestly, run each one a few times. The first query to a new domain is always slower (cache miss). It's the second and third queries that show you the real-world performance.&lt;/p&gt;

&lt;p&gt;If you want to test a wider range of servers, &lt;a href="https://publicdns.info" rel="noopener noreferrer"&gt;publicdns.info&lt;/a&gt; has a directory of thousands of live-tested public DNS servers. You can filter by country to find resolvers close to you. I've found some regional servers in Ireland that consistently outperform the big names for my setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy
&lt;/h3&gt;

&lt;p&gt;Pi-hole itself doesn't encrypt DNS queries to the upstream. So your ISP can still see which domains you're looking up (just not the ad ones, since Pi-hole blocks those locally).&lt;/p&gt;

&lt;p&gt;If privacy matters, you've got a few options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use a privacy-focused upstream&lt;/strong&gt; - Quad9 or Cloudflare with their no-logging policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Unbound&lt;/strong&gt; - run a local recursive resolver alongside Pi-hole. Queries go directly to authoritative servers instead of a third-party resolver&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable DNS over TLS&lt;/strong&gt; - encrypt the connection between Pi-hole and the upstream&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Option 2 (Unbound) is what I use and recommend. It's more work to set up but it means your DNS queries don't go to any third party at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Some upstreams add a layer of security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quad9&lt;/strong&gt; blocks known malicious domains before they resolve. It uses threat intelligence feeds, so if someone on your network clicks a phishing link, Quad9 might catch it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenDNS&lt;/strong&gt; lets you configure custom filtering categories through their dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AdGuard DNS&lt;/strong&gt; blocks ads and trackers at the resolver level (though Pi-hole already does this).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I like layering Quad9 as upstream with Pi-hole handling ad blocking. Two layers of protection, different approaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many upstream servers should you set?
&lt;/h2&gt;

&lt;p&gt;Pi-hole lets you configure multiple upstream DNS servers. The question is: should you?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One server:&lt;/strong&gt; Simplest. All queries go to the same place. If it goes down, DNS breaks until you change it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two servers:&lt;/strong&gt; Most people should do this. Pi-hole will use both and failover between them. Pick two from different providers for redundancy (e.g., Cloudflare + Quad9).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three or more:&lt;/strong&gt; Diminishing returns. Two is enough for redundancy. Adding more can actually slow things down slightly as Pi-hole rotates between them.&lt;/p&gt;

&lt;p&gt;My setup: two upstream servers from different providers. If Cloudflare has a bad day, Quad9 picks up the slack.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unbound option
&lt;/h2&gt;

&lt;p&gt;For maximum control, run Unbound as a local recursive resolver and point Pi-hole at it. Instead of forwarding queries to Google or Cloudflare, Unbound goes directly to the authoritative DNS servers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client -&amp;gt; Pi-hole (ad blocking) -&amp;gt; Unbound (recursive) -&amp;gt; Root/TLD/Auth servers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No third party sees all your queries&lt;/li&gt;
&lt;li&gt;You're not trusting any single DNS provider&lt;/li&gt;
&lt;li&gt;You get DNSSEC validation locally&lt;/li&gt;
&lt;li&gt;Slightly slower first lookups (no shared cache), but Unbound caches aggressively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setting it up is a separate guide, but the Pi-hole docs cover it well. It's about 15 minutes of work and it's been rock solid for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommended setups
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Simple and fast:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pi-hole -&amp;gt; Cloudflare (1.1.1.1) + Quad9 (9.9.9.9)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Privacy-focused:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pi-hole -&amp;gt; Unbound (local recursive resolver)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Maximum protection:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pi-hole -&amp;gt; Unbound -&amp;gt; DNS over TLS to Quad9 (with malware blocking)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Testing your setup
&lt;/h2&gt;

&lt;p&gt;After configuring upstream DNS, test from a device on your network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Should resolve (not an ad domain)&lt;/span&gt;
dig google.com @&amp;lt;pi-hole-ip&amp;gt;

&lt;span class="c"&gt;# Should be blocked (ad domain)&lt;/span&gt;
dig ads.google.com @&amp;lt;pi-hole-ip&amp;gt;

&lt;span class="c"&gt;# Check query time&lt;/span&gt;
dig example.com @&amp;lt;pi-hole-ip&amp;gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check the Pi-hole dashboard. You should see queries flowing through, with ad domains getting blocked and everything else resolving normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The upstream DNS choice isn't something you need to agonise over. Cloudflare + Quad9 is a solid default that gives you speed, privacy, and malware protection. If you want to go further, add Unbound for full recursive resolution.&lt;/p&gt;

&lt;p&gt;The important thing is that you've got Pi-hole running at all. That's already a massive improvement over bare ISP DNS. The upstream choice is just fine-tuning from there.&lt;/p&gt;

</description>
      <category>pihole</category>
      <category>dns</category>
      <category>homelab</category>
      <category>networking</category>
    </item>
    <item>
      <title>DoH vs DoT: Which Encrypted DNS Should You Actually Use?</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Tue, 31 Mar 2026 22:34:39 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/doh-vs-dot-which-encrypted-dns-should-you-actually-use-1b4</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/doh-vs-dot-which-encrypted-dns-should-you-actually-use-1b4</guid>
      <description>&lt;p&gt;Regular DNS queries are sent in plain text. Anyone on the network path between you and the resolver - your ISP, your coffee shop's WiFi, whoever - can see exactly which domains you're looking up. That's not great for privacy.&lt;/p&gt;

&lt;p&gt;Two protocols fix this: DNS over HTTPS (DoH) and DNS over TLS (DoT). Both encrypt your queries. But they work differently and the choice between them isn't just technical - it's political.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DoT does
&lt;/h2&gt;

&lt;p&gt;DNS over TLS wraps regular DNS queries in a TLS tunnel on port 853. It's straightforward: same DNS protocol, just encrypted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your device --[TLS encrypted, port 853]--&amp;gt; DNS resolver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your ISP can see you're connecting to a DNS server on port 853 (so they know you're using DoT), but they can't see what you're looking up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clean separation - DNS stays on its own dedicated port&lt;/li&gt;
&lt;li&gt;Network admins can see that DNS traffic exists (useful for monitoring and policy)&lt;/li&gt;
&lt;li&gt;Slightly lower overhead than DoH in some implementations&lt;/li&gt;
&lt;li&gt;Easier to implement in DNS-specific software&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easy to block - a network admin just blocks port 853 and DoT stops working&lt;/li&gt;
&lt;li&gt;Not supported in most web browsers natively&lt;/li&gt;
&lt;li&gt;Requires OS-level or resolver-level configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What DoH does
&lt;/h2&gt;

&lt;p&gt;DNS over HTTPS sends DNS queries inside regular HTTPS traffic on port 443. From the outside, it looks identical to normal web browsing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your device --[HTTPS, port 443]--&amp;gt; DNS resolver (looks like any web traffic)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your ISP can't tell DNS queries apart from you browsing a website. That's the whole point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nearly impossible to block without breaking all HTTPS traffic&lt;/li&gt;
&lt;li&gt;Supported in Firefox, Chrome, Edge, and most modern browsers&lt;/li&gt;
&lt;li&gt;Works through corporate firewalls that allow HTTPS&lt;/li&gt;
&lt;li&gt;Harder for ISPs to detect and interfere with&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cons
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mixes DNS with web traffic, which complicates network monitoring&lt;/li&gt;
&lt;li&gt;Corporate/school network admins lose visibility into DNS queries&lt;/li&gt;
&lt;li&gt;Adds HTTP overhead to every DNS lookup&lt;/li&gt;
&lt;li&gt;Browsers may bypass the system DNS resolver entirely, which can break split-horizon DNS setups&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The political angle
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting. DoH and DoT aren't just technical choices - they represent different philosophies about who should control DNS.&lt;/p&gt;

&lt;p&gt;I've found that i learned this the hard way on a job in Salthill, and &lt;strong&gt;DoT says:&lt;/strong&gt; "DNS should be encrypted, but network administrators should still be able to see that DNS is happening and apply policy to it."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DoH says:&lt;/strong&gt; "DNS should be encrypted AND invisible. Nobody between you and the resolver should be able to interfere, including your network admin."&lt;/p&gt;

&lt;p&gt;ISPs generally dislike DoH because it takes away their ability to monitor, filter, or monetise DNS queries. Network admins in enterprises dislike it because it bypasses their security policies. Privacy advocates love it because it makes DNS surveillance much harder.&lt;/p&gt;

&lt;p&gt;Neither position is wrong. It depends on your context.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use DoT when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You control the full network (your homelab, your business)&lt;/li&gt;
&lt;li&gt;You run Pi-hole, AdGuard Home, or Unbound as a local resolver&lt;/li&gt;
&lt;li&gt;You want encrypted DNS but also want your network admin to be able to monitor DNS traffic patterns&lt;/li&gt;
&lt;li&gt;You're configuring DNS at the OS or router level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use DoH when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're on someone else's network (hotel WiFi, coffee shop, airport)&lt;/li&gt;
&lt;li&gt;Your ISP is known to hijack or snoop on DNS queries&lt;/li&gt;
&lt;li&gt;You want maximum privacy and minimum interference&lt;/li&gt;
&lt;li&gt;You're fine with browser-level DNS configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use both when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You run a local resolver (Pi-hole/Unbound) with DoT upstream, and also enable DoH in browsers as a fallback&lt;/li&gt;
&lt;li&gt;This is actually what I set up for most clients. Belt and braces.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to set them up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  DoH in Firefox
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Settings &amp;gt; Privacy &amp;amp; Security &amp;gt; scroll to DNS over HTTPS&lt;/li&gt;
&lt;li&gt;Select "Max Protection" or "Increased Protection"&lt;/li&gt;
&lt;li&gt;Choose a provider (Cloudflare, NextDNS, or custom)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  DoH in Chrome
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Settings &amp;gt; Privacy and security &amp;gt; Security&lt;/li&gt;
&lt;li&gt;"Use secure DNS" &amp;gt; select a provider&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  DoT on Android
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Settings &amp;gt; Network &amp;gt; Private DNS&lt;/li&gt;
&lt;li&gt;Enter a hostname like &lt;code&gt;dns.quad9.net&lt;/code&gt; or &lt;code&gt;one.one.one.one&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  DoT with systemd-resolved (Linux)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# /etc/systemd/resolved.conf
&lt;/span&gt;&lt;span class="nn"&gt;[Resolve]&lt;/span&gt;
&lt;span class="py"&gt;DNS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1.1.1.1#cloudflare-dns.com&lt;/span&gt;
&lt;span class="py"&gt;DNSOverTLS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  DoT with Pi-hole + Unbound
&lt;/h3&gt;

&lt;p&gt;This is the setup I use in my own homelab and recommend to clients. Pi-hole handles ad blocking, Unbound does recursive resolution with DoT to a trusted upstream. You get filtering, privacy, and full control.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to test if it's working
&lt;/h2&gt;

&lt;p&gt;After setting up encrypted DNS, verify it's actually encrypting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare test:&lt;/strong&gt; Visit &lt;a href="https://1.1.1.1/help" rel="noopener noreferrer"&gt;1.1.1.1/help&lt;/a&gt; - it tells you if you're using DoH/DoT&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS leak test:&lt;/strong&gt; Use a &lt;a href="https://publicdns.info/dns-privacy-check.html" rel="noopener noreferrer"&gt;DNS privacy checker&lt;/a&gt; to see if your queries are encrypted and whether they're leaking through other paths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wireshark:&lt;/strong&gt; If you want to be thorough, capture traffic and confirm there's no plaintext DNS on port 53&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Performance considerations
&lt;/h2&gt;

&lt;p&gt;Both DoH and DoT add a small amount of latency to the first query (TLS handshake). After that, the connection stays open and subsequent queries are about the same speed as plain DNS.&lt;/p&gt;

&lt;p&gt;In practice, the difference is negligible for normal browsing. If you're running a high-throughput DNS resolver handling thousands of queries per second, DoT has marginally less overhead because it doesn't have the HTTP layer.&lt;/p&gt;

&lt;p&gt;From what I've seen, for home users and small businesses? You won't notice the difference. Pick based on your privacy and control needs, not performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommendation
&lt;/h2&gt;

&lt;p&gt;For most people: turn on DoH in your browser. It takes 30 seconds, it's free, and it stops your ISP from logging every domain you visit. Cloudflare or Quad9 are both solid choices.&lt;/p&gt;

&lt;p&gt;For anyone running their own network: set up DoT at the resolver level (Pi-hole, Unbound, or your router if it supports it). This gives you encrypted upstream queries while keeping full visibility and control over your own network's DNS.&lt;/p&gt;

&lt;p&gt;And if you want to check whether your setup is actually private, run it through a DNS privacy check. No point configuring encrypted DNS if something else is leaking your queries out the side door.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>privacy</category>
      <category>security</category>
      <category>networking</category>
    </item>
    <item>
      <title>DNS Not Working? Here's How to Fix It in 5 Minutes</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Tue, 31 Mar 2026 22:32:53 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/dns-not-working-heres-how-to-fix-it-in-5-minutes-2l6p</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/dns-not-working-heres-how-to-fix-it-in-5-minutes-2l6p</guid>
      <description>&lt;p&gt;"The internet is down." I hear this at least twice a week from clients. And about half the time, it's not the internet at all. It's DNS.&lt;/p&gt;

&lt;p&gt;Your connection is fine. Your router is fine. But DNS has stopped resolving, so every website looks unreachable. The good news is this is usually fixable in a few minutes once you know where to look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Confirm it's actually DNS
&lt;/h2&gt;

&lt;p&gt;Before you start changing settings, make sure DNS is the problem and not something else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this works (you get replies), your internet connection is fine. The problem is DNS. If this fails too, it's a connectivity issue - check your router, cable, WiFi, etc.&lt;/p&gt;

&lt;p&gt;You can also try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; http://1.1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you get an HTTP response back, you have connectivity. DNS is the culprit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Check what DNS server you're using
&lt;/h2&gt;

&lt;p&gt;On Linux/macOS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ipconfig /all | findstr "DNS"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells you which DNS server your machine is talking to. If it's your router's IP (like 192.168.1.1), your router is forwarding queries to whatever your ISP assigned. If it's something like 8.8.8.8, you've set it manually at some point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Test the DNS server directly
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;dig&lt;/code&gt; to query the DNS server and see what happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig @8.8.8.8 google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this returns an answer with an IP address, that DNS server is working fine. Try it with whatever server showed up in Step 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig @192.168.1.1 google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This comes up a lot when I'm working with local businesses, and no response? Timeout? That's your problem. Your DNS server is either down or unreachable.&lt;/p&gt;

&lt;p&gt;In fairness, if you don't have &lt;code&gt;dig&lt;/code&gt; installed (common on Windows), you can use the &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;online dig tool at publicdns.info&lt;/a&gt; - it does the same thing from a browser without installing anything. Supports all record types too, which is handy for checking MX records, TXT records, and the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Try a different DNS server
&lt;/h2&gt;

&lt;p&gt;The quickest fix when your DNS server is misbehaving: switch to a different one temporarily.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Linux - temporary fix&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"nameserver 1.1.1.1"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/resolv.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, go to your network adapter settings and manually set DNS to 1.1.1.1 or 8.8.8.8.&lt;/p&gt;

&lt;p&gt;If everything starts working immediately, you've confirmed the problem was with your original DNS server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Flush your DNS cache
&lt;/h2&gt;

&lt;p&gt;Sometimes your machine has cached a bad or stale DNS response. Clearing the cache forces it to do fresh lookups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows&lt;/span&gt;
ipconfig /flushdns

&lt;span class="c"&gt;# macOS&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dscacheutil &lt;span class="nt"&gt;-flushcache&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;killall &lt;span class="nt"&gt;-HUP&lt;/span&gt; mDNSResponder

&lt;span class="c"&gt;# Linux (systemd)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemd-resolve &lt;span class="nt"&gt;--flush-caches&lt;/span&gt;

&lt;span class="c"&gt;# Linux (nscd)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nscd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After flushing, try loading a website again. If it works now, a stale cache was the issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Check for DNS hijacking
&lt;/h2&gt;

&lt;p&gt;Some ISPs and networks intercept DNS queries and redirect them to their own servers, even if you've configured different DNS. This is called DNS hijacking and it's more common than you'd think.&lt;/p&gt;

&lt;p&gt;Test it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig @1.1.1.1 whoami.cloudflare.com TXT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response should say "resolver IP" matches Cloudflare. If it shows a different IP, something between you and Cloudflare is intercepting your queries.&lt;/p&gt;

&lt;p&gt;The fix: use DNS over HTTPS (DoH) or DNS over TLS (DoT), which encrypts your queries so they can't be intercepted. Most modern browsers support DoH natively now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Check if it's just one domain
&lt;/h2&gt;

&lt;p&gt;If most sites work but one specific domain doesn't resolve, the problem might be with that domain's DNS, not yours.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com @8.8.8.8
dig example.com @1.1.1.1
dig example.com @9.9.9.9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If all three return the same error (NXDOMAIN or SERVFAIL), the domain's DNS records are broken on their end. Nothing you can do except wait or contact the site owner.&lt;/p&gt;

&lt;p&gt;If some resolvers work and others don't, it could be a propagation issue - the domain recently changed DNS records and not all servers have the update yet. You can check this with a &lt;a href="https://publicdns.info/tools/propagation" rel="noopener noreferrer"&gt;propagation checker&lt;/a&gt; that queries servers in different locations simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common DNS problems and what causes them
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely cause&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Everything stops resolving at once&lt;/td&gt;
&lt;td&gt;DNS server down, or your router lost its DNS config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One device can't resolve, others can&lt;/td&gt;
&lt;td&gt;That device's DNS cache is stale, or it has wrong DNS settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow DNS lookups (pages load eventually)&lt;/td&gt;
&lt;td&gt;DNS server is overloaded or far away geographically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Some domains resolve, others don't&lt;/td&gt;
&lt;td&gt;DNS filtering/blocking, or propagation delays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNS works on WiFi but not on VPN&lt;/td&gt;
&lt;td&gt;VPN is using a different DNS server that's misconfigured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Server not found" only in one browser&lt;/td&gt;
&lt;td&gt;Browser-level DoH settings overriding system DNS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to worry (and when not to)
&lt;/h2&gt;

&lt;p&gt;If flushing the cache or switching DNS fixes it, you're grand. It was a temporary glitch.&lt;/p&gt;

&lt;p&gt;If DNS keeps breaking repeatedly, that's a sign of a deeper issue - maybe your router's firmware needs updating, your ISP's DNS is consistently unreliable, or there's something on the network intercepting queries. At that point, setting up a local DNS resolver like Pi-hole gives you full control and logging so you can see exactly what's happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;ping 8.8.8.8&lt;/code&gt; - test connectivity (not DNS)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;dig @8.8.8.8 google.com&lt;/code&gt; - test a specific DNS server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ipconfig /flushdns&lt;/code&gt; or equivalent - clear DNS cache&lt;/li&gt;
&lt;li&gt;Switch DNS to 1.1.1.1 or 8.8.8.8 - bypass a broken server&lt;/li&gt;
&lt;li&gt;Check &lt;a href="https://publicdns.info/tools/dig" rel="noopener noreferrer"&gt;publicdns.info/tools/dig&lt;/a&gt; if you can't use the terminal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That covers about 90% of DNS issues I see in the field. The other 10% is usually something weird and specific to the network, but these steps will at least narrow down where the problem is.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>networking</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>How to Pick the Right Public DNS Server (And Why It Matters)</title>
      <dc:creator>Ciarán Doyle</dc:creator>
      <pubDate>Tue, 31 Mar 2026 18:29:11 +0000</pubDate>
      <link>https://dev.to/ciarn_doyle_32d63ba6797d/how-to-pick-the-right-public-dns-server-and-why-it-matters-4cp</link>
      <guid>https://dev.to/ciarn_doyle_32d63ba6797d/how-to-pick-the-right-public-dns-server-and-why-it-matters-4cp</guid>
      <description>&lt;p&gt;Most people never think about DNS until something breaks. You type in a URL, it loads. Magic. But the DNS resolver your machine talks to has a real impact on how fast pages load, whether dodgy domains get blocked, and how much of your browsing history leaks to third parties.&lt;/p&gt;

&lt;p&gt;I've been running a small IT consultancy in the West of Ireland for about 15 years now, mostly working with schools, medical practices, and local businesses. DNS issues come up constantly. And nine times out of ten, the fix starts with "what DNS server are you actually using?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Why your ISP's default DNS might not be great
&lt;/h2&gt;

&lt;p&gt;In fairness, i've tested this across dozens of different setups, and when you plug in a router, it usually picks up DNS settings from your ISP automatically. That works. But ISP DNS servers tend to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slower than alternatives&lt;/strong&gt; - they're shared across thousands of customers and not always well-maintained&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less reliable&lt;/strong&gt; - outages happen, and when your ISP's DNS goes down, everything looks "broken" even though your connection is fine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing security features&lt;/strong&gt; - most ISP resolvers don't support DNSSEC validation or encrypted DNS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sometimes dishonest&lt;/strong&gt; - some ISPs hijack failed DNS queries to show their own search pages full of ads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right, none of this means ISP DNS is terrible. For a lot of people it works fine. But if you want better speed, privacy, or reliability, switching takes about 2 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually matters when choosing
&lt;/h2&gt;

&lt;p&gt;There are loads of public DNS servers out there. Google (8.8.8.8), Cloudflare (1.1.1.1), Quad9 (9.9.9.9), OpenDNS, AdGuard - the list goes on. So how do you pick?&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Speed (latency to you specifically)
&lt;/h3&gt;

&lt;p&gt;In fairness, the fastest DNS server for someone in Tokyo won't be the fastest for someone in Galway. What matters is the round-trip time from your location to the resolver. A server with 5ms latency will feel noticeably snappier than one at 50ms, especially on pages that make dozens of DNS lookups.&lt;/p&gt;

&lt;p&gt;You can test this yourself with &lt;code&gt;dig&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig @8.8.8.8 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
dig @1.1.1.1 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
dig @9.9.9.9 example.com | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Query time"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you want to compare a wider range of servers without messing about in the terminal, &lt;a href="https://publicdns.info" rel="noopener noreferrer"&gt;publicdns.info&lt;/a&gt; keeps a live-tested directory of thousands of public DNS servers filterable by country. It tests them every 72 hours so you know which ones are actually responding.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Privacy
&lt;/h3&gt;

&lt;p&gt;Every DNS query you make tells the resolver which domains you visit. If privacy matters to you, look for resolvers that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support &lt;strong&gt;DNS over HTTPS (DoH)&lt;/strong&gt; or &lt;strong&gt;DNS over TLS (DoT)&lt;/strong&gt; - encrypts your queries so your ISP can't snoop&lt;/li&gt;
&lt;li&gt;Have a clear &lt;strong&gt;no-logging policy&lt;/strong&gt; - Cloudflare and Quad9 both publish audited privacy commitments&lt;/li&gt;
&lt;li&gt;Don't sell or share query data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare (1.1.1.1) and Quad9 (9.9.9.9) are generally the strongest here. Google DNS works well but Google's business model is advertising, which makes some people uncomfortable.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Security features
&lt;/h3&gt;

&lt;p&gt;Some resolvers go beyond just answering queries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quad9&lt;/strong&gt; blocks known malicious domains by default - proper threat intelligence, not just a blocklist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenDNS&lt;/strong&gt; offers configurable filtering categories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AdGuard DNS&lt;/strong&gt; blocks ads and trackers at the DNS level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CleanBrowsing&lt;/strong&gt; provides family-safe filtering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're setting up DNS for a school or a home with kids, filtering DNS is one of the easiest wins available.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Reliability and uptime
&lt;/h3&gt;

&lt;p&gt;The big providers - Cloudflare, Google, Quad9 - run anycast networks spread across dozens of data centres worldwide. They're about as reliable as it gets. Smaller providers can be fine too, but check whether they've had recent outages.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://publicdns.info" rel="noopener noreferrer"&gt;publicdns.info&lt;/a&gt;, servers are marked with status indicators (OK, TIMEOUT, BAD) so you can see at a glance which ones are actually working right now. That's useful if you're comparing lesser-known options.&lt;/p&gt;

&lt;h2&gt;
  
  
  My go-to recommendations
&lt;/h2&gt;

&lt;p&gt;For what it's worth, here's what I typically set up for clients:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For general use:&lt;/strong&gt; Cloudflare (1.1.1.1 / 1.0.0.1) - fast, private, reliable. Hard to beat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For security-conscious setups:&lt;/strong&gt; Quad9 (9.9.9.9) - blocks malicious domains, no logging, run by a non-profit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For families/schools:&lt;/strong&gt; CleanBrowsing (185.228.168.168) or AdGuard Family (94.140.14.15) - content filtering without needing extra software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For maximum control:&lt;/strong&gt; Run your own resolver with Pi-hole or AdGuard Home, using any of the above as upstream. Best of both worlds.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to change your DNS
&lt;/h2&gt;

&lt;p&gt;On most systems it takes under a minute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; Settings &amp;gt; Network &amp;gt; your adapter &amp;gt; DNS &amp;gt; set to manual, enter the addresses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; System Settings &amp;gt; Network &amp;gt; your connection &amp;gt; DNS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux:&lt;/strong&gt; edit &lt;code&gt;/etc/resolv.conf&lt;/code&gt; or use &lt;code&gt;nmcli&lt;/code&gt; / &lt;code&gt;systemd-resolved&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router level (recommended):&lt;/strong&gt; change DNS in your router's WAN settings - covers every device on the network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The way I see it, changing it at the router is what I'd recommend. Do it once and every phone, laptop, and smart TV on your network benefits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick test after switching
&lt;/h2&gt;

&lt;p&gt;After changing DNS, flush your cache and test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows&lt;/span&gt;
ipconfig /flushdns

&lt;span class="c"&gt;# macOS&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dscacheutil &lt;span class="nt"&gt;-flushcache&lt;/span&gt;

&lt;span class="c"&gt;# Linux&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemd-resolve &lt;span class="nt"&gt;--flush-caches&lt;/span&gt;

&lt;span class="c"&gt;# Then test&lt;/span&gt;
dig google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you get a response with a low query time, you're sorted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Picking the right DNS isn't complicated, but it does make a real difference. Faster lookups, better privacy, malware blocking - all from changing two numbers in your network settings. If you've never touched your DNS config, it's worth spending 5 minutes on.&lt;/p&gt;

&lt;p&gt;And if you want to explore what's out there beyond the big names, have a browse through the server directory at &lt;a href="https://publicdns.info" rel="noopener noreferrer"&gt;publicdns.info&lt;/a&gt; - there are thousands of tested servers across 200+ countries. You might find something faster for your specific location than the usual suspects.&lt;/p&gt;

</description>
      <category>dns</category>
      <category>networking</category>
      <category>sysadmin</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
