Conditional Forwarders DNS for Cross-Org Resolution

Conditional Forwarders DNS for Cross-Org Resolution

Using Conditional Forwarders for Cross-Organization DNS Resolution

When two organizations need to resolve private names, a conditional forwarder routes only queries for a specific suffix to designated DNS servers. It's more limited than copying a zone and simpler than making each DNS a secondary, but it doesn't create trust, connectivity, or authority. A poorly designed entry can hijack all queries for that suffix toward servers that only know part of the picture.

[!TIP]
Avoid overlap — forwarding partner.example also sends subordinate names unless a more specific zone changes the decision. Confirm what the remote side actually knows.

Why This Matters for Conditional Forwarders DNS

Cross-organization DNS is common in mergers, partnerships, and shared services. Get it wrong and you either leak internal names to the wrong party or send queries into a black hole. Conditional forwarders give you fine-grained control — if you design them with clear boundaries and documented ownership.

What You Need

  • Exact FQDN, remote servers, and who maintains their addresses
  • UDP/TCP 53 connectivity in both directions; NAT and routes documented
  • Authorized query servers and logging/retention policy
  • Expected response for existing, non-existent, and out-of-scope names
  • TTL, maintenance windows, contact, and withdrawal procedure
  • Decision on Domain, Forest, Custom, or local replication scope

Don't use public DNS as the master for a private namespace. Don't exchange complete lists if only a few suffixes are needed. Treat names and addresses as operational data between organizations.

Step-by-Step: Creating a Conditional Forwarder

Step 1 — Create the Forwarder

The cmdlet stores conditional forwarders internally as zones. This example replicates in the domain; change the scope only after deciding which DNS servers should receive it.

$name = 'partner.example'
$masters = @('192.0.2.60','192.0.2.61')

$existing = Get-DnsServerZone -Name $name -ErrorAction SilentlyContinue
if ($existing) {
  throw "A zone named $name already exists; check its type."
}

Add-DnsServerConditionalForwarderZone -Name $name `
  -MasterServers $masters -ReplicationScope Domain -PassThru

Get-DnsServerZone -Name $name |
  Select-Object ZoneName, ZoneType, IsDsIntegrated, ReplicationScope

The TEST-NET IPs are documentation placeholders — replace them. An existing primary, secondary, stub, or forwarder with the same name changes behavior; don't delete it to "make room" without understanding consumers. If the forwarder will be local, omit integration parameters per documented syntax.

Step 2 — Verify the Complete Path

From the configured DNS, query a known A record, SOA, and a non-existent name under the suffix. The known response should arrive with expected data; the SOA identifies authority; the non-existent name should return authorized NXDOMAIN, not timeout. Repeat against each DNS that received the configuration and from a client subnet.

Resolve-DnsName 'host-a.partner.example' -Type A -Server '<LOCAL_DNS_IP>'
Resolve-DnsName 'partner.example' -Type SOA -Server '<LOCAL_DNS_IP>'
Resolve-DnsName 'no-exists.partner.example' -Type A -Server '<LOCAL_DNS_IP>'

Test master failover only in an approved window. Microsoft documents that forwarding and recursion timeouts limit how many servers get reached. A list of five destinations doesn't guarantee the fifth one gets queried.

Step 3 — Test from Client Subnets

A local query doesn't traverse the same path as a client query. From a pilot subnet, explicitly use the new DNS IP, log time, name, record type, and result. Only then change DHCP or static configuration.

Common Pitfalls

  • Timeout for the entire domain? Route/firewall, incorrect masters, or remote service down. Test UDP/TCP 53 from the local DNS and each master.
  • Some names work but others outside the partner fail? The remote doesn't know the entire forwarded suffix. Narrow the scope or agree on complete resolution.
  • Only some local DNS servers have the entry? Local scope or AD replication failure. Check ReplicationScope, partitions, and repadmin.
  • After remote IP change, failure persists? Outdated master list or negative cache. Update with Set-DnsServerConditionalForwarderZone and validate cache/TTL.
  • Fourth master never gets queries? RecursionTimeout expires before reaching it. Reduce targets or redesign; measure before touching timeouts.
  • Unintended queries leak? Suffix too broad. Remove or reduce the forwarder and agree on exact subdomains.

Alternative Open-Source Options

  • BIND forward zones — equivalent conditional forwarding with forwarders and forward directives in zone configuration. Works across platforms.
  • Unbound — supports forward-zone with forward-addr for conditional forwarding. Lightweight and secure by default.
  • dnsmasq — simple conditional forwarding for smaller environments. Less granular but easy to configure.

Conclusion

The conditional forwarder is a resolution boundary, not a full integration. It works when the namespace, authority, and failure scenarios are agreed on by both sides and the configuration replicates only where needed.

Try It

If you're in a multi-organization environment, audit your current conditional forwarders — check who owns each one, when it was last reviewed, and whether the remote side is still authoritative. You might find entries that have been silently forwarding queries to servers nobody maintains anymore.

Related Posts

Comments

Popular posts from this blog

Forwarders vs Root Hints DNS: Choosing Resolution

Configure Secure Dynamic DNS Updates on Windows Server

AD Integrated DNS Replication Scope Guide