Fix it now
MSExchange ADAccess events in the 2000 range are Exchange reporting on its own view of Active Directory, and 2601 appears when it has no usable directory server to work with. Microsoft publishes no description for these event IDs, so read the event’s own text and then check the three things that actually decide it: site membership, DNS, and whether a global catalog serves that site.
nltest /dsgetsite
nltest /dsgetdc:contoso.com /GC /FORCE
ipconfig /all
Get-ExchangeServer | Format-List Name,Site
- Read
nltest /dsgetsitefirst. If the site is not the one you expect, the Exchange server’s subnet is missing from Active Directory Sites and Services and everything else follows from that. - Read the
nltest /dsgetdcresult./GCrestricts the answer to global catalogs and/FORCEmakes it query DNS rather than the cache, so a failure here is real rather than stale. - Confirm the server’s DNS servers are internal domain controllers hosting the Active Directory zone. A public resolver anywhere in that list breaks locator queries intermittently.
- In the Application log, find the most recent Event ID 2080 and read its own text: it lists the servers Exchange discovered and how each one answered.
- After correcting site data or DNS, restart the Microsoft Exchange Active Directory Topology service and wait for a fresh 2080 before judging the result.
If you need Exchange bound to one named controller while you work, use Set-ADServerSettings -PreferredServer dc01.contoso.com. It is session-scoped and it undoes itself when you close the shell.
If Exchange finds its directory again and the services settle, stop here. If not, the next section covers what Exchange is actually looking for.
Why it happens
When the Active Directory Topology service starts, it works out which Active Directory site the server belongs to from its IP address and the subnet objects defined in Sites and Services. It then finds the domain controllers serving that site, tests them, and builds a list it is willing to use. It repeats that discovery on a timer, so directory changes are picked up without a restart – and so recovery after an outage is not instant.
The detail that catches people out is scope. Exchange uses controllers and global catalogs in its own site, and reaches beyond it only where site coverage or site links make another site’s controllers available. Ten domain controllers in the forest are no help at all if none of them serves the site Exchange sits in, and a site is decided by a subnet object that somebody has to have created.
One caveat before you go event-hunting. Microsoft publishes no description for event 2601, 2604, 2114, 4027 or 2080. That does not make them useless – each event’s own description field carries the process, the server and, in the case of 2080, the discovery result – but it does mean you should read the entry rather than look up the number. An article that tells you exactly what 2601 means is telling you something the vendor has not published.
What you can rely on is the shape of the dependency. Almost every Exchange service waits on the topology service, so a directory problem produces a batch of service failures rather than one, and fixing the directory fixes all of them at once. If you find yourself restarting six Exchange services in sequence, stop and go and look at DNS and Sites and Services instead.
The Exchange server’s subnet is not defined in Sites and Services
You have this one if nltest /dsgetsite returns a site you did not expect, or the discovery event lists controllers that live somewhere else entirely.
- Open Active Directory Sites and Services and check whether a subnet object covers the Exchange server’s IP address.
- Create the missing subnet object and associate it with the correct site.
- Restart the Microsoft Exchange Active Directory Topology service so the server rediscovers.
- Confirm with
nltest /dsgetsiteand withGet-ExchangeServer | Format-List Name,Site.
An undefined subnet is silent everywhere else in the estate, which is why it usually surfaces first as an Exchange problem and gets blamed on Exchange.
DNS on the Exchange server points somewhere unhelpful
You have this one if nltest /dsgetdc:<domain> /FORCE cannot find a controller, and the server’s DNS list includes something that is not a domain controller.
- Set the server’s DNS to internal domain controllers only. A public resolver in the list breaks locator queries in ways that come and go.
- Flush the resolver cache with
ipconfig /flushdnsand retry with/FORCEso the query goes to DNS rather than the cache. - On the domain controllers, confirm the Netlogon service is registering its records and that dynamic updates are permitted in the zone.
- Restart the topology service on the Exchange server once DNS is right.
No global catalog serves the site
You have this one if nltest /dsgetdc:<domain> /GC fails while the same query without /GC succeeds.
- In Sites and Services, open the NTDS Settings of a controller in that site and enable the global catalog role.
- Allow time for it to finish building and start advertising before testing again.
- Alternatively confirm that site coverage from a neighbouring site is intended and working, so Exchange has a catalog it may use.
- Restart the topology service and confirm the new catalog appears in the next discovery event.
The controllers are reachable by name but not by port
You have this one if Name resolution works, the controllers are listed, and Exchange still reports nothing usable.
- Test the paths from the Exchange server: LDAP on 389, global catalog on 3268, Kerberos on 88, and the RPC endpoint mapper on 135 with its dynamic range.
- Check controller health with
dcdiagand replication withrepadmin /replsummary. - Test from the Exchange server’s own subnet. A path that works from the server room tells you nothing about a server in a DMZ.
- Restart the topology service once the path is genuinely open.
The site has one domain controller and it is unavailable
You have this one if Everything works until that controller reboots for patching, then Exchange fails for exactly as long as it is down.
- Bring the controller back and confirm Exchange recovers on its own within the discovery interval rather than intervening.
- As a stopgap while it is down, bind a shell to a controller in another site with
Set-ADServerSettings -PreferredServer dc02.contoso.comso you can at least manage the organisation. - Arrange site coverage from a site that has a controller, or add a second controller to this site.
- Schedule domain controller patching so that a single-controller site is never left without one during business hours.
Do not go looking for a registry value to pin a controller permanently. Set-ADServerSettings is the documented, reversible way to do it, and a permanent pin becomes the next single point of failure because Exchange stops looking for alternatives.
Full reference
Reading the discovery event
| What the events and commands show | Where the fault is |
|---|---|
| The discovery event lists no servers at all | Discovery found nothing: DNS, or site membership |
| Servers listed, but none of them answering for the roles needed | Found but unreachable: ports, or the controllers themselves |
nltest /dsgetdc /GC fails while the plain query succeeds |
No global catalog available to this site |
| Servers listed that belong to another site | This server’s subnet is missing from Sites and Services |
| Fails only during the patch window | The site has one domain controller and it reboots |
| Every Exchange service fails together | The topology service is at the front of the queue. Fix the directory, not the services |
Commands that answer the question
| Command | What it tells you |
|---|---|
nltest /dsgetsite |
Which Active Directory site Windows believes this server is in |
nltest /dsgetdc:<domain> |
Queries DNS for domain controllers and contacts each one to check connectivity |
nltest /dsgetdc:<domain> /GC |
Restricts the answer to servers designated as global catalogs |
nltest /dsgetdc:<domain> /FORCE |
Runs the query against DNS instead of reading the cache |
repadmin /replsummary |
Which controllers are failing to replicate, and by how much |
Get-ExchangeServer | Format-List Name,Site |
Which site Exchange thinks it is in, which should match nltest |
Set-ADServerSettings -PreferredServer <fqdn> |
Binds this shell session to one named domain controller |
Ports Exchange needs to a domain controller
| Service | Port |
|---|---|
| LDAP | 389 TCP and UDP |
| Global catalog LDAP | 3268 TCP |
| Kerberos | 88 TCP and UDP |
| RPC endpoint mapper | 135 TCP, plus the dynamic port range it hands out |
| DNS | 53 TCP and UDP |
A firewall between Exchange and its domain controllers is a design that has to be maintained rather than set up once. The dynamic RPC range in particular is the one that gets missed, because the endpoint mapper answers on 135 and everything looks fine until an actual call is made.
Five event IDs, none of them published
Events 2601, 2604, 2114, 4027 and 2080 all appear in this investigation and Microsoft publishes a description for none of them. Read them for their content: which process wrote the entry, which server is named, and in the case of the discovery event, the table of servers and how each answered. Do not act on a number alone, and be sceptical of any source that assigns a confident meaning to one of them.
Restarting the Microsoft Exchange Active Directory Topology service forces a fresh discovery, which saves waiting for the timer. It also restarts the services that depend on it, so treat it as a change rather than a query.
Design decisions that stop this recurring
- Define every subnet in Sites and Services, including the ones nobody thinks matter. An undefined subnet is invisible until Exchange trips over it.
- Put at least two domain controllers in any site that holds an Exchange server, or arrange and test site coverage from a neighbouring site.
- Give Exchange servers internal DNS only, and check that after every network change rather than after every outage.
- Do not install Exchange on a domain controller. It complicates patching and recovery and turns two separate outages into one.
- Stagger domain controller reboots so that no site loses all of its controllers at once.
When a licence is the actual fix
Most of this costs nothing. Subnet definitions, DNS settings and the global catalog role are configuration changes on servers you already run, and none of them needs a purchase. The exception is the last cause on the list: if the honest answer is that the site holding your Exchange server has exactly one domain controller, no amount of configuration removes the outage that happens every time it reboots. A second domain controller is the durable fix, and it is another instance of Windows Server to license. A domain controller is a modest workload that Windows Server 2025 Standard covers comfortably, and it can run on the virtualisation you already have. Arco supplies Windows Server 2025 Standard and can check how your existing licensing and client access licence position covers an additional server before you order anything.
Every code this article covers
| Code | What it points at | Source |
|---|---|---|
Event ID 2601 |
An MSExchange ADAccess entry written when Exchange has no usable directory server. Microsoft publishes no description; read the process and server named in the event text | not published by the vendor |
Event ID 2604 |
An MSExchange ADAccess entry seen alongside global catalog availability problems. No published description | not published by the vendor |
Event ID 2114 |
An MSExchange ADAccess entry about the topology discovery process. No published description | not published by the vendor |
Event ID 4027 |
An MSExchange ADAccess entry about a selected directory server. No published description | not published by the vendor |
Event ID 2080 |
The ADAccess entry that prints the discovery result, including the servers found and how each answered. No published key to the flags; read the entry itself | not published by the vendor |
Confirm the fix worked
nltest /dsgetsitereturns the site you expect for that server.nltest /dsgetdc:<domain> /GC /FORCEreturns a global catalog without an error.Get-ExchangeServer | Format-List Name,Siteagrees with nltest.- A fresh discovery event appears in the Application log listing the controllers you expect.
Test-ServiceHealthshows the Exchange services running, and a directory-dependent command such asGet-Mailbox -ResultSize 5completes.
Questions people ask about this
Can Exchange use a domain controller in another site?
Only where site coverage or site links make one available to the Exchange server’s site. Exchange prefers local controllers because directory access is chatty, and crossing a slow link degrades everything from mail flow to the management shell.
Does this mean I have to buy something?
Usually not. Subnet definitions, DNS settings and the global catalog role are free changes. A licence only enters the picture if you decide you need another domain controller, which is a capacity decision rather than a fault.
Should I install Exchange on a domain controller to avoid this?
No. It complicates patching and recovery, it makes a directory problem and a mail problem the same outage, and it removes the separation that lets you reboot one without the other.
How long does Exchange take to notice a controller has come back?
Discovery runs on a timer, so recovery is not instant. Restarting the Active Directory Topology service forces a fresh discovery if you do not want to wait, but it restarts the dependent services too.
Can I pin Exchange to one domain controller permanently?
Set-ADServerSettings -PreferredServer does it for a shell session, which is the right scope for troubleshooting. Making it permanent turns that controller into the next single point of failure, because Exchange stops looking for alternatives.
