DEV Community

Cover image for Why Your Lab Domain Suddenly Stopped Resolving (DNS Blocklists)
Alan West
Alan West

Posted on

Why Your Lab Domain Suddenly Stopped Resolving (DNS Blocklists)

You wake up, grab coffee, and nothing works. Grafana won't load. Your reverse proxy is throwing 502s. SSH to your machines by hostname? Nope. But pinging by IP? Works fine.

Congratulations, your domain just got added to a DNS blocklist and your entire homelab infrastructure fell over like dominoes.

I hit this exact scenario a few months ago with a domain I'd been using for my lab for over a year. Everything was fine until it wasn't. Let me walk you through what happened, why it happens, and how to fix it — plus how to make sure it doesn't wreck your setup again.

What Actually Happened

DNS blocklists (DNSBLs) are databases of domains and IP addresses flagged as malicious, spammy, or suspicious. Services like Spamhaus, SURBL, and various community-maintained lists are used by DNS resolvers, email servers, and firewalls to filter bad traffic.

The problem? Sometimes legitimate domains end up on these lists. And if your upstream DNS resolver checks against blocklists — which many do by default — your domain simply stops resolving.

Here's the brutal part: everything else on the internet works. You can browse Reddit, pull Docker images, do whatever. But YOUR domain? Gone. Vanished. It's like it never existed.

# This works fine
dig google.com @1.1.1.1
;; ANSWER SECTION:
google.com.    300    IN    A    142.250.80.46

# Your domain? Radio silence or NXDOMAIN
dig lab.yourdomain.com @1.1.1.1
;; status: NXDOMAIN
Enter fullscreen mode Exit fullscreen mode

This is especially confusing because if you query a different resolver that doesn't use that particular blocklist, it works perfectly:

# Same domain, different resolver — suddenly it resolves
dig lab.yourdomain.com @8.8.8.8
;; ANSWER SECTION:
lab.yourdomain.com.    300    IN    A    192.168.1.50
Enter fullscreen mode Exit fullscreen mode

That inconsistency is your first clue.

Why Domains End Up on Blocklists

There are a few common reasons this happens:

  • You bought a previously-used domain. Someone before you used it for spam or phishing. The domain got flagged, dropped, and you picked it up cheap without knowing its history.
  • Your registrar or DNS provider's IP range got flagged. Sometimes the whole neighborhood gets punished for one bad actor.
  • Automated scanners flagged your setup. If you're running open services on your domain without proper configuration, scanners might flag it as suspicious.
  • A wildcard DNS record is catching abuse. If you have *.yourdomain.com pointing somewhere, attackers can create phishing URLs like paypal-login.yourdomain.com and get your whole domain flagged.

Step 1: Confirm It's a Blocklist Issue

Before you go down this rabbit hole, verify the problem. Check your domain against known blocklists:

# Check if your domain is listed on Spamhaus DBL
dig yourdomain.com.dbl.spamhaus.org

# If you get a 127.0.1.x response, you're listed
# 127.0.1.2 = spam domain
# 127.0.1.4 = phishing domain
# 127.0.1.5 = malware domain
# NXDOMAIN = you're clean on this list
Enter fullscreen mode Exit fullscreen mode

You can also use multi-checker tools. MXToolbox has a blacklist lookup, and there are open-source CLI tools like dnsbl-check that query multiple lists at once.

Test against multiple resolvers to see which ones are blocking you:

# Quick test across popular resolvers
for resolver in 1.1.1.1 8.8.8.8 9.9.9.9 208.67.222.222; do
  echo "--- $resolver ---"
  dig +short yourdomain.com @$resolver
done
Enter fullscreen mode Exit fullscreen mode

If some resolve and others don't, you've got a blocklist problem.

Step 2: Request Delisting

Most blocklist operators have a removal process. It's not always fast, but it works:

  • Spamhaus: Has a web-based removal form. You'll need to explain what the domain is used for and what you've done to address the issue.
  • SURBL: Similar process, though they can be slower to respond.
  • Community lists: These vary wildly. Some have GitHub repos where you can open an issue. Others have email-based processes.

The key thing: actually fix whatever caused the listing before requesting removal. If your domain was flagged for an open relay or a wildcard DNS issue, fix that first. They will check.

Step 3: Stop Your Lab From Breaking While You Wait

Delisting can take hours to days. Meanwhile, your stuff is broken. Here's how to keep things running.

Option A: Use Local DNS

If you're running Pi-hole, Unbound, AdGuard Home, or any local DNS server, add local records for your lab services:

# Example: Unbound local zone configuration
server:
    local-zone: "yourdomain.com." static
    local-data: "grafana.yourdomain.com. IN A 192.168.1.50"
    local-data: "gitea.yourdomain.com. IN A 192.168.1.50"
    local-data: "wiki.yourdomain.com. IN A 192.168.1.50"
Enter fullscreen mode Exit fullscreen mode

This means your internal resolution never hits the upstream resolver at all. It just works, blocklist or not.

Option B: Switch Upstream Resolvers

Not all resolvers use the same blocklists. If Cloudflare (1.1.1.1) is blocking your domain but Google (8.8.8.8) isn't, switch your upstream temporarily:

# If you're using systemd-resolved
sudo resolvectl dns eth0 8.8.8.8 8.8.4.4

# Or edit /etc/resolv.conf directly (not ideal but works in a pinch)
nameserver 8.8.8.8
nameserver 8.8.4.4
Enter fullscreen mode Exit fullscreen mode

This is a bandaid, not a fix. But it keeps things running.

Option C: Split-Horizon DNS

This is the real answer for long-term resilience. Run your own recursive resolver internally and only use it for your domain. External queries go to whatever public resolver you prefer.

# CoreDNS Corefile example for split-horizon
yourdomain.com {
    file /etc/coredns/yourdomain.com.zone
    log
}

. {
    forward . 1.1.1.1 9.9.9.9
    cache 30
    log
}
Enter fullscreen mode Exit fullscreen mode

Your domain resolves locally. Everything else resolves normally. No upstream resolver can break your internal services.

Step 4: Prevent This From Happening Again

Once you've recovered, harden your setup so this can't take you down again.

Run your own authoritative DNS for internal services. This is the single biggest thing you can do. If your lab services resolve via local DNS, no blocklist on earth can break them. Tools like Unbound, CoreDNS, PowerDNS, or even dnsmasq handle this well.

Check domain history before buying. Before registering a domain, check its reputation. Look it up on Spamhaus, run it through web archive lookups, and check if it has any existing DNS records that suggest prior use.

Don't use wildcard DNS records publicly. If you need wildcards for your reverse proxy, do it in your local DNS only. A public wildcard record is an invitation for abuse.

Monitor your domain reputation. Set up a cron job or a simple script that checks your domain against major blocklists weekly:

#!/bin/bash
# Simple blocklist monitor — run via cron weekly
DOMAIN="yourdomain.com"
BLOCKLISTS=("dbl.spamhaus.org" "multi.surbl.org" "black.uribl.com")

for bl in "${BLOCKLISTS[@]}"; do
  result=$(dig +short "$DOMAIN.$bl")
  if [ -n "$result" ]; then
    echo "WARNING: $DOMAIN is listed on $bl ($result)" | \
      mail -s "DNS Blocklist Alert" you@email.com
  fi
done
Enter fullscreen mode Exit fullscreen mode

Use a .local or non-public TLD for purely internal services. If your services never need to be reached from outside your network, consider whether you even need a public domain for them. A .home.arpa domain (the IETF-recommended TLD for home networks) can't get blocklisted because it's not publicly resolvable.

The Takeaway

The fundamental lesson here is about dependency chains. When your entire lab depends on external DNS resolution for internal service-to-service communication, you've created a single point of failure that you don't control. One blocklist entry, one upstream resolver hiccup, one registrar issue — and everything falls over.

Run local DNS for local services. It's not hard to set up, it's faster than external resolution anyway, and it makes your lab resilient to exactly this kind of problem. I should have done it from day one instead of learning the hard way at 7 AM on a Saturday.

Top comments (0)