The company runs an internal Active Directory domain, company.local — a private DNS namespace never delegated anywhere on the public internet, served entirely by internal AD-integrated DNS servers. Separately, the company owns the public domain company.com, delegated by its registrar to a public DNS provider (e.g. Cloudflare, Route 53).
SetupAn internal client's resolver — pointed at the internal AD DNS server via DHCP — sends the query directly to that server, which is authoritative for the entire company.local zone. It owns the A record for the Exchange server (10.20.5.10) directly and answers immediately and correctly. No part of this touches the public internet's DNS hierarchy at all.
Internalcompany.local and company.com are two entirely separate zones, hosted on two entirely separate pieces of authoritative infrastructure, sharing nothing but part of a company name. A correctly working record in one zone carries zero implication about the health, existence, or correctness of any record in the other. This is the single fact the whole question is testing.
CheckpointAn external user's resolver has no knowledge of, or path to, the internal AD DNS server at all — it's not reachable from the internet, by design. Instead, this query follows the normal public hierarchy: root servers → .com TLD servers → company.com's actual public authoritative name servers.
ExternalThe public authoritative server for company.com either has no record for the "mail" host, has a stale one, or has a record pointing to an IP/NAT mapping that isn't actually reachable (e.g. the firewall's VIP/DNAT for mail was reconfigured or never published). Resolution fails one of a few distinct ways — and which one matters for troubleshooting.
FailureNXDOMAIN/SERVFAIL — the name genuinely doesn't exist or the authoritative server errored — is a pure DNS/zone configuration problem, fixed by editing the zone. "Resolves fine but unreachable" — the record returns a valid IP, but nothing answers there — is usually a firewall, NAT, or server-availability problem, fixed by a completely different team. Conflating these two during triage sends the ticket to the wrong owner.
DiagnosisMany well-run environments avoid this two-namespace design entirely and instead use the same name, mail.company.com, both internally and externally — via split-horizon (split-brain) DNS. The internal DNS server hosts its own authoritative copy of just that record, returning the internal IP directly to internal clients, while the real public authoritative servers return the public-facing NAT'd IP to everyone else. Same name, two different truthful answers depending on who's asking.
Split-HorizonWithout it, internal clients resolving the public name would get the public NAT'd IP and have to hairpin out through the firewall and back in just to reach a server sitting on their own LAN — wasted WAN bandwidth and added latency for zero benefit. Split-horizon lets internal traffic take the direct, efficient path while external traffic still goes through the proper public-facing NAT/firewall path.
RationaleThe exact same "works internally, fails externally" symptom could still occur under a split-horizon design — but the fix would be different: you'd check the public view of that specific record on the internal DNS server (or the actual public authoritative servers), not treat the two zones as unrelated the way the .local/.com scenario requires.
ContrastQuery the domain's real public authoritative name servers directly — bypassing every local cache and resolver — with something like dig mail.company.com @ns1.provider.com. This shows exactly what the internet actually sees, independent of what any internal server, cache, or resolver believes, and is the fastest way to confirm whether the problem is genuinely in the public zone.
dig or nslookup, specifying that server explicitly rather than using the system's default resolver — this returns the zone's true current state, with no local cache, ISP resolver cache, or split-horizon internal view able to mask what's actually published.| Term | Meaning |
|---|---|
| Authoritative Zone | The specific DNS zone a given server holds the definitive, source-of-truth records for |
| Split-Horizon / Split-Brain DNS | Serving different answers for the same name depending on whether the query is internal or external |
| AD-Integrated DNS | DNS zones stored and replicated within Active Directory, serving an internal domain namespace |
| NXDOMAIN | A DNS response indicating the queried name genuinely does not exist in the zone |
| SERVFAIL | A DNS response indicating the authoritative or resolving server encountered an internal error |
| Delegation | A parent zone (e.g. .com) pointing to the specific name servers authoritative for a subdomain |
| Public DNS Provider | A third-party service (Cloudflare, Route 53, etc.) hosting a domain's public-facing authoritative zone |
| dig / nslookup Direct Query | Querying a specific authoritative server directly, bypassing local/cached resolution |
| .local (mDNS Conflict) | A reserved namespace also used by multicast DNS, causing conflicts if reused for internal AD domains |
| Zone Drift | Configuration divergence between separately managed DNS zones over time |