DMARC for Hybrid Exchange (On-Prem + Microsoft 365): Complete Setup Guide (Split-Routing Mail Flow, Centralized Mail Transport, Dual-Signer DKIM, ARC Sealing, Send Connector Loops, Default Frontend DKIM Strip)
The operator deployment guide for DMARC on a hybrid Exchange topology where mail flow is split between Exchange on-premises and Exchange Online. Covers the hybrid topology spectrum (classic hybrid via Hybrid Configuration Wizard, Centralized Mail Transport, split-domain coexistence, edge transport servers), the outbound-routing decision tree (which side signs and sends), SPF construction that includes both sides without breaking the 10-DNS-lookup limit, the dual-signer DKIM problem (when on-prem and cloud sign different domains), ARC sealing across the on-prem-to-cloud relay to preserve original SPF and DKIM verdicts, the Default Frontend Connector DKIM-strip pitfall, Send Connector loops, and migration paths from classic hybrid to fully cloud-routed mail flow. Anchored against the Feb 2024 Google/Yahoo bulk-sender requirements that apply regardless of which side handles the outbound boundary.
This deployment guide is provided in English. Exchange on-premises and Microsoft 365 UI labels (Exchange Management Shell, Exchange Admin Center on-prem and cloud, Hybrid Configuration Wizard, Microsoft 365 Defender portal Email & Collaboration > Policies & rules > Threat policies > Email authentication settings > DKIM and ARC tabs) and DNS-record syntax (v=spf1 include:spf.protection.outlook.com, selector1._domainkey CNAME, Set-DkimSigningConfig, Set-ArcConfig) do not translate. We keep the body in the source language so technical terms remain consistent with Microsoft documentation and the underlying RFCs.
TL;DR
- Hybrid Exchange means outbound mail can flow through either Exchange on-premises or Exchange Online - or both. The DMARC story is harder than cloud-only because alignment must hold regardless of which side wrote and signed the message.
- The cleanest hybrid DMARC
topology is Centralized
Mail Transport (CMT): on-prem
Exchange relays all outbound through
Exchange Online, only the cloud signs DKIM,
SPF lists only
spf.protection.outlook.com, and DMARC alignment is unambiguous. Enable via the Hybrid Configuration Wizard orSet-HybridConfiguration -CentralizedTransportEnabled $true. - SPF in classic hybrid
must include BOTH sides:
v=spf1 ip4:<onprem-NAT-range> include:spf.protection.outlook.com -all. Stay under the 10-DNS-lookup limit (RFC 7208 §4.6.4) - consolidate on-prem IPs into a singleip4:CIDR block when possible. - The dual-signer DKIM problem
is the #1 hybrid DMARC failure mode:
both on-prem (via Exclaimer, GFI, or
Zix transport agent) AND Exchange Online
sign the same message under different
d=domains, and receivers pick the wrong signature for alignment. Fix: choose ONE signing side; disable the other viaSet-DkimSigningConfig -Identity your-domain.com -Enabled $falseor uninstall the on-prem agent. - ARC sealing (RFC 8617)
is the standards-track way to preserve
original SPF and DKIM verdicts across
the on-prem-to-cloud relay. Configure
Defender for Office 365 Trusted ARC
Sealers via
Set-ArcConfig -ArcTrustedSealers <your-onprem-fqdn>. The cloud trusts the on-prem ARC seal and re-evaluates DMARC using the original verdicts the on-prem boundary captured. - The Default Frontend Connector
DKIM strip is the classic hybrid
gotcha: Exchange Online's inbound
connector from on-prem strips existing
DKIM signatures before transport, so
on-prem DKIM is lost at the relay. Set
Set-Connector -PreserveSmtpHeaders $trueon the matching inbound connector, OR migrate to CMT so on-prem never signs in the first place. - Send Connector relay loops
occur when on-prem Send Connectors and
cloud inbound connectors form a cycle.
Symptom:
NDR 5.4.6 Hop count exceeded. Prevention: accept the Hybrid Configuration Wizard's connector pair as-is, set accepted-domain DomainType correctly (Authoritative vs InternalRelay), and verifyGet-MessageTraceshows exactly one cloud hop on outbound. - DMARC rollout in hybrid
takes longer than cloud-only: budget
4-8 weeks at
p=none(vs 2-6 weeks cloud-only) because more sender paths surface in reports - one per hybrid mail-flow combination multiplied by every legitimate SaaS sender, application relay, and on-prem-only mailbox. - The Feb 2024 Google/Yahoo
bulk-sender requirements apply
regardless of which side of hybrid
handles outbound. Any domain sending
>5000 messages/day to gmail.com or
yahoo.com needs SPF + DKIM alignment,
DMARC at minimum
p=none, RFC 8058 one-click List-Unsubscribe, and a spam-complaint rate under 0.3%. - The endgame for most hybrid deployments is full Exchange Online (cloud-only) mail flow, with on-prem retained for legacy public-folder access, on-prem journaling, or geographic compliance. The CMT topology is the operational stepping stone - eliminates the dual-signer problem without retiring on-prem servers.
1. What this guide covers
This is the operator-implementation walkthrough for deploying SPF, DKIM, ARC, and DMARC on a domain whose mail flow is split between Exchange on-premises and Exchange Online (Microsoft 365) - the topology Microsoft calls "hybrid Exchange" and the operator-pain segment the cloud-only DMARC for Microsoft 365 guide intentionally deferred. The guide assumes you are the administrator of a hybrid Exchange organisation and have access to:
- The Exchange Management
Shell on the on-prem Exchange
server (for
Get-HybridConfiguration,Set-AcceptedDomain,Get-SendConnector,Get-TransportConfig, and related cmdlets). - The Exchange Online PowerShell V3
module on a workstation (for
Connect-ExchangeOnline,Set-DkimSigningConfig,Set-ArcConfig,Set-Connector -PreserveSmtpHeaders, and related cmdlets). - The Microsoft 365 Defender portal at security.microsoft.com - the modern UI for DKIM management, Trusted ARC Sealers configuration, and anti-spoof policy.
- The on-prem Exchange Admin
Center (typically at
https://<exchange-fqdn>/ecp) for accepted-domain configuration, mail flow rules, and connector management on the on-prem side. - Your domain's DNS provider
(Cloudflare, Route 53, on-prem AD-integrated
DNS, etc.) - used to publish SPF, the DKIM
CNAMEs that route to your tenant's
<tenant>.onmicrosoft.comkey infrastructure, and the DMARC TXT record. - A working email mailbox on the domain to receive DMARC aggregate reports (or a third-party report-ingestion service - DMARC Analyzer is one option).
The guide is structured as four sequential deployment steps (SPF for hybrid → dual-signer DKIM → ARC sealing the relay → DMARC rollout) plus a hybrid topology overview, an outbound mail-flow decision tree, Send Connector / Default Frontend connector pitfalls, hybrid-specific gotchas, common mistakes, and migration paths from classic hybrid through Centralized Mail Transport to fully cloud-routed mail flow.
What this guide does not cover:
- On-premises Exchange Server in
isolation (no cloud component).
Pure on-prem Exchange runs its own
outbound boundary, signs DKIM via a
transport agent like Exclaimer or Zix,
and publishes SPF for its perimeter
outbound IPs only.
spf.protection.outlook.comis not part of the SPF. - Exchange Online in isolation (no on-prem component). The DMARC for Microsoft 365 sibling page is the complete reference - this hybrid page explicitly defers cloud-only mechanics to it.
- Migration tooling from third-party platforms (Google Workspace to M365, Lotus Notes to Exchange Online, on-prem Exchange to Google Workspace). Those are separate migration projects with their own DMARC implications during the cutover window.
- Mailbox migration mechanics (move-mailbox cmdlets, MRS proxy, batch moves). The hybrid topology supports mailbox migration in both directions but mailbox migration itself does not affect DMARC - only the OUTBOUND mail flow topology does.
2. The hybrid topology spectrum
"Hybrid Exchange" is not a single topology - it spans a spectrum of configurations that differ in WHICH side handles outbound mail delivery, HOW mail is routed between the sides, and WHERE accepted domains are authoritative. The DMARC implementation follows from the topology, so identifying YOUR specific topology is the prerequisite for every other step in this guide.
2.1 Classic Hybrid (HCW-configured, on-prem outbound by default)
The default output of running the Hybrid Configuration Wizard (HCW) against an on-prem Exchange 2013+ organisation with at least one Exchange Online tenant. After HCW:
- On-prem Exchange is the outbound boundary for accepted domains that remain Authoritative on-prem.
- Exchange Online is the outbound boundary for cloud-mailbox users with accepted domains marked Authoritative in the cloud.
- The bidirectional Send Connector pair configured by HCW handles internal mail flow between the two sides with mutual TLS authentication via the on-prem certificate.
DMARC implications of classic hybrid: both
sides need DKIM signing under the same
custom domain (or you accept the dual-signer
problem), SPF must include both sides
(ip4: on-prem ranges plus
include:spf.protection.outlook.com),
and ARC sealing is essential for messages
that traverse the on-prem-to-cloud relay.
This is the highest-complexity hybrid
topology from a DMARC perspective.
2.2 Centralized Mail Transport (CMT, cloud outbound boundary)
A Microsoft 365 feature that overrides the classic hybrid default: even mail composed on on-prem Exchange relays to Exchange Online for outbound delivery. Enabled via:
Set-HybridConfiguration -CentralizedTransportEnabled $true
or by selecting the "Centralized Mail Transport" checkbox during HCW. After CMT:
- Exchange Online is the single outbound boundary for ALL accepted domains - regardless of where mailboxes live.
- On-prem Exchange remains operational but only for internal mail and on-prem-to-cloud relay.
- DKIM signing happens only on the cloud
side under the standard
selector1/selector2CNAME-delegation workflow.
DMARC implications of CMT: this is the
operator-friendliest hybrid topology. SPF
drops the on-prem
ip4: ranges (only
include:spf.protection.outlook.com
remains), only the cloud signs DKIM, and
ARC sealing is optional because the relay
leg from on-prem to cloud happens INSIDE
the trust boundary. The dual-signer problem
is eliminated by construction. The
trade-off is bandwidth and latency: every
outbound message round-trips through the
cloud regardless of recipient location.
2.3 Split-domain coexistence
A non-HCW topology where the same SMTP domain has some mailboxes on-prem and some on Exchange Online, with mail routing decided per-mailbox via accepted-domain configuration and InternalRelay address spaces. Common during phased migration when you want to move mailboxes one batch at a time without changing the MX record. After split-domain configuration:
- The domain's accepted-domain DomainType is set to InternalRelay on both sides (not Authoritative).
- Each side has a complete address list and forwards mail for "unknown" local recipients to the other side.
- Outbound mail can leave either side depending on which mailbox sent it.
DMARC implications of split-domain: identical to classic hybrid because both sides independently handle outbound. The operational pain is amplified because every accepted domain effectively has two "homes" and operators must track which mailboxes are where.
2.4 Edge Transport servers
An on-prem topology where dedicated Edge Transport role servers sit at the perimeter (DMZ) and handle SMTP relay to and from the internet, with the internal Exchange Mailbox role servers sitting behind them. EdgeSync replicates accepted-domain and recipient information from the internal AD to the Edge servers.
Edge Transport is orthogonal to hybrid - you can run Edge Transport on top of classic hybrid or CMT. DMARC implications: SPF lists the Edge Transport perimeter IPs (NOT the internal Mailbox role IPs), DKIM signing is typically configured at the Edge Transport role (so messages leave the perimeter signed), and any on-prem ARC sealer runs at Edge Transport to capture the last verdict before the perimeter SMTP egress.
2.5 Identifying YOUR topology
From the Exchange Management Shell on the on-prem Exchange server, run:
Get-HybridConfiguration | Format-List
Get-AcceptedDomain | Format-Table DomainName, DomainType, AddressBookEnabled
Get-SendConnector | Format-Table Name, AddressSpaces, SmartHosts
Get-IntraOrganizationConnector | Format-Table Name, TargetAddressDomains, Enabled
Key fields to inspect:
Get-HybridConfiguration .Features: containsCentralizedTransportif CMT is enabled.Get-HybridConfiguration .EdgeTransportServers: non-empty if Edge Transport is in use.Get-AcceptedDomain .DomainType: Authoritative means this side handles outbound for the domain; InternalRelay means split-domain coexistence.Get-SendConnectorwhose AddressSpaces match*: the connector handling all external outbound. If its SmartHosts point at*.mail.protection.outlook.com, you have CMT; if not, classic hybrid.
Once you know your topology, the decision tree in section 3 prescribes the SPF / DKIM / ARC / DMARC implementation steps for your specific case.
3. The outbound mail-flow decision tree
Use this decision tree to identify the SPF construction, DKIM signing side, and ARC sealing requirement for your hybrid topology. Answer the questions in order; the first match wins.
3.1 Question 1: Is Centralized Mail Transport enabled?
From the Exchange Management Shell:
(Get-HybridConfiguration).Features -contains "CentralizedTransport"
If True: you have CMT. Skip to 3.1.1 Implementation for CMT. Mail flow is cloud-out regardless of where messages originate.
If False: you have classic hybrid or split-domain. Proceed to Question 2.
3.1.1 Implementation for CMT
- SPF:
v=spf1 include:spf.protection.outlook.com -all(plus any additional SaaS sender includes - see SPF explained). - DKIM: cloud-side only.
Use the standard
selector1/selector2CNAME-delegation workflow from the DMARC for Microsoft 365 sibling page. - ARC sealing: optional. The on-prem-to-cloud relay leg is inside the trust boundary; on-prem does not need to seal because the cloud is the only outbound boundary that emits Authentication-Results to external receivers.
- DMARC: identical to
cloud-only deployment - publish
v=DMARC1; p=none; rua=mailto:at_dmarc.<your-domain>and advance through the standard rollout phases.
3.2 Question 2: Does on-prem Exchange sign DKIM?
On the on-prem Exchange server, check for an installed DKIM transport agent:
Get-TransportAgent | Format-Table Identity, Enabled, Priority
Get-Module -ListAvailable | Where-Object Name -like "*Exclaimer*","*GFIMailEssentials*","*Zix*","*Symantec*"
Inspect the Authentication-Results header on
a sample outbound message from an on-prem
mailbox: if dkim=pass header.d=
points at your custom domain, on-prem is
signing. If dkim=none or no
DKIM-Signature header is present, on-prem
is NOT signing.
If on-prem signs AND cloud signs under the same custom domain: you have the dual-signer pattern. Proceed to section 5 and pick ONE side to disable.
If on-prem signs AND cloud
is NOT signing: this is the cleanest
classic hybrid pattern for DMARC purposes.
Keep on-prem signing, ensure ARC sealing is
configured for the on-prem-to-cloud relay
(see section 6), and
leave
Set-DkimSigningConfig -Identity
your-domain.com -Enabled $false on
the cloud side.
If on-prem does NOT sign and cloud signs: the cleanest topology for DMARC. ARC sealing is unnecessary for outbound (since on-prem doesn't sign there's no original verdict to preserve) and you can treat the cloud-side DKIM workflow as cloud-only. However, you still need on-prem ARC sealing for INBOUND mail that traverses on-prem before reaching cloud mailboxes - the cloud needs original verdicts to apply spoofing protections.
If neither side signs: you have no DKIM at all. Start with the DKIM explained pillar then return here.
3.3 Question 3: Do messages traverse the on-prem-to-cloud relay?
Almost always yes in a hybrid topology - INBOUND mail to cloud mailboxes from external receivers either lands at on-prem first (if on-prem holds the MX record) or at cloud first (if cloud holds the MX record). The MX is typically at cloud after HCW unless explicitly reconfigured.
If MX points at cloud first
(*.mail.protection.outlook.com):
the cloud is the inbound boundary,
Exchange Online evaluates SPF + DKIM +
DMARC, and relays to on-prem only for
on-prem mailboxes. ARC sealing across the
cloud-to-on-prem hop is rarely needed
because on-prem already trusts the cloud.
If MX points at on-prem first: on-prem is the inbound boundary, on-prem evaluates SPF + DKIM + DMARC, and relays to cloud for cloud mailboxes. ARC sealing is essential here: without it, cloud sees mail relayed from on-prem with rewritten Received headers and no surviving verdicts, and cloud-side anti-spoofing applies wrong dispositions.
4. Step 1: Configure SPF for the hybrid topology
Publish a single SPF TXT record at the domain apex (the root of your zone) that authorises EVERY legitimate outbound IP range AND every nested include for SaaS senders the domain uses. The defining hybrid challenge is including both sides while staying under the 10-DNS-lookup limit defined in RFC 7208 §4.6.4.
4.1 SPF for CMT (cloud outbound boundary)
With CMT enabled, on-prem Exchange does not talk to external receivers directly - it relays through the cloud. The SPF record therefore needs only the cloud include:
your-domain.com. IN TXT "v=spf1 include:spf.protection.outlook.com -all"
During the migration window before
enforcement, use ~all
(soft-fail) instead of -all:
your-domain.com. IN TXT "v=spf1 include:spf.protection.outlook.com ~all"
4.2 SPF for classic hybrid (both sides outbound)
Without CMT, both on-prem and cloud need SPF authorisation. Identify the on-prem outbound IPs - typically the perimeter firewall NAT pool for the Exchange Send Connector, NOT the Exchange server's internal IP:
# On the perimeter firewall, identify the outbound NAT range used
# by Exchange Send Connectors. This is the public IP set seen by
# external receivers in their Received: headers and the IP that
# SPF must authorise. Common pattern: a /29 or /28 CIDR block
# dedicated to the Exchange perimeter.
your-domain.com. IN TXT "v=spf1 ip4:203.0.113.0/29 include:spf.protection.outlook.com -all"
If on-prem outbound spans multiple IP
ranges or geographic regions, consolidate
into a single CIDR block when network
addressing allows. Each separate
ip4: token does NOT consume a
DNS lookup, but readability and operational
clarity favour consolidation. Example with
multiple ranges:
your-domain.com. IN TXT "v=spf1 ip4:203.0.113.0/29 ip4:198.51.100.16/28 include:spf.protection.outlook.com include:sendgrid.net -all"
4.3 The 10-DNS-lookup limit in hybrid
spf.protection.outlook.com
itself resolves to multiple nested includes
and consumes more than one lookup. In
hybrid topologies that also include SaaS
senders (transactional ESPs, marketing
platforms, on-prem application relays via
SendGrid), the limit fills quickly. Use
the Domain
Security Checker to report the live
lookup count against your SPF record - if
the count exceeds 10, SPF evaluation will
return permerror and DMARC
fails.
Mitigation strategies for hybrid:
- Migrate to CMT:
eliminates the on-prem
ip4:entries entirely because on-prem no longer talks to external receivers directly. The single largest SPF simplification you can make. - SPF flattening:
resolve nested
include:entries down to rawip4:CIDRs - reduces lookups but breaks when the underlying provider changes IPs. Use only as a last resort with operational monitoring to detect drift. - Subdomain delegation:
delegate high-volume SaaS senders to
dedicated subdomains
(
marketing.your-domain.com,transactional.your-domain.com) each with their own SPF - the apex SPF stays clean. The trade-off is operational complexity at the SaaS provider side (each provider must be configured to use the delegated subdomain as the visible From:).
Verify the record with
dig +short txt your-domain.com
after publication, or via the
Domain
Security Checker.
5. Step 2: Configure DKIM signing (and resolve the dual-signer problem)
DKIM signing in hybrid Exchange is the
single highest-leverage operational
decision in this guide. The cloud-only
M365 page documents the standard
selector1
/ selector2 CNAME-delegation workflow -
that workflow applies unchanged in hybrid
on the cloud side. The hybrid-specific
complexity is whether on-prem ALSO signs
and, if so, under which
d= domain.
5.1 The cloud-only signing pattern (preferred)
Strongly recommended for new hybrid deployments and required for CMT topology. Configuration:
- On the cloud side, enable DKIM for
the custom accepted domain per the
standard M365 workflow:
Connect-ExchangeOnline Set-DkimSigningConfig -Identity your-domain.com -Enabled $true Get-DkimSigningConfig -Identity your-domain.com - On the on-prem side, ensure NO DKIM
transport agent is installed:
Get-TransportAgent | Format-Table Identity, Enabled, Priority # Inspect for Exclaimer / GFI / Zix / Symantec DKIM agents. # If present, decide whether to uninstall (recommended) or # disable + remove from the signing pipeline. - Verify by sending a test message from
an on-prem mailbox to a Gmail or
Yahoo address. Inspect the message
source - the
DKIM-Signatureheader must showd=your-domain.com(the cloud signature, captured on the on-prem-to-cloud relay leg and carried out by Exchange Online to external).
5.2 The on-prem-only signing pattern (acceptable)
Acceptable for classic-hybrid topologies where on-prem is the outbound boundary AND you have a working on-prem DKIM signer. Configuration:
- On the on-prem side, install and
configure a DKIM transport agent.
Common choices: Exclaimer Mail
Signatures (commercial), GFI
MailEssentials (commercial), Zix DKIM
(commercial), or the open-source
DKIM transport agent project. Each
signer's UI is different; all need
the same five inputs: the signing
domain (
d=your-domain.com), the selector (a label of your choice - convention isonpremorexchange), the RSA private key (generate via OpenSSL), canonicalisation modes (userelaxed/relaxed), and the list of headers to sign (canonical set: From, To, Subject, Date, Message-ID). - Publish the corresponding public-key
TXT record at
<your-selector>._domainkey.your-domain.com:onprem._domainkey.your-domain.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxxx...IDAQAB" - On the cloud side, DISABLE DKIM
signing for the same accepted
domain to prevent the dual-signer
problem:
Connect-ExchangeOnline Set-DkimSigningConfig -Identity your-domain.com -Enabled $false Get-DkimSigningConfig -Identity your-domain.com # Confirm Enabled=False - Configure ARC sealing on the on-prem side (see section 6) so the on-prem DKIM verdict is preserved across the on-prem-to-cloud relay.
5.3 The dual-signer problem (avoid)
Occurs when BOTH on-prem and cloud sign outbound messages from the same custom domain - typically because the operator set up cloud-side DKIM but forgot (or did not know) that an on-prem DKIM transport agent was also installed and signing. The operational symptom:
- Outbound messages from on-prem
mailboxes arrive at receivers with
TWO DKIM-Signature headers - one
from on-prem
(
d=your-domain.com,s=onprem) and one from cloud (d=<tenant>.onmicrosoft.com,s=selector1ors=selector2). - Outbound messages from cloud mailboxes have only ONE signature (cloud).
- Receivers iterate through both
signatures looking for one that
passes AND aligns with the From:
header. The on-prem signature
aligns (matches
your-domain.com) but may be broken because the cloud Default Frontend connector modified the message body before relaying; the cloud signature passes but does NOT align (onmicrosoft.com≠your-domain.com). - The receiver's DMARC verdict depends on implementation details of how the receiver iterates DKIM signatures - the outcome is non-deterministic and varies between gmail.com, yahoo.com, microsoft.com, and others.
Resolution: pick ONE signing side per section 5.1 or 5.2. The cloud-only pattern is strongly preferred unless you have a hard requirement to sign on-prem (typically a compliance signature-content requirement that the cloud signer cannot meet).
5.4 The onmicrosoft.com signing pattern (avoid)
Documented in the cloud-only
M365
guide section 7 as the #1 cloud-only
DMARC failure mode - the same failure
mode applies in hybrid. If cloud signs
under
d=<tenant>.onmicrosoft.com
instead of your custom domain, DMARC
alignment fails regardless of what on-prem
does. Fix: confirm both
selector1._domainkey and
selector2._domainkey CNAMEs
resolve via:
dig +short cname selector1._domainkey.your-domain.com
dig +short cname selector2._domainkey.your-domain.com
Both must return
selectorN-your-domain-com._domainkey.<tenant>.onmicrosoft.com.
If they resolve but DKIM is still under
onmicrosoft.com, the operator forgot to
enable signing for the custom accepted
domain - run
Set-DkimSigningConfig -Identity
your-domain.com -Enabled $true.
6. Step 3: ARC sealing the on-prem-to-cloud relay (RFC 8617)
ARC (Authenticated Received Chain, RFC 8617) is the standards-track mechanism for preserving original SPF / DKIM / DMARC verdicts across mail-relay hops that would otherwise break authentication. The canonical hybrid use case: a legitimate external message arrives at on-prem Exchange, on-prem evaluates SPF + DKIM + DMARC and captures verdicts, on-prem relays to Exchange Online for a cloud mailbox recipient, Exchange Online needs the original verdicts to apply correct anti-spoofing dispositions even though its own SPF / DKIM evaluation against the on-prem relay will fail.
6.1 ARC sealing on the on-prem side
On-prem Exchange does NOT include native ARC sealing - it must be installed via a third-party transport agent. The most common options:
- Exclaimer Mail Signatures with ARC module: commercial product, integrates with Exchange Transport pipeline at the on-prem side.
- The open-source ARC sealer for Exchange Transport: community-maintained PowerShell-based transport agent.
- Defender for Office 365 ARC Sealer in trusted-intermediary mode: Microsoft's first-party tool when the on-prem path is configured as a known relay.
The ARC sealer needs the same five inputs
as a DKIM signer: signing domain
(your-domain.com), selector
(convention: arc), RSA
private key, canonicalisation mode
(relaxed/relaxed recommended), and the
list of headers to seal. Additionally,
the ARC sealer reads the
Authentication-Results
header on the inbound message (which
on-prem Exchange writes itself) and
captures those verdicts into the
ARC-Authentication-Results
header it inserts.
After configuration, every inbound message that on-prem will relay outward or to cloud gains three new headers inserted in the order ARC-Seal, ARC-Message-Signature, ARC-Authentication-Results - the "ARC set" that downstream hops can verify and extend.
6.2 Trusted ARC Sealers on the cloud side
Exchange Online does NOT automatically trust ARC seals from arbitrary intermediaries - the operator must explicitly configure WHICH ARC-signing domains the cloud should trust. This is the Defender for Office 365 Trusted ARC Sealers feature:
Connect-ExchangeOnline
Set-ArcConfig -ArcTrustedSealers <your-onprem-fqdn>
Get-ArcConfig | Format-List
<your-onprem-fqdn> is
the fully-qualified domain name of your
on-prem Exchange ARC sealer - typically
something like
mail.your-domain.com. This
is the domain in the
d= field of the ARC-Seal
header the on-prem sealer inserts.
Available to Defender for Office 365 Plan 1 or Plan 2 tenants (formerly Microsoft Defender for Office 365 P1/P2). E5 includes Plan 2 by default. After configuration, Exchange Online verifies the ARC seal on every inbound message; if the seal is valid AND the sealer is in the trusted list, the cloud re-evaluates DMARC using the verdicts the on-prem sealer recorded rather than its own (broken-by-relay) evaluation.
The portal-side equivalent: in the Microsoft 365 Defender portal (security.microsoft.com), navigate to Email & Collaboration > Policies & rules > Threat policies > Email authentication settings > ARC. Add the on-prem ARC-signing domain to the trusted-intermediaries list.
6.3 Verifying ARC across the relay
Send a test message from an external sender (a personal Gmail account works) to an on-prem-hosted mailbox in your hybrid org. After delivery, inspect the message source from Outlook or OWA. The headers should include:
- An
Authentication-Resultsheader written by on-prem Exchange showing the original SPF / DKIM / DMARC verdicts from the external sender. - An ARC set
(
ARC-Seal,ARC-Message-Signature,ARC-Authentication-Results) inserted by the on-prem sealer, withd=<your-onprem-fqdn>andcv=nonefor the first hop.
Then send a test message from the same
external sender to a CLOUD-hosted
mailbox. The headers should additionally
show that Exchange Online accepted the
on-prem ARC seal and re-evaluated DMARC
using the recorded verdicts -
arc=pass in the cloud-side
Authentication-Results header.
See the ARC (Authenticated Received Chain) explained pillar for the full protocol mechanics including ARC-Seal cv= chain validation, the i= instance numbering, and the recommended ARC signature scope.
7. Step 4: DMARC rollout in the hybrid context
With SPF, DKIM (one side, the other
disabled), and ARC configured, the DMARC
rollout itself follows the same five-phase
pattern as cloud-only deployment - but
takes 4-8 weeks at
p=none instead of 2-6 weeks
because more sender paths surface in
aggregate reports.
7.1 Phase 1: Publish at p=none
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@your-domain.com; fo=1"
Wait 24-48 hours for first reports to
arrive. Never skip from
p=none to p=reject - the
intermediate p=quarantine
phase is where you discover legitimate
senders that are still misaligned, and
the cost of jumping straight to reject is
the loss of legitimate mail.
7.2 Phase 2: Inventory hybrid sender paths
For hybrid topology, the sender-path inventory has more distinct entries than cloud-only. Typical entries surfaced in the first 4 weeks of aggregate reports:
- Exchange Online direct: cloud mailbox users sending to external. Aligned if cloud-side DKIM is enabled for the custom domain.
- Exchange on-prem direct: on-prem mailbox users sending to external when on-prem is the outbound boundary. Aligned if on-prem-side DKIM is configured under the custom domain.
- On-prem to cloud relay (classic hybrid without CMT): on-prem mailbox user sends to external; mail traverses on-prem then cloud (or vice versa depending on Send Connector routing). Alignment depends on WHICH side signs.
- CMT relay (CMT enabled): on-prem mailbox user sends to external; mail relays through cloud regardless. Aligned via cloud DKIM.
- Application relay via on-prem: a CRM, ticketing system, or monitoring tool sends SMTP to on-prem Exchange as an anonymous relay client; on-prem relays externally. Alignment depends on whether the relay path signs DKIM for the custom domain (often it doesn't, surfacing as a high-volume DMARC failure pattern).
- SaaS senders: SendGrid, Mailgun, SES, Mailchimp, Salesforce Marketing Cloud, etc. Each sender path needs its own DKIM CNAME delegation - see the DMARC for SaaS senders sibling page.
- Edge Transport perimeter outbound: if Edge Transport is in use, the perimeter IPs appear as a distinct source. Alignment via whichever signer runs at the Edge Transport role.
Use DMARC Analyzer's dashboard to drill into each sender IP / sender domain combination. The per-reporter drill-down and per-source-IP drill-down views are the workhorses for hybrid inventory.
7.3 Phase 3: Advance to p=quarantine
After 4-8 weeks at p=none
with every hybrid sender path inventoried
and aligned (or quarantine-acceptable),
advance:
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@your-domain.com; fo=1"
Common pattern: a monthly cron job in an on-prem application relay surfaces only in the first month after quarantine enforcement. Watch reports closely for the first 30 days.
7.4 Phase 4: Advance to p=reject
After 1-3 months at
p=quarantine without
unexpected failures:
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@your-domain.com; fo=1"
The DMARC policy rollout guide covers the Week 0 → Week 26 timeline in detail - the same pattern applies in hybrid with elongated intervals.
7.5 Subdomain policy in hybrid
Hybrid environments commonly have
subdomains routed differently than the
apex (a marketing subdomain at a SaaS
sender, a transactional subdomain at
another ESP, an internal-only subdomain
at on-prem). Use the DMARC
sp= tag to set the subdomain
policy explicitly:
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc-reports@your-domain.com; adkim=r; aspf=r; fo=1"
Without sp=, subdomain
policy inherits the
p= value. The
DMARC
alignment guide covers the
organizational-domain / PSL boundary in
detail.
8. Send Connector and Default Frontend Connector pitfalls
Exchange transport connectors are the plumbing of hybrid mail flow. Four specific connector misconfigurations cause the most common hybrid DMARC failures.
8.1 The Default Frontend Connector DKIM strip
The Default Frontend
Connector on Exchange Online is
the receive connector that accepts
anonymous SMTP from on-prem Exchange in
a hybrid topology. Older Exchange Online
behaviour - and certain misconfigurations
in current builds - cause this connector
to STRIP existing DKIM-Signature headers
from incoming messages, so when Exchange
Online relays the message externally
it re-signs under
<tenant>.onmicrosoft.com
and the on-prem DKIM signature is lost.
Symptom: every hybrid-relayed outbound
message fails DMARC at external
receivers because the visible From:
domain
(your-domain.com) has no
aligning DKIM signature - the on-prem
signature got stripped, and the cloud
signature is under
onmicrosoft.com.
Mitigation:
- Preserve SMTP headers
explicitly:
Connect-ExchangeOnline Get-InboundConnector | Where-Object ConnectorType -eq "OnPremises" | Format-List Set-InboundConnector -Identity "Inbound from your-onprem-exchange" -RequireTls $true # Note: PreserveSmtpHeaders is the parameter on the corresponding # inbound connector. Verify via Get-InboundConnector and adjust per # Microsoft's current Exchange Online PowerShell schema. - Migrate to CMT: eliminates the problem by ensuring on-prem doesn't sign in the first place - cloud is the only signer and there's no stripping step.
- Use ARC sealing: even if the DKIM signature is stripped, the ARC chain preserves the original verdict so DMARC alignment can be reconstructed at the receiver. See section 6.
8.2 Send Connector relay loops
Occur when on-prem Send Connectors and
cloud inbound connectors form a cycle.
Symptom: NDR 5.4.6 Hop count
exceeded after the message
bounces between the two boundaries until
Exchange transport detects the loop via
Received-header count (default 20-30 in
Exchange 2019; configurable via
Set-TransportConfig).
Root causes:
- Manually created Send Connectors on on-prem that duplicate the HCW- generated connector pair.
- Accepted-domain DomainType set incorrectly: a domain marked Authoritative on BOTH sides causes each side to think it owns the domain and forward to the other.
- Inbound connector on Exchange Online routing based on hostname patterns that overlap with internal addressing.
- HCW interrupted mid-run leaving a partial connector configuration.
Prevention:
- Accept the HCW-generated connector pair as-is. Do not manually create overlapping Send Connectors.
- Confirm DomainType per accepted
domain:
Domains where the cloud is the canonical mailbox host should beGet-AcceptedDomain | Format-Table DomainName, DomainType, AddressBookEnabledAuthoritativeon the cloud side andInternalRelayon the on-prem side (or absent from on-prem accepted domains entirely). - Verify outbound mail exits cleanly
with
Get-MessageTraceon Exchange Online andGet-MessageTrackingLogon on-prem - a single sample message should show exactly one cloud hop before delivery to the external recipient.
8.3 TLS requirements on hybrid connectors
The HCW-configured Send Connector pair
uses mutual TLS authentication via the
on-prem Exchange certificate. If the
on-prem certificate expires or the
common name changes, the TLS handshake
fails and mail flow halts. Symptom:
451 4.7.500 Server busy or
421 4.4.2 Connection dropped due
to ConnectionReset in transport
logs.
Prevention: monitor the on-prem
certificate via
Get-ExchangeCertificate
and schedule renewals at least 60 days
before expiry. Update the cloud-side
inbound connector's
TlsSenderCertificateName
parameter if the certificate CN changes.
8.4 Anonymous SMTP relay through on-prem
Common in hybrid environments where
legacy applications (printers, ticketing
systems, CRM connectors, monitoring
tools) authenticate as anonymous SMTP
clients to on-prem Exchange and rely on
on-prem to relay externally. The on-prem
Receive Connector that accepts these
clients usually has
ExternalAuthoritative
permission group granted, allowing
relay without authentication.
DMARC implication: messages from anonymous relay clients arrive at on-prem WITHOUT pre-existing DKIM signatures. If on-prem is the outbound boundary AND on-prem signs DKIM, the messages get signed and pass DMARC. If on-prem doesn't sign (or if you're using cloud-only signing with CMT), the messages relay externally unsigned and fail DMARC.
Mitigation: identify every anonymous
relay client (typical inventory: a few
dozen items at a small enterprise, a
few hundred at large) via
Get-ReceiveConnector
inspection and message-tracking logs.
For each client, decide: (a) reconfigure
to authenticate as a mailbox user and
route through Exchange Online (cleanest
for DMARC), (b) migrate to a SaaS sender
via API integration, or (c) accept that
on-prem signs all anonymous-relayed mail
and configure DKIM signing on-prem.
9. Hybrid-specific gotchas
- Public folders on on-prem: if you still have public folders hosted on on-prem Exchange (a common long-tail in hybrid environments where modern Outlook public-folder migration to cloud has not completed), they generate outbound mail when configured for email delivery. Public-folder mail flows through the same Send Connectors as regular mailbox mail - if the on-prem outbound path doesn't sign DKIM, public-folder outbound fails DMARC.
- Microsoft 365 Direct Send:
a feature that lets applications
send SMTP directly to
your-domain-com.mail.protection.outlook.comfrom any internet IP without authentication, as long as the recipient domain is hosted in the same tenant. Common in hybrid for scanner-to-email and other appliance outbound. Direct Send bypasses cloud-side DKIM signing - messages leave the cloud unsigned. If you rely on Direct Send for any sender path, those messages must either be routed through an alternate authenticated path or accepted as DMARC failures. - SMTP AUTH submission via the cloud: applications that authenticate as a mailbox user and submit via Office 365 SMTP AUTH (smtp.office365.com:587 with TLS) get the same cloud-side DKIM signing as Outlook clients - no special configuration needed. Prefer this over Direct Send and anonymous on-prem relay for new application deployments.
- Mailbox migration during DMARC rollout: moving a batch of mailboxes from on-prem to cloud (or vice versa) changes the outbound path of every message those users send. If you're in the middle of DMARC rollout, plan the migration so the moved mailboxes all use the SAME side's DKIM signing as before - otherwise DMARC reports show a spike of alignment failures from the moved batch on day one of the move.
- The on-prem
Authentication-Results header
domain: on-prem Exchange
writes its own
Authentication-Resultsheader tagged with the on-prem FQDN, not the public domain. If the ARC sealer reads this header to capture original verdicts, ensure the FQDN it expects matches the on-prem Exchange Authentication- Results identifier (configurable viaSet-TransportConfig-Identityparameters). - Defender for Office 365 license dependency: the Trusted ARC Sealers feature requires Defender for Office 365 Plan 1 or Plan 2 (formerly known as Microsoft Defender for Office 365 P1/P2). E5 includes Plan 2 by default. Without Defender, ARC sealing on the on-prem side is wasted - the cloud will not trust the seal.
- HCW re-run side effects:
re-running the Hybrid Configuration
Wizard regenerates the Send
Connector pair and may revert
manual customisations made via
Set-SendConnector. If you've customised connectors post-HCW, document the changes so you can re-apply them after each HCW run. - Exchange 2013 end-of-life: Exchange 2013 reached end-of-support in April 2023 and cannot host a modern hybrid topology - Microsoft removed support for HCW against Exchange 2013 in late 2023. If your on-prem Exchange is still 2013, the hybrid topology is unsupportable and you must either migrate fully to Exchange Online or upgrade on-prem to Exchange 2016 or 2019 first.
10. Common hybrid + DMARC mistakes
- Both sides sign under the same custom domain: the dual-signer problem documented in section 5.3. Receivers iterate non-deterministically across the two signatures and DMARC pass/fail becomes a coin flip. Fix: pick ONE side and disable signing on the other.
- Forgetting to add the
on-prem outbound NAT range to
SPF: classic hybrid where
SPF lists only
include:spf.protection.outlook.combut on-prem also delivers outbound directly. Outbound mail from on-prem fails SPF at external receivers (the connecting IP is your on-prem perimeter NAT pool, which is not inspf.protection.outlook.com). Fix: add the on-prem range viaip4:or migrate to CMT. - Exceeding the SPF
10-DNS-lookup limit:
hybrid environments that also use
multiple SaaS senders quickly hit
the limit. Symptom: SPF returns
permerrorand DMARC fails. Fix: migrate to CMT to drop on-prem from SPF, consolidate senders, or delegate high-volume senders to subdomains. - Not configuring Trusted
ARC Sealers when on-prem signs
ARC: the on-prem ARC seal
gets inserted but Exchange Online
does not trust the sealer, so the
seal is effectively ignored.
Spoofed mail forwarded from on-prem
to cloud still gets the wrong
disposition. Fix: run
Set-ArcConfig -ArcTrustedSealers <your-onprem-fqdn>on the cloud side. - Setting DomainType to Authoritative on BOTH sides: causes Send Connector relay loops (NDR 5.4.6). Fix: exactly one side is Authoritative; the other is InternalRelay or absent from accepted domains.
- Trusting MX changes to propagate instantly: hybrid migrations often involve changing the MX record from on-prem to cloud. DNS propagation can take 24-48 hours per recursive resolver TTL. During the window, mail arrives at BOTH MX targets. If you decommission the old target before propagation completes, the inbound mail to the old target is bounced.
- Anonymous SMTP relay clients that the operator forgot about: a legacy application from 2015 still relays through on-prem Exchange anonymously and nobody remembers it exists. Found only in DMARC aggregate reports when the cloud-only DKIM enforcement breaks it. Fix: inventory before rolling out DMARC enforcement; use the per-reporter drill-down in the DMARC Analyzer dashboard to find them.
- Skipping
p=quarantine: the keystone safety guardrail. Never skip fromp=nonetop=reject. Hybrid environments have more sender paths than cloud-only and skipping quarantine guarantees operational pain. - Trusting CMT to migrate seamlessly: enabling CMT immediately changes outbound routing for every on-prem mailbox. SPF must already be configured for cloud-only outbound BEFORE you enable CMT, otherwise outbound mail bypasses on-prem's already-authorised IP set and starts failing SPF (cloud is in SPF via the include, so this is usually fine - but verify with a test message before the cutover).
- Defender for Office 365
anti-spoof policy collisions:
Defender's "spoof intelligence"
feature flags messages that fail
DMARC implicitly even before your
DMARC policy reaches
p=reject. If a legitimate sender path is misaligned but flagged by spoof intelligence, the message gets quarantined even under yourp=noneDMARC. Tune via the Defender portal anti-spoof policy.
11. Migration paths: from classic hybrid to cloud-only
Most hybrid Exchange deployments evolve toward fully-cloud-routed mail flow (Exchange Online as the single outbound boundary, on-prem retained only for legacy components like public folders, journaling, or geographic compliance). The recommended migration sequence minimises operational risk by moving in discrete, reversible phases.
11.1 Phase A: Classic hybrid (baseline)
The starting state. Mail flow is split between on-prem and cloud. Both sides can deliver outbound directly. DKIM signing happens on whichever side handles a given message. ARC sealing preserves verdicts across the on-prem-to-cloud relay.
Operational focus: get DMARC to
p=quarantine at minimum,
inventory every sender path, document
every anonymous relay client.
11.2 Phase B: Centralized Mail Transport (CMT)
Enable CMT to route all outbound through Exchange Online while keeping on-prem mailboxes operational. After CMT:
- SPF simplifies to
include:spf.protection.outlook.comonly (no on-premip4:ranges). - DKIM signing happens on the cloud side only. Disable any on-prem DKIM transport agent.
- ARC sealing for outbound becomes optional - the on-prem-to-cloud relay is inside the trust boundary.
- The dual-signer problem is eliminated by construction.
Configuration:
Connect-ExchangeOnline
Set-HybridConfiguration -CentralizedTransportEnabled $true
Get-HybridConfiguration | Format-List Features
Trade-off: every outbound message round-trips through the cloud regardless of recipient location. Bandwidth and latency increase. For most enterprises this is invisible; for high-volume on-prem-to-on-prem inter-organisation flows it can be a measurable cost.
11.3 Phase C: Migrate remaining mailboxes to cloud
With CMT handling outbound routing, the on-prem mailboxes themselves are the next migration target. Use New- MoveRequest, batch moves via the Exchange Online Migration UI, or third-party migration tools (Quest, BitTitan, CodeTwo) to move mailboxes in batches. DMARC implications: minimal, because CMT already routes outbound through cloud regardless of where the mailbox lives.
11.4 Phase D: Decommission on-prem Exchange
The endgame. With all mailboxes migrated, on-prem Exchange becomes a candidate for decommission. Tasks:
- Migrate any remaining public folders to cloud (or to a SharePoint / Teams equivalent).
- Retire on-prem journaling - replace with Microsoft Purview compliance features or a third-party compliance archive.
- Reconfigure every anonymous SMTP relay client to authenticate to Exchange Online via SMTP AUTH or migrate to a SaaS sender.
- Run the Hybrid Configuration Wizard one last time in "remove hybrid configuration" mode to deconfigure the connector pair and federation trust.
- Update MX records to point only
at
your-domain-com.mail.protection.outlook.com. Remove the on-prem MX. - Simplify SPF to remove on-prem
ip4:ranges (already done in CMT phase but re-verify). - Decommission on-prem Exchange servers per Microsoft's documented decommission procedure.
11.5 Phase E: Long-term hybrid (when on-prem stays)
Some organisations have hard requirements to keep on-prem Exchange indefinitely: regulatory compliance requiring on-prem mail flow for certain domains, geographic data-sovereignty constraints (jurisdictions where Microsoft 365 is not available), or operational integration with legacy systems that only speak on-prem Exchange APIs. For these organisations, the CMT topology is the recommended long-term steady state - it gives the operational simplicity of cloud-only DMARC while keeping on-prem Exchange operational.
12. Troubleshooting hybrid DMARC failures
12.1 Identifying which side a message left from
The fastest hybrid debugging step: determine WHICH side of hybrid a failing message left through. Inspect the source-IP column in the DMARC aggregate report (or the per-source-IP drill-down in DMARC Analyzer):
- If the source IP is in Microsoft's
outbound range (resolves under
protection.outlook.comrDNS or matches the IPs inspf.protection.outlook.com): the message left through Exchange Online. - If the source IP is your on-prem perimeter NAT pool: the message left through on-prem Exchange.
- If the source IP is a SaaS sender (SendGrid, Mailgun, etc.): the message was sent by a SaaS integration, not through your hybrid Exchange topology.
12.2 SPF failing for one side
Symptom: aggregate reports show SPF pass for cloud-source messages but SPF fail for on-prem-source messages (or vice versa). Cause: SPF record lists only one side's IPs. Fix: add the missing IP set or migrate to CMT.
12.3 DKIM failing for one side
Symptom: aggregate reports show DKIM pass for cloud-source messages but DKIM fail for on-prem-source messages. Cause: cloud signs DKIM but on-prem does not. Fix: configure on-prem DKIM signing OR migrate to CMT so on-prem doesn't deliver outbound directly OR accept that on-prem-source messages rely on SPF-only alignment (DMARC passes if SPF passes and aligns).
12.4 ARC seal not trusted by cloud
Symptom: on-prem ARC sealer inserts the ARC set but Exchange Online still re-evaluates DMARC using its own (broken-by-relay) verdicts. Cause: the on-prem ARC-signing domain is not in the cloud's trusted-sealers list. Fix:
Connect-ExchangeOnline
Get-ArcConfig | Format-List ArcTrustedSealers
Set-ArcConfig -ArcTrustedSealers <your-onprem-fqdn>
12.5 NDR 5.4.6 (hop count exceeded)
Send Connector relay loop. Causes and fixes documented in section 8.2. Quick diagnostic:
Get-MessageTrace -SenderAddress test@your-domain.com -StartDate (Get-Date).AddHours(-1) -EndDate (Get-Date)
# On the on-prem side:
Get-MessageTrackingLog -Sender test@your-domain.com -Start (Get-Date).AddHours(-1) -End (Get-Date) | Format-Table Timestamp, Sender, Recipients, EventId
Trace a sample message and confirm it exits to the external receiver after exactly ONE cloud hop. Multiple cloud hops = configuration drift.
12.6 Direct Send messages bypassing DKIM
Symptom: a subset of messages from
your domain consistently fail DMARC at
external receivers, the source-IP is
NOT your hybrid Exchange topology, and
the user-agent or application name
suggests an appliance (multifunction
printer, scanner, monitoring tool).
Cause: the appliance is using M365
Direct Send (smtp to
your-domain-com.mail.protection.outlook.com)
which bypasses tenant-side DKIM
signing. Fix: reconfigure the
appliance to authenticate via SMTP
AUTH to
smtp.office365.com:587
using a service-account mailbox - this
routes the message through the
cloud-DKIM-signing path. Alternative:
relay through on-prem Exchange (if
on-prem signs) or through a SaaS
transactional sender configured for
your domain.
12.7 Using DMARC Analyzer for hybrid troubleshooting
The DMARC Analyzer dashboard surfaces every sender IP / sender domain combination present in your aggregate reports. For hybrid troubleshooting, the key views are:
- Source IP drill-down: per-IP breakdown showing which IPs are cloud, which are on-prem, and which are SaaS senders. Filter for DMARC failures to surface misaligned senders.
- Reporter drill-down: per-receiver breakdown. Google and Microsoft each report on different aggregate cadences and report coverage; the reporter view helps separate "my domain doesn't send to this receiver" from "this receiver isn't sending reports".
- Per-report records view: drill into a single report file to see message-level disposition, alignment, and Authentication- Results data. The richest data for diagnosing a specific failure pattern.
- Email Header Analyzer: paste the full headers of a failing message and see the SPF, DKIM, DMARC, and ARC verdict breakdown. Use this when a user forwards a "this should have worked" example.
13. Frequently asked questions
- How do I set up DMARC on a hybrid Exchange topology?
-
Four steps. (1) Choose ONE outbound
boundary. The cleanest hybrid DMARC
story has Exchange Online as the
single outbound boundary via
Centralized Mail Transport (CMT) -
on-prem servers relay through the
cloud, the cloud signs DKIM under
your custom domain, and DMARC
alignment is unambiguous. (2)
Publish SPF with
include:spf.protection.outlook.comPLUS your on-prem outbound IP set if on-prem still delivers directly. Stay under the 10-DNS-lookup limit. (3) Configure DKIM signing on whichever side is the outbound boundary. If CMT, only Exchange Online signs. If classic hybrid with on-prem outbound, install an on-prem DKIM signer and publish ARC seals. (4) Publish DMARC atp=noneand advance throughp=quarantinetop=rejectover 4-8 weeks. - What is Centralized Mail Transport in a hybrid Exchange topology?
-
Centralized Mail Transport (CMT) is
a Microsoft 365 feature that routes
outbound mail from on-prem Exchange
THROUGH Exchange Online before
external delivery. From a DMARC
alignment perspective, CMT is the
most operator-friendly hybrid
topology: only Exchange Online needs
to DKIM-sign mail, only Exchange
Online needs to be in SPF, and the
relay leg from on-prem to cloud
happens inside the trusted boundary
so ARC sealing across that hop is
optional. Enable via
Set-HybridConfiguration -CentralizedTransportEnabled $true. - What is the dual-signer DKIM problem in hybrid Exchange?
-
Occurs when BOTH Exchange on-prem
and Exchange Online attempt to
DKIM-sign a single outbound message -
typically under different
d=domains - causing DMARC alignment ambiguity at the receiver. Most common manifestation: on-prem has an Exclaimer / GFI / Zix DKIM transport agent signing underd=your-domain.com, the message relays to Exchange Online which ALSO signs underd=<tenant>.onmicrosoft.com. Receivers iterate non-deterministically across signatures. Fix: choose ONE signing side and disable the other. - How does ARC sealing work in a hybrid Exchange relay?
-
ARC (RFC 8617) lets each hop along
the mail relay record the SPF / DKIM
/ DMARC verdicts it observed and
cryptographically seal them so the
final receiver can reconstruct the
original verdicts even after
intermediate header modifications.
In hybrid: on-prem evaluates an
inbound external message, captures
verdicts, relays to Exchange Online
with an ARC seal. Exchange Online
verifies the seal, trusts on-prem
as a configured intermediary via
Defender Trusted ARC Sealers
(
Set-ArcConfig -ArcTrustedSealers), and applies disposition based on the recorded verdicts. - What is the Default Frontend Connector DKIM strip problem?
-
Older Exchange Online behaviour -
and certain misconfigurations -
cause the Default Frontend
Connector that accepts on-prem
SMTP to STRIP existing
DKIM-Signature headers before
transport, so when Exchange Online
relays the message externally it
re-signs under
<tenant>.onmicrosoft.comand the operator's on-prem DKIM signature is lost. Mitigation: configurePreserveSmtpHeaderson the matching inbound connector, migrate to CMT (so on-prem never signs), or use ARC sealing to preserve the original DKIM verdict independently of header survival. - How do I avoid Send Connector relay loops in hybrid Exchange?
-
Occur when on-prem Send Connectors
and cloud inbound connectors form a
cycle. Symptom: NDR 5.4.6 "Hop
count exceeded". Prevention:
accept the HCW-generated connector
pair as-is, set accepted-domain
DomainType correctly
(Authoritative on the canonical
side, InternalRelay on the other),
verify with
Get-MessageTracethat a sampled outbound message exits cleanly after exactly one cloud hop, and monitor Defender portal Mail Flow > Message Trace for unexpected repeated hops. - Should I keep on-prem Exchange or move fully to Exchange Online for DMARC?
- From a DMARC simplicity perspective, fully cloud-routed mail flow is unambiguously preferable: single DKIM signing side, single SPF include, uniform Defender anti-phishing application. That said, fully eliminating on-prem Exchange is a multi-quarter project. Reasons to keep hybrid include public-folder migration not yet complete, on-prem journaling for legal hold, compliance frameworks requiring on-prem mail flow, or geographic data-sovereignty constraints. If you must keep hybrid, the recommended target is Centralized Mail Transport (CMT).
- What does the Hybrid Configuration Wizard configure for DMARC?
-
HCW configures the bidirectional
Send Connector / Receive Connector
pair, the inbound connector on
Exchange Online that recognises
mail from your on-prem org as
trusted, and accepted-domain
registration on both sides. HCW
does NOT configure DKIM signing
(run
Set-DkimSigningConfigmanually), DMARC TXT records, on-prem ARC sealing, or Trusted ARC Sealers on the cloud side. The HCW configures the plumbing; DMARC alignment requires post-HCW work.
Deploy DMARC for your hybrid Exchange topology now
DMARC Analyzer parses the daily
aggregate reports Microsoft, Google,
Yahoo, and other receivers send to your
rua= mailbox, deduplicates
by report_id +
org_name, and surfaces the
per-sender / per-IP / per-day breakdown
needed to drive the hybrid sender-path
inventory. Live DNS verification for
every SPF / DKIM / DMARC record on your
domain runs through
includes/DnsChecker.php;
the
Email
Header Analyzer at
header_analyzer.php
diagnoses individual message failures
by parsing the full
Authentication-Results stack via
includes/EmailHeaderParser.php.