DNSBL 返回码详解:127.0.0.2、127.255.255.x 与 NXDOMAIN
DNSBL 查询返回 127.0.0.0/8 范围内的地址,表示该 IP 或域名已被列入;返回 NXDOMAIN 则表示未被列入。除此之外,具体数值因名单而异,有些 127.x 应答是错误码而不是列入,而 SERVFAIL 或超时则完全无法说明是否被列入。
本文介绍 RFC 5782 中记录的惯例,以及 Spamhaus、SpamCop 和 UCEPROTECT 在其官方页面上说明的返回码。内容依据这些官方页面截至 2026 年 11 月的信息。名单的数据和政策会变化,根据结果采取行动之前,请查看运营方的文档。如果需要了解黑名单工作原理的背景知识,请先阅读什么是 DNSBL(RBL)。
基础知识:RFC 5782 对返回码的规定
RFC 5782 发布于 2010 年 2 月,描述了 DNS 黑名单和白名单的查询方式以及应答的形式。它是一份信息性(Informational)文档,而不是标准轨道(Standards Track)规范:它记录的是通行做法,具体数值的分配则交由各名单运营方决定。
查询的构成方式
对于 IPv4,将八位组的顺序反转,再加上名单的区域名。要在 bl.example.com 中检查 192.0.2.99:
dig +short 99.2.0.192.bl.example.com A
dig +short 99.2.0.192.bl.example.com TXT对于 IPv6,地址写成 32 个十六进制半字节并倒序排列,后接区域名。基于域名的名单则直接在域名后加上区域名;RFC 指出,基于名称的名单远不如基于 IP 的名单常见。
A 记录:是否被列入
- 已列入:名单返回 A 记录。RFC 指出,所有 A 记录的值应位于 127.0.0.0/8 范围内,以防产生多余的网络流量,并且该值按惯例为 127.0.0.2。
- 未列入:该地址不得存在任何记录。用 DNS 术语来说,应答为 NXDOMAIN,即该名称不存在。
- A 记录的值不得用作 IP 地址。127.0.0.2 是一个标志,而不是要连接的服务器。
TXT 记录:原因和 URL
根据 RFC,DNSBL 应发布说明条目被列入原因的 TXT 记录,其中通常会包含一个提供更多信息的 URL。客户端软件必须检查 A 记录,也可以检查 TXT 记录。TXT 文本常被用在 SMTP 错误消息中,因此退信中可能会包含从中引用的查询或解除 URL。
为什么名单会返回不同的数值:子名单与位掩码
如果返回值不是 127.0.0.2,通常意味着该区域合并了多份子名单。RFC 5782 介绍了三种表示方式:子域名、多条 A 记录,以及按位编码的值。
- 多条 A 记录:每份子名单有自己的值,地址出现在几份子名单上,名单就返回几条 A 记录。
- 位掩码:每份子名单分配一个位,应答是所有命中子名单对应位的逻辑或(OR)。在 RFC 的示例中,同时位于 127.0.0.2 和 127.0.0.4 子名单上的地址会返回 127.0.0.6。
关键在于,RFC 本身就指出,子名单名称与数值之间并没有广泛通用的对应惯例。同一个数值在不同的名单上可能含义不同。请务必把返回码与产生它的区域放在一起,对照该名单自己的文档来解读。RFC 还指出,客户端软件应能够对返回值进行位掩码运算和数值范围判断。
Spamhaus ZEN 是多应答方式的一个典型例子。其文档说明,一次查询通常会在同一个 DNS 响应中得到多个不同的应答,IP 被列入的每个数据集各对应一个,每个数据集的返回码都不同。同时看到两三个返回码是正常现象。
主要黑名单的返回码
下表列出各运营方在其官方页面上说明的返回码。
| 名单(区域) | 返回码 | 含义(依据运营方说明) |
|---|---|---|
| Spamhaus ZEN(zen.spamhaus.org) | 127.0.0.2 | SBL |
| Spamhaus ZEN | 127.0.0.3 | CSS |
| Spamhaus ZEN | 127.0.0.4 | XBL(CBL 数据) |
| Spamhaus ZEN | 127.0.0.9 | DROP,与 127.0.0.2 一起返回 |
| Spamhaus ZEN | 127.0.0.10 / 127.0.0.11 | PBL(ISP 维护 / Spamhaus 维护) |
| Spamhaus DBL(dbl.spamhaus.org) | 127.0.1.2、127.0.1.4 至 127.0.1.6 | 低信誉域名:垃圾邮件、钓鱼、恶意软件、僵尸网络 C&C |
| Spamhaus DBL | 127.0.1.102 至 127.0.1.106 | 被滥用的正常域名(127.0.1.103:在垃圾邮件中被利用的重定向域名) |
| Spamhaus DBL | 127.0.1.255 | 用 IP 地址查询了 DBL,这是不允许的 |
| SpamCop(bl.spamcop.net) | 127.0.0.2 | 已列入 |
| UCEPROTECT(dnsbl-1、dnsbl-2、dnsbl-3.uceprotect.net) | DNS 使用页面未说明 | Level 1、2、3 各对应一个区域 |
- Spamhaus:ZEN 合并了 SBL、CSS、XBL 和 PBL,只针对 IP 地址;域名要在 DBL 中检查。DBL 使用 127.0.1.0/24,Zero Reputation Domains 名单使用 127.0.2.0/24。由于 DBL 对 IP 查询总是应答 127.0.1.255,因此不能用它检查 IP。关于 Spamhaus 各名单的含义及解除申请方法,请参阅Spamhaus 解除指南。
- SpamCop:官方 FAQ 给出 127.0.0.2 作为表示 IP 已被列入的应答。它还建议让用户能够看到被过滤的邮件,例如加上标记或移到单独的文件夹,而不是直接拒收。解除方法请参阅SpamCop 解除指南。
- UCEPROTECT:DNS 使用页面列出了三个区域名,但没有说明返回值。页面指出,DNS 方式实际上只适用于中小型邮件服务器,并建议每天请求量超过 100,000 次的系统使用 rsync。各级别的说明请参阅UCEPROTECT Level 2 和 3 指南。
- Barracuda:本文不涉及其返回值。请查看 Barracuda Central 自己的页面。
127.255.255.x 与公共解析器:并非列入的应答
Spamhaus 把 127.255.255.0/24 保留用作错误码。任何区域都可能返回这些代码,官方 FAQ 声明,不得据此认为所查询的对象已被列入。
| 返回码 | 含义 |
|---|---|
| 127.255.255.252 | DNSBL 名称拼写错误 |
| 127.255.255.254 | 通过公共或开放解析器查询 |
| 127.255.255.255 | 查询次数过多 |
为什么公共解析器的结果不可靠
Spamhaus 的 FAQ 指出,通过大型公共解析器查询时,大多数情况下会得到“未列入”(NXDOMAIN)的回复。也就是说,被列入的 IP 可能看起来是干净的。同一份 FAQ 还指出,使用 Amazon、Quad9、Google、Cloudflare 或其他公共解析器,是导致相反问题(名单看起来把整个互联网都拦截了)的最常见原因。
有些解析器还会改写 NXDOMAIN 应答,对不存在的名称返回一个 IP 地址。邮件服务器可能会把它误认为列入。FAQ 建议:让邮件服务器忽略所有不在 127.0.0.0/8 范围内的应答、自行运行解析器,或者联系您的 ISP 或 DNS 服务商。要查看您实际使用的是哪个解析器,FAQ 给出了以下检查方法:
dig txt whoami.fastly.net如果您在自己的邮件服务器上使用 DNSBL 过滤,还请确保它不会在收到 127.255.255.x 应答时拒收邮件。Spamhaus 将这种情况描述为配置错误。
NXDOMAIN、SERVFAIL 与超时的区别
每个 DNS 响应都带有 RFC 1035 中定义的响应码(RCODE)。解读 DNSBL 结果时,要把 RCODE 和 A 记录的值分开看。
| 响应 | 在 DNS 中的含义 | 对 DNSBL 的解读 |
|---|---|---|
| 127.0.0.0/8 范围内的 A 记录(127.255.255.x 除外) | 无错误(NOERROR) | 已列入;请对照该名单的文档确认数值含义 |
| NXDOMAIN(Name Error) | 所查询的名称不存在 | 未列入,前提是查询通过了合适的解析器 |
| 127.255.255.x | 看似正常、实为表示错误的应答 | 未知;请修正解析器或查询方式 |
| SERVFAIL(Server failure) | 域名服务器无法处理该查询 | 未知 |
| 超时 | 没有收到应答 | 未知 |
RFC 5782 没有规定客户端应如何处理出现故障或没有响应的名单。把 SERVFAIL 或超时解读为“已列入”或“未列入”都是错误的。请稍后重试,或者换一条路径查询。
用测试条目检查名单是否正常工作
RFC 5782 要求 IPv4 名单必须包含 127.0.0.2 的条目,且不得包含 127.0.0.1 的条目。IPv6 名单使用 ::FFFF:7F00:2(已列入)和 ::FFFF:7F00:1(未列入),域名名单则使用保留名称 TEST(已列入)和 INVALID(未列入)。
dig +short 2.0.0.127.zen.spamhaus.org A
dig +short 1.0.0.127.zen.spamhaus.org A如果第一条查询返回列入代码(127.255.255.x 以外的 127.x 值),第二条没有返回任何结果,说明对该名单的查询工作正常。如果第一条返回 127.255.255.x,说明您的查询路径被拒绝了。RFC 指出,客户端应定期检查测试条目,不应使用测试条目不正确的名单。RFC 还提到,运营方在关闭名单时,有时会删除所有条目,或设置一个把所有地址都列入的通配记录。如果 127.0.0.1 也显示为已列入,应怀疑名单本身或您的查询路径,而不是您自己的 IP。
解读自己查询结果的实用方法
- 选对 IP 或域名。使用退信中的 IP,或邮件头 Received 行中发信服务器的 IP。
- 一次检查多份名单。我们的黑名单检测工具可以一次性查询主要名单。
- 把每个返回码与其区域一起解读。127.0.0.0/8 范围内的列入代码(127.255.255.x 除外)表示已列入;请查明该数值在该名单上的含义。127.255.255.x 应答、SERVFAIL 或超时,表示状态仍然未知。
- 查看 TXT 记录和运营方的查询页面。许多名单会返回原因或 URL。请以运营方自己的查询页面作为权威结果。
- 消除原因,然后按照该名单的解除流程办理。是否解除、何时解除,由各运营方决定。如果原因仍然存在,列入通常会再次出现。
邮件被退回时的完整排查步骤,请参阅邮件因黑名单被拦截。如果您需要帮助解读结果或查找原因,可以就解除事宜向我们咨询。
常见问题
查询返回了 127.0.0.2,我在哪份名单上?
您在所查询区域对应的名单上。127.0.0.2 是许多名单通用的惯例值,仅凭这个数字无法确定是哪份名单。在 Spamhaus ZEN 上它表示 SBL;在 SpamCop 上则只表示已列入。请结合区域名和该名单的文档来解读。
收到 127.255.255.254,我被列入黑名单了吗?
没有。在 Spamhaus 的区域中,这是一个错误码,表示查询经由公共或开放解析器发出。它并不表示该 IP 已被列入。请在 Spamhaus 自己的查询页面上重新检查,或者不经过公共解析器进行查询。
为什么不同工具对是否被列入的判断不一致?
常见的原因是查询所用的解析器不同。通过公共解析器查询时,被列入的 IP 可能看起来是干净的,或者会收到错误码。有些工具还可能把 SERVFAIL 或超时显示为未列入。拿不准时,请使用名单运营方的官方查询页面。
我的列入没有 TXT 记录,是哪里有问题吗?
不一定。RFC 5782 指出 DNSBL 应发布说明原因的 TXT 记录,但这并非强制要求,而且检查 TXT 记录对客户端来说是可选的。决定是否列入的是 A 记录。
参考的官方页面
本文中的事实已在发布时对照以下官方页面进行核实。相关政策和行为可能随时变更,恕不另行通知,在依赖重要信息之前,请先查看官方页面。
- RFC 5782: DNS Blacklists and Whitelists
- RFC 1035: Domain Names - Implementation and Specification (RCODE)
- Spamhaus FAQ: DNSBL Usage (return codes and public resolvers)
- Spamhaus: ZEN Blocklist
- Spamhaus: Domain Blocklist (DBL)
- SpamCop FAQ: How do I configure my mailserver to reject mail based on the blocklist?
- UCEPROTECT: Using DNS Lookups
相关指南
什么是 DNSBL?DNS 黑名单和 RBL 的工作原理:反转 IP 查询、A 和 TXT 记录、IPv6、IP 与域名名单、白名单,以及 IP 被列入的原因。
被 Spamhaus 列入黑名单?了解您在哪个列表上(ZEN、PBL、XBL、CSS、SBL、DBL)、返回码的含义,以及每个列表对应的正确移除途径。
如何针对 DNS 黑名单监控发信 IP 和域名:dig 加 cron 脚本、带 Webhook 的批量 API,以及避免误报的告警设计。