Domain IP Lookup

几乎每个 DNS 区域都会遇到的记录

A主机名指向 IPv4 地址
AAAA主机名指向 IPv6 地址
CNAME主机名指向另一个主机名
MX域名指向其邮件服务器,按优先级排序
TXT域名对应任意文本,如 SPF、DKIM、验证信息
NS域名指向负责应答的域名服务器
实用指南

TXT 记录详解:SPF、DKIM 与 DMARC

3 分钟阅读

TXT 记录存放附加在域名上的任意文本。这听起来微不足道,但整个邮件信任体系正是通过它发布的,此外,您会做的大多数域名所有权验证也都依靠它。

核心问题在于,诞生于 1982 年的 SMTP 允许任何服务器声称以任何域名的身份发信,协议本身没有任何机制来阻止。SPF、DKIM 和 DMARC 是后来为解决这个问题而加上的三层机制,而且三者都存放在 TXT 记录中。

核心要点

MX 记录决定邮件送往何处。这三条 TXT 记录则决定别人是否相信自称来自您的邮件。没有它们,正常的邮件也会落入垃圾箱。

SPF:哪些服务器可以以您的名义发信

SPF(Sender Policy Framework,发件人策略框架)发布一份获准为您的域名发送邮件的服务器列表。接收服务器会把连接进来的 IP 与该列表进行比对。

一条典型的 SPF 记录
example.com.    3600    IN    TXT    "v=spf1 include:_spf.google.com ip4:93.184.216.34 ~all"
部分含义
v=spf1版本标记,必须放在最前面。
include:_spf.google.com同时信任 Google SPF 记录中的所有内容。
ip4:93.184.216.34信任这个特定地址。
~all软失败:其他任何来源都可疑,但不会被拒收。
-all硬失败:拒收任何未列出的来源。更严格。

DKIM:加密签名

DKIM(DomainKeys Identified Mail)使用私钥对每封外发邮件签名。您在 DNS 中发布与之匹配的公钥,接收方据此验证签名。

一条 DKIM 记录,注意名称中的选择器
selector1._domainkey.example.com.  IN  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."

selector1 部分由您的邮件服务商选定,并包含在每封已签名的邮件中,让接收方知道要获取哪把密钥。使用选择器意味着您可以轮换密钥,或同时使用多家服务商而不冲突。

DKIM 相对于 SPF 的优势在于,签名涵盖邮件本身,所以转发后依然有效。它的弱点在于,对于完全没有签名就到达的邮件,它什么都说明不了,而这正是 DMARC 弥补的空白。

DMARC:前两者失败时该怎么办

DMARC(Domain-based Message Authentication, Reporting and Conformance)把另外两者联系起来:它要求 SPF 或 DKIM 不仅要通过,还要与可见的 From 地址对齐,并告诉接收方在失败时该怎么处理。

一条 DMARC 记录,始终位于 _dmarc
_dmarc.example.com.    IN    TXT    "v=DMARC1; p=quarantine; rua=mailto:reports@example.com; pct=100"
标签含义
p=none仅监控,不采取任何措施。这是起点。
p=quarantine把未通过的邮件送入垃圾箱。
p=reject直接拒收未通过的邮件。最终目标。
rua=发送汇总报告的地址。
pct=将策略应用于这一比例的邮件,适合逐步推行。

安全地部署这三者

顺序很重要。直接上 p=reject,是让您自己的发票邮件无法送达的经典做法。

  1. 盘点所有以您的名义发信的系统

    当然有您的邮件服务商,但还有开票工具、CRM、营销平台、工单系统,以及您应用的事务性邮件。这里遗漏的任何一项,之后都会出问题。

  2. 发布带软失败的 SPF

    把第一步中的每个发件方都包含进来,并以 ~all 结尾。软失败会把未列出的发件方标记为可疑,而不会在您核实列表期间毁掉邮件。

  3. 启用 DKIM 签名

    在每个服务商处开启,并发布它们提供的选择器记录。发送一封测试邮件,确认签名验证通过。

  4. DMARC 从 p=none 开始

    仅监控。收集两到四周的汇总报告,它们会暴露您忘记的发件方。

  5. 逐步收紧

    一旦报告显示只有合法来源通过,就转到 p=quarantine,可以先配合 pct=25,等到干净之后再转到 p=reject。

TXT 记录不只用于邮件

同一种记录类型还承载着几十种服务的域名所有权验证,Google Search Console、Microsoft 365、Facebook 等都会要求您把一个令牌发布为 TXT 记录,然后再去检查它。

典型的验证记录
example.com.    IN    TXT    "google-site-verification=rXsLp2..."
example.com.    IN    TXT    "MS=ms12345678"

这些记录可以和平共存。一个域名可以拥有许多条 TXT 记录;唯一的规则是,以 v=spf1 开头的必须有且只有一条。

用查询工具查看任意域名,可以同时看到它的所有 TXT 记录,这是发现重复 SPF 记录或从未移除的验证令牌的快捷方法。

需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。

本主题的免费工具

常见问题