Active Directory DNS design decisions that outlive their authors

Namespace, zone storage and forwarder choices are made once and inherited for twenty years. These are the ones that are expensive to reverse, and the ones that are not.

Series: Active Directory

  • Active Directory
  • DNS
  • Architecture

DNS is where Active Directory keeps its service locator. Domain controllers publish what they are and where they are in the _msdcs zone, and every client, member server and replication partner finds the directory through it. A DNS design problem therefore presents as an Active Directory problem, which is why it is so often misdiagnosed.

The decisions below get made in the first week of a forest’s life and are then inherited by everyone who follows. Some are cheap to change later. Some are not, and knowing which is which is most of the value.

The problem: three decisions, very different reversal costs

Decision Cost to change later
Namespace for the forest root Very high — effectively a forest rebuild or a rename with wide application impact
Zone storage and replication scope Low to moderate — an online change
Forwarders, conditional forwarders and root hints Low — an operational change
Split-brain handling for the public domain Moderate — but painful while it is wrong

Spend your design effort in proportion to that table. I have watched teams debate forwarders for a week and pick the namespace in a meeting.

Choosing the namespace

The forest root domain name is the decision with no cheap exit. Three patterns exist, and only two of them are defensible.

A delegated subdomain of a domain you owncorp.contoso.com where you own contoso.com. This is the pattern I would choose by default. It is globally unique, it is unambiguously yours, it does not collide with anything, and it keeps your internal namespace clearly separate from the public one. The public zone stays with whoever hosts it and the internal zone is authoritative only for corp.contoso.com.

The same name as your public domaincontoso.com internally and externally. This is split-brain DNS, and it works, but it commits you to permanent maintenance. Your internal zone is authoritative for contoso.com, so every public record that internal clients need — the web site, the mail exchanger, anything a vendor adds to the public zone — must be duplicated internally or it becomes unreachable from inside. The failure mode is that someone adds a public record, internal users cannot reach it, and the cause is not obvious because the name resolves perfectly well from outside.

An invented non-routable suffix.local, .corp, .lan. Avoid this. .local collides with multicast DNS, and inventing a top-level label means you cannot obtain a publicly trusted certificate for any internal name, which matters far more now than it did when these forests were built. Many long-running estates are on one of these, and the honest answer is usually to live with it rather than rename — but do not start a new one here.

Zone storage and replication scope

Store Active Directory zones as Active Directory-integrated. This gives you multi-master updates, replication over the existing directory topology, secure dynamic update, and access control on the zone. A primary file-based zone on one server gives you a single point of failure and a manual copy to keep.

The replication scope is the part that is actually a decision:

  • All DNS servers in the forest — the zone lives in a forest-wide application partition.
  • All DNS servers in the domain — a domain-wide application partition. This is the default for a new zone and the right answer for most.
  • All domain controllers in the domain — stores the zone in the domain naming context instead of an application partition. This exists for Windows 2000 compatibility and replicates the zone to every domain controller whether or not it runs DNS. Do not choose it for anything new.

Choose forest-wide scope when servers in other domains must resolve the zone directly and you do not want to maintain conditional forwarders between them. Choose domain-wide otherwise, which is most of the time.

The _msdcs.<forestroot> zone is a separate case. In a forest created on Windows Server 2003 or later it is a distinct zone replicated forest-wide, which is what allows domain controllers in any domain to locate forest-wide services. If you inherit a forest where _msdcs records sit inside the domain zone with domain-wide scope, that is a legacy artefact worth correcting, because it is a common cause of cross-domain replication failures reporting error 8524.

Secure dynamic update, and what it actually protects

Set dynamic updates to secure only on every Active Directory-integrated zone. This restricts updates to authenticated principals and records the owner on each record, so a host can update its own record and not somebody else’s.

Two consequences follow that people meet later:

Records created before secure update was enabled, or created by an account that no longer exists, may have an owner that cannot update them. The host then fails to refresh its record and you get stale entries that resist correction. This is normal and is fixed by correcting ownership, not by loosening the zone.

Non-Windows devices that cannot perform authenticated updates need either a DHCP server configured to update on their behalf, or static records. Letting the zone accept unauthenticated updates to accommodate a printer is not a trade worth making — an unauthenticated update to a service record is a credential interception opportunity.

Where DHCP performs updates, use a dedicated DHCP update account rather than the DHCP server’s own computer account, and do not place DHCP on a domain controller. Where both conditions are true, records end up owned by the domain controller’s account and the resulting permission behaviour is genuinely confusing to unpick.

Client configuration, which is where most faults actually are

Domain members must point at DNS servers that are authoritative for, or can resolve, the Active Directory zones. Not the router. Not a public resolver. This sounds obvious and it is the single most common cause of “Active Directory is broken” tickets I have seen.

Two specifics matter:

Do not mix an internal and a public resolver in a client’s DNS server list. A client may use either. When it uses the public one, internal names fail. Intermittent, machine-specific and maddening.

A domain controller’s own DNS client configuration matters. The long-standing guidance is that a domain controller running DNS should not list only its own loopback address as its primary resolver, because during startup it may answer from its own copy before replication has settled. Point it at a peer domain controller first and include its own address in the list.

Forwarders, conditional forwarders and root hints

Forwarders are where internal DNS servers send queries for names they are not authoritative for. The reversal cost here is low, so this is an operational choice rather than an architectural one.

Use conditional forwarders for specific external namespaces you must resolve directly: a partner’s namespace, a cloud service’s private zone, or another forest you have a trust with. Conditional forwarders are the correct answer for a forest trust — they are more predictable than stub zones, and in a multi-forest environment they are usually what makes authentication across the trust work at all.

Use a general forwarder for everything else, pointing at a resolver you control or a service you have deliberately chosen. Root hints are the fallback when no forwarder answers; leaving them in place is fine, but recursion reaching the internet directly from a domain controller is worth a conscious decision rather than a default.

Scavenging: enable it, carefully

Without scavenging, dynamic zones accumulate stale records indefinitely. A stale A record pointing at an address now used by a different host produces exactly the kind of fault that takes a day to find.

Scavenging has two halves and both must be set: the zone’s no-refresh and refresh intervals, and scavenging enabled on at least one DNS server. The combined no-refresh plus refresh interval must be comfortably longer than the interval at which your clients actually register — the default seven days each is a reasonable start, and a record is only eligible for deletion after both periods have elapsed.

Enable it in a lab or on a non-critical zone first and watch what it removes for one full cycle. Scavenging deletes records. Static records with a timestamp of zero are not scavenged, which is the protection for manually created entries — but a static record that was once dynamic may carry a timestamp and will be removed.

What I would check on an inherited environment

  1. Namespace and whether split-brain is in play. If it is, find out who maintains the public zone and whether there is a process for mirroring records internally.
  2. Zone storage type and replication scope for each zone, and whether _msdcs is a separate forest-wide zone.
  3. Dynamic update set to secure only, everywhere.
  4. Every domain controller’s and member server’s DNS client list, looking for public resolvers and loopback-only configurations.
  5. Scavenging state, and the age of the oldest dynamic record.
  6. dcdiag /test:DNS /DnsBasic /v from more than one domain controller.

Items two through six are all changeable. Item one usually is not, and that is the point of the exercise: know which constraints you have inherited permanently, and stop relitigating them.

DNS faults also account for a large share of replication errors, so if you are working through those, the error-code table in reading replication failures maps the DNS-related codes to the specific checks above.

Verification and limits

Zone storage options, replication scopes, secure dynamic update behaviour, scavenging mechanics and the _msdcs zone’s role were checked against current Microsoft documentation on 20 September 2026. The design preferences are mine, stated as preferences.

No change here was executed in a lab for this article. Scavenging and replication scope changes affect name resolution estate-wide: enable scavenging on a non-critical zone first and watch a full cycle, and export the zone before changing its storage. A domain rename is outside the scope of this article and should not be attempted from it.

References