Record Types We Work With Daily
Record types we work with daily
DNS has dozens of record types. Eight of them carry almost all the work we do at Isidore. Here they are in the order they tend to come up on an engagement.
A and AAAA
Map a hostname to an IP address. A is IPv4 (acme.com → 203.0.113.45). AAAA is IPv6 (acme.com → 2001:db8::1). When a browser, a mail server, or any client connects to a host by name, these are the records that get it to the right address.
You’ll see A records for the bare domain, for www, for application servers, for internal app hostnames. AAAA records appear less consistently — most clients don’t deploy IPv6 in the DNS until they need it, even if their cloud provider supports it.
CNAME
An alias from one hostname to another. mail.acme.com CNAME ghs.googlehosted.com tells the resolver “to find mail.acme.com, go look up ghs.googlehosted.com instead.”
The rule that trips techs up: a CNAME cannot coexist with any other record at the same name. You can’t have acme.com CNAME and acme.com MX — the spec forbids it. This is why you can’t CNAME the bare domain (the apex) to a target if you also have MX records there. Most DNS hosts work around this with proprietary “ALIAS” or “ANAME” record types, but those translate to A records under the hood.
CNAMEs are how M365 publishes DKIM selectors — you publish selector1._domainkey.acme.com CNAME selector1-tenant._domainkey.tenant.onmicrosoft.com, and Microsoft handles the actual key rotation on the other end.
MX
Tells the world where to deliver mail for a domain. An MX record has two parts: a priority (lower number = preferred) and a target hostname. For an M365 tenant, you typically see:
acme.com. 3600 IN MX 0 acme-com.mail.protection.outlook.com.
Priority is for failover, not load balancing. A sender attempts the lowest-priority MX first; if delivery fails, it tries the next.
When no MX record exists, the sender falls back to the A record of the bare domain — almost always wrong, since the A record usually points to a web server. If a client has email “just not working” on a fresh domain, check the MX record first.
TXT
Holds arbitrary text data. TXT is the swiss army knife of DNS — most security records live here:
- SPF at the apex (
v=spf1 ...) - DMARC at
_dmarc.{domain}(v=DMARC1; p=...) - DKIM keys at
{selector}._domainkey.{domain}(v=DKIM1; k=rsa; p=...) - MTA-STS at
_mta-sts.{domain}(v=STSv1; id=...) - TLS-RPT at
_smtp._tls.{domain}(v=TLSRPTv1; rua=...) - Domain verification tokens from M365, Google Workspace, AWS, etc.
When Cathedra inspects email security, it’s reading TXT records at specific hostnames. We’ll spend most of this course in TXT records.
NS
Names the authoritative nameservers for a zone. Cathedra checks these in DnsHygieneCheck — at least one NS record must exist for the domain to resolve at all. The check also flags when NS records point to multiple providers, because that’s unusual and is sometimes a misconfiguration left over from a half-completed migration.
A typical clean NS set:
acme.com. 3600 IN NS ns11.domaincontrol.com.
acme.com. 3600 IN NS ns12.domaincontrol.com.
Both nameservers at the same provider (GoDaddy’s domaincontrol.com). If one were at domaincontrol.com and the other at awsdns-19.com, Cathedra warns.
SOA
Start of Authority. There’s exactly one SOA record per zone, and it carries metadata about the zone itself — the primary nameserver (mname), the email of the zone administrator (with @ written as .), the serial number, and timing fields for secondary servers.
The field techs care about most: serial. Authoritative servers compare serials to know if they have the current version of the zone. When you make a DNS change, the serial increments. If two authoritative servers have different serials for the same zone, you’re looking at a propagation lag or a broken slave.
CAA
Certification Authority Authorization. Tells the world which Certificate Authorities are allowed to issue certificates for the domain. Cathedra reports CAA as info-only when missing — not a security failure, just a hardening opportunity.
A typical CAA record set for a domain that uses Let’s Encrypt:
acme.com. 3600 IN CAA 0 issue "letsencrypt.org"
This says: only Let’s Encrypt can issue certs for acme.com. If an attacker tricks a different CA into issuing a cert (a real attack pattern), the issuance fails because the CA is required to check the CAA record first.
SRV
Service location records. We see these in two main contexts:
- Autodiscover in some configurations (more commonly a CNAME today, but legacy SRV-based Autodiscover still exists in the wild).
- VoIP and federation — SIP, XMPP, Microsoft Teams federation. Rare in our day-to-day mail security work but you’ll occasionally need to read one.
PTR (the one running backwards)
PTR records do reverse DNS — given an IP, return the hostname. They live in a different zone ({reversed-ip}.in-addr.arpa) and you generally don’t manage them in DNS Management; you manage them at the hosting provider or registrar that holds the IP allocation.
PTR matters for outbound mail. If a client runs their own mail server (rare for us, but it happens), the receiving server checks that the sending IP has a matching PTR. A mismatch is a strong spam signal. For cloud mail (M365, Google Workspace), the provider handles PTR — you don’t manage it.
Cheat sheet
| Type | Used for | Where |
|---|---|---|
| A, AAAA | name → IP | Apex, subdomains |
| CNAME | name → name (alias) | Subdomains only (not the apex) |
| MX | mail routing | Apex |
| TXT | SPF, DKIM, DMARC, MTA-STS, verification | Apex and specific underscored hostnames |
| NS | authoritative nameservers | Apex |
| SOA | zone metadata, serial | Apex |
| CAA | which CAs can issue certs | Apex |
| SRV | service locator | Specific underscored hostnames |
| PTR | reverse DNS | Separate in-addr.arpa zone |
Next lesson: how to read dig output well enough to debug everything in this list.
Cathedra alignment: every Examen check operates on these record types
