DNS Resolution Issue: Root Domain (non-www) Points to Wrong IP Despite Correct DNS Records


3 views

When performing DNS lookups for example.com, I noticed inconsistent behavior between the www-prefixed and root domain versions:

# Expected behavior (www)
$ dig +short www.example.com
192.0.2.1

# Unexpected behavior (root)
$ dig +short example.com
198.51.100.42

Checking the authoritative nameservers shows no rogue records:

$ dig +trace example.com NS
;; Received 521 bytes from 8.8.8.8#53(8.8.8.8) in 12 ms

example.com.    3600    IN    NS    ns1.registrar.com.
example.com.    3600    IN    NS    ns2.registrar.com.
$ dig @ns1.registrar.com example.com ANY
;; ANSWER SECTION:
example.com.    300    IN    A    192.0.2.1
example.com.    3600    IN    NS    ns1.registrar.com.
example.com.    3600    IN    NS    ns2.registrar.com.

1. Registrar-level Redirects
Many domain registrars implement "parking page" systems that override DNS:

# Check for HTTP response differences
$ curl -I http://example.com
HTTP/1.1 301 Moved Permanently
Location: http://www.example.com

$ curl -I http://www.example.com
HTTP/1.1 200 OK

2. Hidden CNAME Flattening
Some DNS providers convert CNAME at root to A records:

# Use dig +nocmd +noall +answer +ttlid example.com CNAME

Cross-validate using multiple DNS resolvers:

#!/bin/bash
resolvers=("1.1.1.1" "8.8.8.8" "9.9.9.9" "208.67.222.222")
for resolver in "${resolvers[@]}"; do
    echo "Testing $resolver:"
    dig @$resolver +short example.com
done

Verify nameserver delegation at the TLD level:

$ whois example.com | grep -i "name server"
Name Server: NS1.REGISTRAR.COM
Name Server: NS2.REGISTRAR.COM

For Cloudflare users, ensure proper proxy status:

# Cloudflare API check
curl -X GET "https://api.cloudflare.com/client/v4/zones/?name=example.com" \
    -H "Authorization: Bearer YOUR_API_TOKEN"

For AWS Route 53, check alias records:

aws route53 list-resource-record-sets \
    --hosted-zone-id ZONEID \
    --query "ResourceRecordSets[?Name=='example.com.']"

When troubleshooting domain resolution, I encountered a peculiar case where:

nslookup www.example.com
# Returns: 192.0.2.1 (correct server)

nslookup example.com  
# Returns: 203.0.113.45 (unknown server)

Digging deeper showed no trace of 203.0.113.45 in any DNS records:

dig example.com ANY
; No unexpected records found

After extensive testing, these emerged as likely causes:

1. Caching Layers

Intermediate DNS caches might retain outdated records. Verify with:

dig @8.8.8.8 example.com  
dig @1.1.1.1 example.com

2. Registrar-Level Redirects

Some registrars implement hidden forwarding. Check with:

whois example.com | grep -i "nameserver"

3. Browser HSTS Preloading

For HTTPS sites, test with curl to bypass browser cache:

curl -v http://example.com

Here's my step-by-step verification script:

#!/bin/bash
DOMAIN="example.com"

# Check authoritative NS
echo "Authoritative nameservers:"
dig NS $DOMAIN +short

# Check all record types
echo "\nAll DNS records:"
dig ANY $DOMAIN +nocmd +noall +answer

# Verify global resolution
echo "\nGlobal DNS checks:"
for resolver in {1.1.1.1,8.8.8.8,9.9.9.9}; do
  echo "$resolver: $(dig @$resolver $DOMAIN +short)"
done

Based on my experience, these fixes consistently work:

# Explicit CNAME for root domain
@    IN    CNAME    www.example.com.
www  IN    A        192.0.2.1

Or for modern setups using ALIAS/ANAME:

@    IN    ALIAS    www.example.com.

For persistent cases, these nuclear options help:

  • Registrar DNS reset (change nameservers temporarily)
  • Submit removal request for Google Public DNS cache
  • Contact ICANN if registrar won't resolve the issue