Your emails are “sent” but not received. Or they land in spam with the enthusiasm of a brick.
Meanwhile your app logs look fine, your SMTP queue is calm, and the business is asking why invoices
are “randomly” missing.
If you run outbound mail from your own infrastructure—Postfix, Exchange, an MTA inside Kubernetes, a
notification service tied to port 25—reverse DNS can be the quiet saboteur. PTR records don’t make
email trustworthy on their own, but missing or sloppy rDNS makes you look like the kind of person who
uses “Password123” in production.
What reverse DNS (PTR) actually is—and what it isn’t
DNS usually answers: “What IP does this name map to?” That’s a forward lookup (A for IPv4, AAAA for IPv6).
Reverse DNS answers a different question: “What name does this IP map to?” That’s a PTR record.
PTR records live in special reverse zones:
in-addr.arpa for IPv4 and ip6.arpa for IPv6.
An IPv4 address like 203.0.113.45 becomes a reverse name like
45.113.0.203.in-addr.arpa. The zone owner sets a PTR record pointing to a hostname, for example
mail01.example.com.
Here’s what PTR is not:
- Not authentication. A PTR record doesn’t prove you own a domain. It proves whoever controls the reverse zone made a statement.
- Not encryption. It doesn’t protect mail in transit. That’s TLS and MTA-STS and friends.
- Not optional if you want consistent deliverability. SMTP technically works without rDNS; modern filtering assumes you’re a liar if you skip it.
The messy reality: the entity that controls rDNS is usually your ISP or cloud provider, because they control the IP allocation and the reverse DNS delegation.
That means you can’t “just add a PTR record in Cloudflare.” You can add forward records for your domain there. PTR is tied to the IP’s reverse zone.
Why email systems care so much about PTR
Email is a federated trust game played by machines that have been lied to for decades. If you operate a receiving mail server, you get hammered by:
credential stuffing, botnets, compromised WordPress hosts, “marketing platforms” behaving like malware, and perfectly legitimate businesses with terrible hygiene.
So receivers use cheap heuristics. PTR is one of the cheapest:
one DNS query, one string, quick judgment. It’s not a single gate, but it’s a loud signal in the spam scoring stack.
What receivers infer from rDNS
- Is this IP “meant” to send mail? Many residential and dynamic ranges have PTRs like
cpe-,dsl-,dynamic-. That’s a strong “no”. - Does this sender behave like a stable MTA? Real MTAs have stable names and consistent forward/reverse mapping. Botnets don’t bother.
- Does the HELO/EHLO string look sane? Lots of receivers compare the SMTP greeting with the PTR name, or at least with a resolvable hostname.
- Is the sender trying too hard? Overly “optimized” naming tricks can backfire. More on that later.
What rDNS commonly breaks
- Hard blocks from strict receivers (some enterprise gateways still do “no PTR, no mail”).
- Spam scoring increases that push you over the line when combined with other mild issues.
- Greylisting pain because your “identity” doesn’t look consistent across retries.
- Reputation systems that categorize your IP range as dynamic/misconfigured.
One sentence that will save you a week: rDNS is about the IP, not the domain in your From:
header. If your SaaS product emails as billing@yourbrand.com but sends from a random VM IP whose PTR is ip-10-0-3-44.internal,
you’re giving filters an easy reason to mistrust you.
Interesting facts and history: PTR’s weirdly durable role
Some context points that matter because they explain why the “old stuff” still bites you:
- Reverse DNS came early. The DNS system and the
in-addr.arpareverse mapping were defined in the 1980s as the Internet standardized naming. - PTR predates modern anti-spam. PTR wasn’t built for spam control; spam just made it useful as a cheap signal.
- SMTP is older than most filtering logic. SMTP’s core behavior was specified when “host identity” was mostly honest and networks were smaller.
- Many corporate gateways still use “PTR required.” It’s crude, but it keeps out vast amounts of garbage with minimal CPU.
- Forward-confirmed reverse DNS (FCrDNS) became a de facto expectation. It’s not a strict protocol requirement, but filters treat it as table stakes.
- IPv6 made reverse DNS more painful. The reverse zone is nibble-based and long; delegation and correctness are easier to mess up.
- Cloud made rDNS ownership split-brained. You might own the domain in one place and rent the IP from another, which creates operational blind spots.
- Big inbox providers rarely document exact scoring. rDNS isn’t “the” key, but it’s part of a broader posture: stable identity, consistent behavior, low complaint rates.
- Dynamic PTR patterns are intentionally stigmatized. Many ISPs label dynamic pools in PTR precisely so receivers can filter them.
Joke #1: PTR records are like name badges at a conference—optional in theory, suspicious in practice, and always missing when you need them.
Fast diagnosis playbook: find the bottleneck in minutes
When deliverability tanks, teams love to argue about SPF vs DKIM vs “maybe Microsoft is down.” Start with what’s fastest to falsify.
Here’s the order I use when I’m on-call and my coffee is still negotiating with my bloodstream.
1) Check the sending IP and its PTR (first)
- Find the outbound IP actually used (NAT gateways, load balancers, relay hosts all lie by omission).
- Verify there is a PTR record and that it looks like a mail host, not a DHCP lease.
- Do a forward-confirmation check: PTR name resolves back to the same IP.
2) Check SMTP banner and HELO/EHLO alignment (second)
- Ensure your MTA announces a stable FQDN in its banner and HELO/EHLO.
- Make sure that FQDN has A/AAAA records and is consistent with the PTR name (not necessarily identical, but not absurd).
3) Check authentication (third)
- SPF passes for the sending IP.
- DKIM signs and verifies for the From: domain (or aligned domain).
- DMARC policy and alignment don’t sabotage you (especially for transactional mail).
4) Check reputation and rate behavior (fourth)
- If the IP is new, expect warm-up requirements.
- Look for spikes: bounces, complaints, sudden volume changes, list hygiene problems.
5) Only then dig into content and templates (fifth)
- Content matters, but if your identity posture is broken, perfect prose won’t save you.
Hands-on tasks: commands, outputs, and decisions (12+)
These are pragmatic checks you can run from a Linux host with basic DNS tools. Every task includes: a command, what the output means, and the decision you make.
Replace the example IP/domain with yours.
Task 1: Find the public outbound IP from the host (sanity check)
cr0x@server:~$ curl -4 ifconfig.me
203.0.113.45
Meaning: This is the IPv4 address external services see. If you expected something else, you’re behind NAT or egress routing differs.
Decision: Use this IP for PTR/SPF checks. If it’s not the mail IP, stop and trace egress.
Task 2: Confirm which IP your MTA is actually using (Postfix example)
cr0x@server:~$ postconf -n | egrep '^(smtp_bind_address|smtp_bind_address6|myhostname|myorigin|inet_interfaces) ='
myhostname = mail01.example.com
myorigin = /etc/mailname
inet_interfaces = all
Meaning: No explicit bind address; Postfix will pick based on routing. Your egress IP may be different from the server’s interface IP.
Decision: If you need a specific IP, set smtp_bind_address (or fix routing/NAT), then re-check what the world sees.
Task 3: Reverse lookup (PTR) for your sending IP
cr0x@server:~$ dig +short -x 203.0.113.45
mail01.example.com.
Meaning: The PTR exists and points to mail01.example.com.
Decision: Continue to forward-confirmation. If empty, you need to set PTR with your ISP/cloud provider.
Task 4: Check for multiple PTRs (usually a smell)
cr0x@server:~$ dig -x 203.0.113.45 +noall +answer
45.113.0.203.in-addr.arpa. 3600 IN PTR mail01.example.com.
Meaning: Exactly one PTR. Multiple PTRs can confuse filters and humans.
Decision: Keep it to one stable PTR per sending IP unless you have a very specific, well-understood reason.
Task 5: Forward lookup of the PTR name (A record)
cr0x@server:~$ dig +short A mail01.example.com
203.0.113.45
Meaning: The PTR name resolves back to the same IP. This is the classic “forward-confirmed reverse DNS” pattern receivers love.
Decision: If the A record points elsewhere, fix your DNS (or adjust the PTR to match reality).
Task 6: Check IPv6 rDNS too (even if you “mostly use IPv4”)
cr0x@server:~$ dig +short -x 2001:db8:abcd:10::25
mail01.example.com.
Meaning: Your IPv6 also has PTR set. Good. If your server can send IPv6, some recipients will see it.
Decision: If missing, either set IPv6 PTR or disable IPv6 outbound SMTP until it’s correct.
Task 7: Verify the SMTP banner and EHLO name from the outside
cr0x@server:~$ nc -v mail01.example.com 25
Connection to mail01.example.com 25 port [tcp/smtp] succeeded!
220 mail01.example.com ESMTP Postfix
Meaning: Banner uses a proper FQDN. If it says localhost or an internal name, you look amateurish to filters.
Decision: Set myhostname correctly and ensure it resolves in public DNS.
Task 8: Confirm the server’s HELO/EHLO string during a test session
cr0x@server:~$ printf "EHLO test.example.net\r\nQUIT\r\n" | nc -w 3 mail01.example.com 25
220 mail01.example.com ESMTP Postfix
250-mail01.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 8BITMIME
Meaning: The server replies with its identity. Many receivers compare what you claim in EHLO with PTR/bannner.
Decision: If the EHLO identity is weird, fix MTA config before chasing SPF ghosts.
Task 9: Check SPF for the From: domain (does it authorize the sending IP?)
cr0x@server:~$ dig +short TXT example.com | sed -n 's/"//g;/^v=spf1/p'
v=spf1 ip4:203.0.113.45 -all
Meaning: SPF explicitly allows the IP and forbids others. Great for transactional mail from a single host.
Decision: If SPF is missing or too strict for your actual sending path, fix it. PTR won’t compensate for SPF fails.
Task 10: Check if your IP is in a “dynamic” reverse naming scheme (pattern recognition)
cr0x@server:~$ dig +short -x 198.51.100.77
cpe-198-51-100-77.isp.example.
Meaning: PTR screams “consumer broadband.” You can run an MTA from it, but many recipients will treat you like a botnet.
Decision: Move outbound mail to a proper static/business IP range or a reputable relay. Don’t fight physics.
Task 11: Validate that the reverse zone is reachable and not SERVFAIL-ing
cr0x@server:~$ dig -x 203.0.113.45 +time=2 +tries=1
; <<>> DiG 9.18.24 <<>> -x 203.0.113.45 +time=2 +tries=1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53112
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
45.113.0.203.in-addr.arpa. 3600 IN PTR mail01.example.com.
;; Query time: 26 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Dec 31 12:00:00 UTC 2025
;; MSG SIZE rcvd: 96
Meaning: NOERROR and an answer. If you see SERVFAIL, you likely have broken delegation or lame name servers for the reverse zone.
Decision: Escalate to the IP owner/provider; this is not a “change your MTA” issue.
Task 12: Inspect a bounce for rDNS/PTR clues (don’t guess; read)
cr0x@server:~$ grep -iE 'ptr|reverse|rdns|helo|host name|554|550' /var/log/mail.log | tail -n 6
Dec 31 12:01:12 mail01 postfix/smtp[22145]: host mx.receiver.example[192.0.2.10] said: 550 5.7.1 Client host rejected: cannot find your reverse hostname (in reply to RCPT TO command)
Dec 31 12:01:12 mail01 postfix/smtp[22145]: to=<user@receiver.example>, relay=mx.receiver.example[192.0.2.10]:25, delay=0.6, delays=0.1/0/0.2/0.3, dsn=5.7.1, status=bounced (host mx.receiver.example[192.0.2.10] said: 550 5.7.1 Client host rejected: cannot find your reverse hostname (in reply to RCPT TO command))
Meaning: The receiver explicitly rejected you for missing rDNS. This is as close as email gets to a clear error message.
Decision: Fix PTR and verify; requeue mail after correction.
Task 13: Confirm outbound connections use the IP you think they do
cr0x@server:~$ sudo ss -ntp | awk '$4 ~ /:25$/ {print $4, $5}' | head
203.0.113.45:54322 192.0.2.10:25
203.0.113.45:54324 192.0.2.11:25
Meaning: Source IP is 203.0.113.45 for outbound SMTP. Good: that’s the IP you checked.
Decision: If you see a different source IP, you’ve been debugging the wrong address. Fix routing/NAT or MTA bind settings.
Task 14: Confirm your resolver isn’t lying (query a public resolver)
cr0x@server:~$ dig +short -x 203.0.113.45 @1.1.1.1
mail01.example.com.
Meaning: A public resolver agrees. If your local resolver shows something else, you might have caching or split-horizon weirdness.
Decision: Use external resolution as the source of truth for deliverability. Your local cache does not receive mail for the world.
Joke #2: Nothing says “trust me” like an email server whose reverse DNS is ubuntu. That’s basically wearing a fake mustache to a bank.
Fixing rDNS correctly: the boring parts that matter
Fixing PTR is simple in concept and annoying in execution because the control plane is often outside your DNS provider.
The correct fix is less “clever DNS” and more “make ownership and naming explicit.”
Step 1: Decide what the PTR should be
Pick a hostname that:
- Is a fully-qualified domain name you control (e.g.,
mail01.example.com). - Is stable over time (not tied to autoscaling instances unless you manage it intentionally).
- Has a matching A record (and AAAA if you use IPv6).
- Does not pretend to be the recipient’s domain or another brand. Filters dislike cosplay.
Step 2: Create forward DNS first (A/AAAA)
Many providers won’t accept a PTR value that doesn’t resolve. Even when they do, you want forward-confirmation anyway.
Create:
mail01.example.com A 203.0.113.45mail01.example.com AAAA 2001:db8:abcd:10::25(if relevant)
Step 3: Set the PTR with whoever owns the IP space
This is the part people get wrong. PTR records are not typically set in your domain’s zone file.
You set them:
- In your cloud provider console (for elastic/public IPs), or
- Via a ticket/email to your ISP / colocation provider, or
- By reverse-zone delegation if you control a large enough IP block (rare, but common in bigger enterprises).
Step 4: Wait for propagation, then verify externally
PTR changes propagate like any DNS change: caches obey TTLs, and some resolvers keep stale data longer than they should.
Verify from multiple networks/resolvers. Your laptop on the office VPN is not a reliable oracle.
Step 5: Align the MTA identity with reality
For Postfix, your basics are:
myhostnameshould be the public FQDN (often the PTR name).smtpd_bannershould not expose garbage, but must be consistent.- Your server should use that hostname in HELO/EHLO, either by default or explicitly.
For other MTAs (Exim, Sendmail, Exchange), the principle holds: the name you present during SMTP should resolve and should not contradict PTR.
Step 6: Don’t forget the network edge
If you send through:
- NAT gateways (common in cloud VPCs), your sending IP is the NAT’s public IP, not the instance’s.
- Outbound relays / smart hosts, the relay’s IP and rDNS matter more than yours.
- Load balancers (rare for SMTP, but it happens), ensure the backend identity doesn’t leak or mismatch.
rDNS is not a “set it once” setting when your routing changes monthly.
Make it part of change management for network egress, not a tribal memory.
Alignment: PTR, A/AAAA, HELO/EHLO, SPF, DKIM, DMARC
Deliverability failures love company. PTR is rarely the only issue, but it’s often the first easy reason to distrust you.
The goal is not “perfect alignment” like a compliance exam; the goal is “no obvious contradictions.”
The alignment rules that matter in practice
- PTR ↔ A/AAAA: The PTR hostname should resolve back to the same sending IP. This is the FCrDNS check.
- HELO/EHLO ↔ DNS: The HELO name should be a resolvable FQDN with A/AAAA. Avoid raw IPs in HELO unless you enjoy being filtered.
- SPF ↔ sending IP: The IP that connects to the receiver must be authorized by SPF for the envelope-from domain (or HELO domain, depending on receiver logic).
- DKIM ↔ message domain: DKIM should sign with a domain aligned to your visible From: for DMARC to pass.
- DMARC ↔ policy: DMARC doesn’t use PTR, but DMARC failures + weak rDNS is a common one-two punch.
What “good” looks like
A clean, boring setup for transactional mail:
- Outbound IP:
203.0.113.45 - PTR:
mail01.example.com - A record:
mail01.example.com → 203.0.113.45 - SMTP banner/HELO:
mail01.example.com - SPF: includes the sending IP (or relay), strict enough to prevent abuse
- DKIM: enabled and stable keys
- DMARC: at least
p=nonewhile rolling out, then tighten as confidence grows
What “bad” looks like
- PTR is empty, or points to
ip-203-0-113-45.provider.examplewhile your HELO ismail.yourbrand.com. - PTR points to one hostname, A record points to a different IP, and your SMTP banner uses a third name.
- IPv6 is enabled and used, but has no PTR, so half your traffic looks broken depending on recipient preference.
- You send from a shared IP where you cannot control PTR; the neighbor’s behavior drags you down.
One operational maxim worth keeping on a sticky note: consistency beats cleverness.
Receivers are doing pattern matching, not reading your architecture diagram.
Quote (paraphrased idea) from Gene Kranz: “Be tough and competent.” In mail deliverability terms: be boring and correct, every day.
Three corporate mini-stories from the trenches
1) Incident caused by a wrong assumption: “We set DNS, so rDNS is set”
A mid-sized B2B company migrated its notification service from a managed email provider to “self-hosted Postfix for cost control.”
The deployment went smoothly: SPF updated, DKIM implemented, DMARC set to monitoring, templates tested.
Their staging environment delivered fine. Production did not.
The support queue started filling with “never got my password reset.” Sales teams escalated it because prospects stopped receiving trial invites.
Engineering looked at metrics: the MTA was handing off messages, the queue wasn’t growing, and the logs showed bounces—some from strict gateways,
some from big inbox providers, and a suspicious number that just disappeared into greylisting purgatory.
The wrong assumption: the team believed that creating mail01.company.com and its A record meant reverse DNS was automatically “covered.”
They’d done DNS work in their authoritative zone and mentally checked the “DNS done” box.
Nobody asked who owns the IP reverse zone. It wasn’t them.
The fix was unglamorous. They opened a provider request to set the PTR for the public egress IP to mail01.company.com.
They aligned the Postfix banner and HELO to match. They disabled IPv6 until the provider set the IPv6 PTR too.
Within a day, the hard “no PTR” bounces stopped, and the greylisting delays shrank because the sender identity stopped shifting.
The lasting change: a runbook step that says “PTR is owned by the IP provider; verify with dig -x from outside.”
It’s the kind of institutional knowledge you only get after production humiliates you in front of Finance.
2) Optimization that backfired: “Let’s make per-customer rDNS for better branding”
An enterprise platform wanted each customer’s mail to “look like it comes from them” while still being sent from the vendor’s infrastructure.
Someone proposed: allocate a pool of IPs and set PTR names like customer-a-mail.vendor.example, customer-b-mail.vendor.example,
maybe even use the customer domain in PTR to improve trust.
On paper it looked clever: segment reputation, isolate noisy tenants, and give customers a sense of control.
In reality, it became a fragile web. PTR changes were tied to automation and ticket workflows.
Sometimes the forward records lagged the PTR updates. Sometimes the HELO identity didn’t update with the customer mapping.
Sometimes the pool rotated faster than TTLs expired.
Receivers saw inconsistency: the connecting IP had PTR customer-a-mail.vendor.example, but the HELO said mail-gw.vendor.example.
Or the PTR pointed to a name whose A record didn’t exist yet.
The platform’s deliverability didn’t just fail; it failed intermittently, which is the worst kind of failure because it breeds superstition.
The backfire was predictable: “dynamic identity” patterns look like abuse.
Some filters treat frequently-changing PTR/HELO combos as suspicious because botnets exhibit that same churn.
Meanwhile, operational toil increased: more moving parts, more propagation timing issues, more exceptions.
The eventual rollback was a relief. They kept dedicated IPs for high-volume customers but reverted to a stable, boring naming scheme:
a small set of mail gateway hostnames with consistent PTR and HELO, and tenant separation handled by envelope domains and authentication.
Branding belongs in the From: name and DKIM alignment, not in PTR gymnastics.
3) Boring but correct practice that saved the day: preflight checks in the release pipeline
A company with a compliance-heavy environment ran outbound mail from a controlled relay layer. They were not fast, but they were consistent.
Every infrastructure change went through a checklist: egress IP inventory, PTR verification, SPF authorization, TLS settings, monitoring of bounce codes.
During a network refresh, a new NAT gateway was introduced to simplify routing. It worked. Traffic flowed.
But the outbound IP changed. This is where most teams learn about rDNS the hard way—after the complaints arrive.
Their pipeline caught it before production users did. A preflight job ran reverse lookups against the candidate egress IP and compared results
against an allowlist of approved PTR names. It failed the change because the NAT IP had provider-default PTR.
The change was paused, a PTR request was filed, and the migration continued once verification passed.
Nothing dramatic happened. That was the win.
Reliability is often just a series of small “nope” decisions made early enough that nobody calls it an incident.
Common mistakes: symptom → root cause → fix
1) Symptom: “550 5.7.1 Client host rejected: cannot find your reverse hostname”
Root cause: No PTR record for the connecting IP, or reverse DNS delegation is broken.
Fix: Set PTR with IP owner/provider. Verify with dig -x from a public resolver. If SERVFAIL, escalate reverse zone delegation issues.
2) Symptom: Mail lands in spam on some providers, inbox on others
Root cause: rDNS exists but doesn’t match forward DNS (FCrDNS fail), or HELO name doesn’t resolve.
Fix: Ensure PTR hostname has A/AAAA pointing back to the sending IP, and MTA HELO uses a resolvable FQDN consistent with PTR.
3) Symptom: Everything worked until a “minor network change”
Root cause: Outbound IP changed (new NAT, new egress path), but PTR/SPF weren’t updated.
Fix: Treat egress IP as a dependency. Update PTR and SPF before cutover; verify with external DNS queries.
4) Symptom: IPv4 deliverability OK, IPv6 deliverability terrible
Root cause: IPv6 has no PTR, or the AAAA points somewhere different than expected, or provider’s IPv6 reverse zone isn’t delegated.
Fix: Set IPv6 PTR and AAAA correctly, or disable IPv6 SMTP until it’s aligned. Don’t let “partially configured IPv6” silently degrade you.
5) Symptom: PTR set correctly, but some receivers still say “no reverse”
Root cause: DNS propagation/caching, or you’re not testing the actual connecting IP, or split-brain DNS confusion.
Fix: Confirm source IP with ss or MTA logs; query public resolvers; wait out TTLs; flush local caches where relevant.
6) Symptom: You can’t set PTR in your DNS provider UI
Root cause: You don’t control the reverse zone for the IP. Your domain DNS provider is irrelevant here.
Fix: Use your cloud provider’s PTR feature or file an ISP ticket. If you own the IP block, arrange reverse delegation properly.
7) Symptom: PTR points to a hostname, but A record points to a different IP “by design”
Root cause: Attempted abstraction (load balancer, pool, or brand naming) without considering FCrDNS checks.
Fix: Make the PTR hostname map back to the same IP. If you need abstraction, do it in higher layers, not by breaking identity signals.
8) Symptom: Deliverability varies by tenant/customer on shared infrastructure
Root cause: Shared IP reputation and limited control over PTR/identity. Neighbor behavior poisons the pool.
Fix: Use dedicated IPs for outbound mail or a reputable relay service. If you must share, enforce strict abuse controls and rate policies.
Checklists / step-by-step plan
Checklist A: New outbound mail server (minimum viable “not embarrassing”)
- Pick a stable hostname for the MTA:
mail01.example.com. - Create A record:
mail01.example.com → your outbound IPv4. - Create AAAA record if using IPv6:
mail01.example.com → your outbound IPv6. - Request/set PTR for IPv4 to
mail01.example.com. - Request/set PTR for IPv6 to
mail01.example.com(or disable IPv6 outbound). - Configure MTA banner/HELO to use
mail01.example.com. - Ensure port 25 egress is allowed and stable (cloud providers sometimes restrict it).
- Set SPF to authorize your outbound IP(s) or relay.
- Enable DKIM signing for the visible From: domain.
- Set DMARC to monitoring initially, then tighten once you have reports and confidence.
- Send a test to a controlled external mailbox; inspect headers for authentication results.
- Set up monitoring: bounce codes, queue depth, rate anomalies, and DNS checks for PTR/FCrDNS.
Checklist B: When you change networking (NAT, egress, providers)
- Inventory new egress IP(s) for SMTP.
- Pre-provision PTR for each IP (v4 and v6).
- Ensure PTR hostnames have A/AAAA pointing back to those IPs.
- Update SPF to include the new IP(s) (or relay include mechanism).
- Run external verification:
dig -xagainst multiple resolvers. - Cut over gradually if possible; watch bounce logs for rDNS-related rejections.
- Keep old IP(s) alive until caches and remote systems converge, if the business can tolerate it.
Checklist C: Operational guardrails that keep rDNS from regressing
- Document who owns PTR changes (provider console? ISP ticket queue?). Put names next to it.
- Track outbound IPs in configuration management, not in someone’s memory.
- Add a periodic job to validate: outbound IP → PTR exists → PTR hostname → A/AAAA returns same IP.
- Alert on failure, but keep it low-noise (daily is enough unless you churn IPs).
- During incidents, require the team to identify the connecting IP before debating DNS.
FAQ
1) Do I need reverse DNS for email to work?
SMTP will still deliver to some places without PTR, but many receivers will reject or spam-folder you. If deliverability matters, treat PTR as required.
2) Where do I create a PTR record?
With whoever controls the IP’s reverse zone—your ISP, hosting provider, or cloud platform. Your normal DNS provider usually can’t set PTR for rented IPs.
3) Should PTR match my MX record?
Not necessarily. PTR should represent the connecting host/IP. Your MX records represent inbound routing for a domain.
Often they’re related, but forcing them to match is not a requirement and can be counterproductive.
4) What is FCrDNS and do I need it?
Forward-confirmed reverse DNS means: IP → PTR hostname, and hostname → A/AAAA includes the same IP. It’s not a formal law, but it’s a common filter check.
If you can meet it, do it. It removes an easy excuse to distrust you.
5) Can I use a PTR like “smtp.example.com” if multiple IPs send mail?
You can, but then the A/AAAA mapping gets tricky. If multiple IPs share the same PTR name, FCrDNS may fail unless the forward record lists all IPs.
Operationally, a unique hostname per IP is cleaner for high-signal deliverability and troubleshooting.
6) What about shared IPs where I can’t control PTR?
That’s a structural disadvantage. You inherit reputation and sometimes poor rDNS practices.
For serious outbound mail, use a dedicated IP or a relay where PTR and reputation are managed properly.
7) If my PTR is correct, am I guaranteed inbox placement?
No. PTR is table stakes, not a golden ticket. Deliverability depends on authentication, reputation, complaint rates, list hygiene, volume patterns, and content.
PTR just prevents you from failing the “basic competence” test.
8) How fast do PTR changes propagate?
Depends on TTLs and resolver caching behavior. Expect minutes to hours. Some systems hold onto old data longer than you’d like.
Always verify from multiple public resolvers and external networks before declaring victory.
9) Does DMARC require PTR?
DMARC doesn’t check PTR. But receivers evaluate many signals together. A DMARC pass can be undermined by obviously broken host identity.
Conversely, good rDNS can’t rescue failing DMARC alignment.
10) Should I disable IPv6 if I can’t get IPv6 PTR?
If your MTA might send over IPv6 and the IPv6 identity is broken, disabling IPv6 outbound is often the pragmatic move until you can fix it properly.
Half-configured IPv6 is a deliverability trap.
Next steps you can do today
- Identify your real sending IP. Don’t assume; verify via logs or outbound sockets.
- Run PTR + FCrDNS checks from at least one public resolver.
- Make the MTA’s HELO and banner boring and resolvable. Ideally align it with PTR.
- Fix IPv6 deliberately. Either set AAAA + IPv6 PTR correctly or keep IPv6 out of outbound SMTP for now.
- Operationalize it. Add a recurring check and a change-management step tied to network egress updates.
Reverse DNS is not glamorous, and it won’t win architecture awards. That’s why it’s so often broken.
But if you send email from your own systems, rDNS is the difference between “professional service” and “mysterious mail gremlin.”
Choose boring. Your inbox placement will thank you.