Skip to main content

Advanced Debugging: NS Delegation Configured, Site Still Not Working

This article is for IT and network teams who have created the NS delegation for their LemonadeLXP hostname and are still unable to reach the site on INTERNAL networks.

This article walks through each layer where a delegated hostname can fail in an internal network setting, in the order they occur, with commands for both Windows DNS and BIND/Linux. Work through the stages in sequence — later stages assume the earlier ones passed.

If you have not yet created your delegation, start with Connecting your domain to LXP / Learn instead.


Prerequisites — check these first

A delegation only works if your DNS servers can reach the nameservers you delegated to. Two requirements are easy to miss:

Requirement

Detail

Outbound DNS from your DNS servers

UDP and TCP port 53, from every DNS server authoritative for your domain, to Cloudflare's nameserver addresses

Both nameservers delegated

Two NS records. One is not sufficient.

Cloudflare's authoritative nameservers are anycast. The ranges containing them are:

108.162.192.0/18 
172.64.0.0/13
173.245.48.0/20

Important: DNS forwarders do not satisfy this requirement. When your DNS server is authoritative for yourdomain.com and encounters a delegation for a hostname inside it, it queries the delegated nameservers directly. Forwarders are only consulted for names outside its authoritative zones. A server with correct forwarders and no direct egress will resolve the entire internet normally and fail on every delegated subdomain.

This is the single most common cause of a correct delegation not working.


Start here: classify the symptom

The diagnostic path depends entirely on what you are seeing. Find your symptom below and go to the stage indicated.

What you see

What it means

Go to

Cloudflare "Error 1034 — Edge IP Restricted"

DNS resolved, but to an address that does not serve your hostname

Stage 1

SERVFAIL / "DNS server failure"

A resolver received the query and answered with a failure

Stage 3, then 4

Timeout / "the timeout period expired"

Nothing answered the query at all

Stage 2

NXDOMAIN / "does not exist"

No record exists at that name

Stage 1

Works externally, fails on the corporate network

Your internal zone differs from public DNS

Stage 1 (internal)

Certificate warning, connection reset, or a block page

DNS is working; the failure is at the web layer

Stage 6

Intermittent or partial failures

Often TCP/53 fallback being blocked

Stage 2


Stage 0 — Clear caches

A correct change that appears not to work is usually a stale cache. Do this before anything else, and allow the previousrecord's TTL to expire before drawing conclusions.

Windows — on each DNS server, then a test workstation:

Clear-DnsServerCache
ipconfig /flushdns

BIND / Linux — on the DNS server, then a test client:

sudo rndc flush                              # BIND 
sudo unbound-control flush_zone <yourdomain> # Unbound
sudo resolvectl flush-caches # systemd-resolved client


Stage 1 — Confirm the delegation exists, in both places

If your organization runs internal DNS that is authoritative for your domain — most banks and credit unions do — you have two authoritative sources and both must be correct. Machines on your corporate network never consult public DNS for your own domain.

Read the internal zone directly

Windows — on a domain controller. -Name is the label relative to the zone, not the FQDN:

Get-DnsServerResourceRecord -ZoneName yourdomain.com -Name learn

For learn.yourdomain.com, -ZoneName is yourdomain.com and -Name is learn. Passing the full hostname to -Name will look for learn.yourdomain.com.yourdomain.com and report nothing found.

If the hostname was created as its own zone, -ZoneName is the full hostname and -Name is @. List your zones to check:

Get-DnsServerZone

BIND / Linux — query the authoritative server directly, and list the zones it serves:

dig @<internal-dns-ip> learn.yourdomain.com NS +norecurse
named-checkconf -p | grep -A2 '^zone'

+norecurse matters. Without it you may get a cached or recursively resolved answer rather than what the zone actually contains. You can also inspect the zone file directly, or dump the running configuration with rndc dumpdb -zones and read /var/named/data/cache_dump.db.

Confirm public DNS agrees

Resolve-DnsName learn.yourdomain.com -Type NS -Server 1.1.1.1 -DnsOnly
dig @1.1.1.1 learn.yourdomain.com NS

What you should see

Result

Verdict

Two NS records → the nameservers we assigned

✅ Correct

One NS record

⚠️ Incomplete — add the second

An A record

❌ Not supported. See the setup article.

A CNAME to anything ending .ns.cloudflare.com

❌ Not supported — this causes Error 1034

Nothing, or an error

❌ The delegation is missing from this zone

Internal and public disagree

❌ Fix the internal zone

Check the nameserver hostnames for typos

A single-character error produces a delegation that looks perfect and never resolves. cloudfare (missing the l) is the classic. Confirm each nameserver you delegated to actually resolves:

Resolve-DnsName josh.ns.cloudflare.com -Server 1.1.1.1
dig @1.1.1.1 josh.ns.cloudflare.com A

If a nameserver hostname does not resolve, correct the spelling in your NS records.


Stage 2 — Confirm your DNS server can reach Cloudflare

Run these on the DNS server, not a workstation. The workstation never queries Cloudflare — your DNS server does the recursion, so its egress path is the one that matters.

Test UDP/53 — the primary transport

Resolve-DnsName learn.yourdomain.com -Server josh.ns.cloudflare.com Resolve-DnsName learn.yourdomain.com -Server sue.ns.cloudflare.com
dig @josh.ns.cloudflare.com learn.yourdomain.com dig @sue.ns.cloudflare.com learn.yourdomain.com

Test TCP/53 — the fallback transport

Test-NetConnection josh.ns.cloudflare.com -Port 53
dig @josh.ns.cloudflare.com learn.yourdomain.com +tcp

Note that Test-NetConnection -Port tests TCP only. A successful PingSucceeded with TcpTestSucceeded : False means routing is fine and port 53 is being dropped — it does not tell you anything about UDP, which is why both tests above are needed.

Interpreting the results

UDP

TCP

Diagnosis

Action

Egress is fine

Go to Stage 3

Fallback blocked. Causes intermittent failures on large or DNSSEC-signed responses.

Open TCP/53

DNS egress blocked. Most common cause.

Open UDP+TCP/53

Unusual — check for a UDP-specific policy or DNS inspection appliance

Open UDP/53

If ICMP succeeds while port 53 fails, you have a firewall permitting ping and dropping DNS. That is a policy decision, not a fault.

The firewall request

Source:      All DNS servers authoritative for yourdomain.com 
Destination: 108.162.192.0/18, 172.64.0.0/13, 173.245.48.0/20
Ports: UDP 53 and TCP 53
Direction: Outbound only — no inbound rule required

If egress cannot be opened

A conditional forwarder for the specific hostname, pointing at a resolver that already has permitted egress, is a supported alternative.

Remove the NS delegation if you do this. Authoritative zone data generally takes precedence over a conditional forwarder, so leaving both in place risks the forwarder never being consulted.

  • Windows: DNS Manager → Conditional Forwarders → New, scoped to learn.yourdomain.com

  • BIND: zone "learn.yourdomain.com" { type forward; forward only; forwarders { 1.1.1.1; }; };

This approach should work, but we are unable to assist with its diagnosis.


Stage 3 — Test end-to-end resolution

With the delegation in place and egress open, resolution should complete.

Resolve-DnsName learn.yourdomain.com -DnsOnly -NoHostsFile
dig learn.yourdomain.com

-DnsOnly and -NoHostsFile suppress the hosts file, LLMNR, and NetBIOS so you see the actual DNS answer. dig never consults those sources.

Trace the full delegation chain

This is the most informative diagnostic available to you. It walks the delegation from the root and shows exactly where it stops.

BIND / Linux:

dig learn.yourdomain.com +trace

Read it top down. You should see referrals from the root, to the TLD, to your domain's nameservers, then to the Cloudflare nameservers, then a final answer. The last successful step tells you which layer is failing. If the trace stops at your own nameservers, the delegation is not being served. If it reaches Cloudflare and stalls, egress or DNSSEC is the issue.

Windows — there is no +trace equivalent, so walk the chain manually. Each step queries the nameservers returned by the previous one:

# 1. Who is authoritative for your domain? 
Resolve-DnsName yourdomain.com -Type NS -Server 1.1.1.1 -DnsOnly

# 2. Ask those nameservers about the delegated hostname.
# Substitute a nameserver returned by step 1. Resolve-DnsName learn.yourdomain.com -Type NS -Server <ns-from-step-1> -DnsOnly

# 3. Ask the Cloudflare nameservers returned by step 2 directly.
Resolve-DnsName learn.yourdomain.com -Server josh.ns.cloudflare.com -DnsOnly

The step that fails is the layer to investigate. Failure at step 2 means your nameservers are not serving the delegation; failure at step 3 means egress or DNSSEC.

For a genuine +trace, dig is available for Windows via BIND Tools, or you can run the trace from any Linux or macOS host and compare its result against your internal one.


Stage 4 — Rule out DNSSEC

If your domain is DNSSEC-signed, a mismatch at the delegation point produces SERVFAIL while every record looks correct.

Check for DS records and signed responses

Windows:

Resolve-DnsName learn.yourdomain.com -DnssecOk -Server 1.1.1.1 
Resolve-DnsName learn.yourdomain.com -Type DS -Server 1.1.1.1
Resolve-DnsName yourdomain.com -Type DS -Server 1.1.1.1

BIND / Linux:

dig @1.1.1.1 learn.yourdomain.com +dnssec 
dig @1.1.1.1 learn.yourdomain.com DS
dig @1.1.1.1 yourdomain.com DS

Compare against resolution with validation bypassed

This is the decisive test — if the query succeeds with validation off and fails with it on, DNSSEC is your problem.

BIND / Linux:

dig @1.1.1.1 learn.yourdomain.com +cd

WindowsResolve-DnsName has no checking-disabled flag, so inspect your validation configuration instead:

Get-DnsServerDnsSecZoneSetting -ZoneName yourdomain.com 
Get-DnsServerTrustAnchor -Name yourdomain.com
Get-DnsServerSetting -All | Select-Object EnableDnsSec

If you have no Linux host available, running the +cd comparison from any external machine is a valid substitute — the question is whether the record set validates, which is not specific to your network.

Common causes are a DS record published for the delegated hostname that does not match, or a stale DS or trust anchor left behind from a previous configuration.

Note that a delegated subdomain generally should not carry its own DS record unless we have explicitly provided one.


Stage 5 — Rule out something shadowing the delegation

A delegation can be present and correct while another configuration takes precedence over it.

Look for competing zones and forwarders

Windows:

Get-DnsServerZone | Where-Object { $_.ZoneType -ne 'Primary' } 
Get-DnsServerForwarder
Get-DnsServerZoneDelegation -Name yourdomain.com

BIND / Linux:

named-checkconf -p | grep -B1 -A4 'type forward\|type stub' 
named-checkconf -p | grep -A2 'zone "learn'
grep -rn "learn\|response-policy" /etc/named.conf /etc/named/ /etc/bind/

Inspect what the server has actually cached

Windows:

Show-DnsServerCache | Where-Object { $_.RecordName -like '*learn*' }

BIND / Linux:

sudo rndc dumpdb -cache sudo grep -i "learn" /var/named/data/cache_dump.db

For Unbound, use unbound-control dump_cache | grep -i learn instead.

Things to look for:

  • A conditional forwarder or stub zone for yourdomain.com that does not know about the learn delegation

  • A separate internal zone named learn.yourdomain.com containing an A record

  • A wildcard record in the parent zone

  • Response Policy Zones (RPZ) or DNS filtering rewriting the answer

Any of these will win over the delegation and produce a wrong or failing answer.


Stage 6 — DNS resolves, but the site still fails

If resolution now returns Cloudflare addresses and the site still does not load, the problem is at the web layer.

Check what you resolved to

Windows:

Resolve-DnsName learn.yourdomain.com -DnsOnly

BIND / Linux:

dig learn.yourdomain.com +short

Expected: two or three addresses in Cloudflare's proxy ranges — typically 104.x, 172.6x, or 188.114.x.

If you see an address ending in .126, or any address that josh.ns.cloudflare.com resolves to, something is still returning a nameserver address. Return to Stage 1 and Stage 5.

Test HTTPS reachability

Windows:

Test-NetConnection learn.yourdomain.com -Port 443 
Invoke-WebRequest https://learn.yourdomain.com/cdn-cgi/trace -UseBasicParsing | Select-Object -ExpandProperty Content

BIND / Linux:

nc -vz learn.yourdomain.com 443 
curl -sv https://learn.yourdomain.com/cdn-cgi/trace

The /cdn-cgi/trace endpoint returns the Cloudflare colo that served you and the source IP Cloudflare observed. It is a fast way to confirm you reached Cloudflare's edge at all.

Common web-layer causes

Symptom

Likely cause

Error 1034 — Edge IP Restricted

Resolution reached a Cloudflare address not authorised for your hostname. A static record still exists somewhere. See Stage 1.

Certificate warning naming your own CA

TLS inspection appliance. The hostname may need to be added to an inspection bypass list.

Connection reset or hang on 443

HTTPS egress blocked, or a proxy requiring explicit configuration

Corporate block page

URL filtering category. The hostname needs allowlisting.

Site loads but assets fail

Content filtering on specific paths, or a proxy stripping headers

A note on Error 1034 and Ray IDs

Error 1034 is rejected at Cloudflare's edge before the request is associated with our zone. This means the Ray ID shown on the error page cannot be located in our logs, and we cannot look it up for you. This is expected for this error class and is not a sign of a spoofed page — but it does mean the diagnosis has to come from your side's DNS configuration rather than from our logs.


What to send us

If you have worked through the stages and are still stuck, send the following and we will pick it up from there:

  1. Output of Get-DnsServerResourceRecord (or the equivalent dig +norecurse) from your internal DNS server

  2. Output of the same query against 1.1.1.1

  3. Results of the Stage 2 UDP and TCP tests, run on the DNS server, with the server's IP address

  4. dig learn.yourdomain.com +trace if you have a Linux host available

  5. A full-page screenshot of any error page, including the Ray ID and footer

  6. Whether the hostname worked previously, and roughly when it stopped

Item 3 is the one most often missing and most often decisive. Please run it on the DNS server rather than a workstation.


Quick reference

Symptom

Most likely cause

Stage

Timeout from the DNS server

DNS egress blocked

2

SERVFAIL

Egress blocked, or DNSSEC

2, 4

NXDOMAIN

Delegation missing from this zone

1

Error 1034

A static record still in place somewhere

1, 5

Works off-network only

Internal zone missing the delegation

1

Intermittent failures

TCP/53 fallback blocked

2

Certificate warnings

TLS inspection

6

Resolves to a .126 address

A nameserver address is being returned as a web endpoint

1, 5

Did this answer your question?