从 IPv6 反向 DNS 到 .ip6.arpa:一次有趣的 DNS 空间探索

从 IPv6 反向 DNS 出发,拆解 ip6.arpa 的 nibble 命名方式、前缀与命名空间的对应关系、DNS 委派机制,以及为什么它不适合当普通网站域名。

前几天看到 Ethan Hawksley 的一篇文章 How to get a free .arpa domain,讲怎么钻 IPv6 反向 DNS 的空子:拿一段属于自己的 .ip6.arpa 命名空间,在上面写任意 DNS 记录,最后挂个网站上去。

这事能成。但我更感兴趣的不是"白嫖域名"这个结果,而是中间要用到的几个机制:

  • IPv6 地址是怎么映射成 DNS 名字的?
  • ip6.arpa 为什么存在,归谁管?
  • 一个 IPv6 前缀为什么天然对应一块 DNS 命名空间?
  • DNS 委派(delegation)怎么把这块空间交给别的服务器?
  • 把它当普通网站域名用,会卡在哪?

下面挨个说,顺便补上原文一带而过的部分。

.arpa 是什么

日常见得最多的顶级域是 .com.org.net.dev,都由商业注册局运营,任何人都能花钱注册。

.arpa 不是这一类。

它的全称是 Address and Routing Parameter Area(地址与路由参数区),是一个专供互联网基础设施使用的顶级域,由 IANA 在 IAB 指导下管理,地位由 RFC 3172 定义。这个全称其实是后来倒推出来的。最早它就叫 arpa,是 ARPANET 向 DNS 过渡时期的临时域,本打算用完就删,结果一堆基础设施长在了上面删不掉,才补了个正式含义。

.arpa 不对外开放注册,你没法拥有 yoursite.arpa。它下面挂着几个专用命名空间:

in-addr.arpa   IPv4 反向 DNS
ip6.arpa       IPv6 反向 DNS
e164.arpa      电话号码(ENUM,RFC 6116)
home.arpa      家庭网络本地域名(RFC 8375)

e164.arpa 是个旁支:它把 E.164 电话号码映射进 DNS,由 RIPE NCC 按 IAB 指示运营。少数几个国家(比如德国)开放过让用户自己管理号码对应的记录,原文作者最早就是从这里受到启发的,只是大部分国家的号码段没开放,他才转向了 ip6.arpa

正向和反向 DNS

平时用的是正向解析

blog.eimoon.com  →  AAAA / A 记录  →  IP 地址

反向解析是反过来问:这个 IP 属于谁?

IP 地址  →  PTR 记录  →  域名

反向解析靠的就是 in-addr.arpaip6.arpa。把 IP 地址按规则转成 .arpa 下的一个名字,再查它的 PTR 记录,就能拿到主机名。邮件服务器的 FCrDNS 校验、traceroute 里显示的路由器名字,用的都是这套。

IPv6 地址怎么变成一个域名

先看单个地址怎么处理。IPv6 地址是 128 bit,写成 32 个十六进制字符。反向 DNS 里不直接塞完整地址,而是:

  1. 补全:把每个冒号分段补到 4 位;
  2. 拆到 nibble:一个十六进制字符就是一个 nibble(4 bit),逐字符拆开;
  3. 倒序:把 nibble 顺序整个反过来(最低位在最左);
  4. 加后缀:末尾拼上 ip6.arpa

拿原文用的前缀举例。Hurricane Electric 给的路由前缀是:

2001:470:1f09:140::/64

取前 64 bit,补全成 2001:0470:1f09:0140,拆成 16 个 nibble:

2 0 0 1  0 4 7 0  1 f 0 9  0 1 4 0

倒序,每个 nibble 之间加点,拼上 ip6.arpa

0.4.1.0.9.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa

这就是这段 /64 对应的反向 DNS 区域名。

如果是一个完整地址 2001:470:1f09:140::1,展开成 32 个 nibble 后同样处理,得到的 PTR 名字有 32 个标签:

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.1.0.9.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa

规则就是把地址的每个 nibble 当成一级 DNS 标签,低位在左、高位在右。DNS 名字本来就是左边最具体、右边最泛(www.example.comcom 最泛),反向 DNS 把这套规则套到了地址的每一位上。

这套 nibble 格式由 RFC 3596 定义,它也是现在 AAAA 记录的规范来源。历史上还折腾过几版:

  • RFC 1886(1995)最早定义反向域,用的是 ip6.int
  • RFC 3152(2001)把反向域迁到 ip6.arpa,并弃用 ip6.int
  • RFC 2673 提过一版基于 bitstring label(\[x.../nn])的紧凑写法,后被 RFC 3363 建议不要用,统一回到 nibble;
  • RFC 4159(2005)正式宣告 ip6.int 停用,ip6.arpa 成为唯一标准。

一个 IPv6 前缀 = 一段命名空间

只有单个地址时能做的不多,拿到一整段前缀才有意思。

比如一个 /64

2001:470:1f09:140::/64

/64 是 64 bit,正好 16 个 nibble,也就是 ip6.arpa 下深度为 16 的一个节点:

0.4.1.0.9.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa

这个节点以下的整棵子树(对应地址后 64 bit 的所有取值),反向 DNS 上都归这段前缀的持有者。

只要前缀长度是 4 的倍数,反向委派就正好落在 DNS 标签边界上。/48/56/60/64 分别对应 12、14、15、16 个 nibble,都是整数个标签,而 IPv6 的前缀分配基本就是这几个长度。RIR 和 ISP 分配地址时,一般也会把对应的反向 DNS 子域一起委派给你。

所以拿到一段 IPv6 地址空间,就等于拿到了它对应的那段反向 DNS 空间的控制权。而 DNS 不按区域限制记录类型,这个子树里放 PTRCNAMETXTAAAA 都行,它只是碰巧本来是给反向解析用的。

DNS 委派

下一个问题:这段 ip6.arpa 空间,怎么交给我自己的 DNS 服务器管?

DNS 是一棵分层的树,每一级都能把某个子域的权威下放给别的服务器,靠的是在父区里放一组 NS 记录。.com 的权威服务器里有 example.comNS 记录,指向 example.com 的托管商,就是这个机制。

反向 DNS 完全一样。在这个例子里:

  • Hurricane Electric 持有 2001:470::/32 这一大块的反向 DNS 权威;
  • 你在 HE 的隧道详情页把这段 /64rDNS Delegation 填成你自己的 NS;
  • HE 就在 0.4.1.0.9.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa 这个名字上放一组 NS 记录,指向你的服务器;
  • 之后所有对这个子树的查询,都会被引导到你这边。

托管商的 NS(比如 ns1.desec.io)不在这个区域内部,所以不需要 glue 记录。

到这一步,ip6.arpa 对你来说就不再是查 IP 用的东西,而是一块你能自己写记录的 DNS 区域。

实操路线

原文的完整路径是这样:

1. 拿 IPv6 前缀。 Hurricane Electric Tunnelbroker 免费发 IPv6 隧道,注册不做实名。创建隧道时要填一个能响应 ICMP Echo 的 IPv4 端点,它只校验这个地址 ping 得通,不校验你是否拥有它(原文作者直接 ping news.ycombinator.com 拿了个 IP 填进去)。建好后记下 Routed IPv6 Prefix,默认给 /64,点一下能再要个 /48。注意 HE 只委派 Routed 前缀的反向 DNS,隧道两端那个 PtP /64 不给。

2. 算出区域名。 按前面的 nibble 规则,把前缀转成 x.x.…​.ip6.arpa

3. 建区域。 找一家肯接受 .arpa 区域的 DNS 托管商。原文提到 Cloudflare 免费版会拒掉这种区域名,deSEC 能正常建。deSEC 是柏林一家非营利组织运营的免费 DNS 服务,默认开 DNSSEC,有开放 API。在里面新建一个域,名字填第 2 步算出来的那串。

4. 配委派。 回到 HE 隧道详情页的 rDNS Delegations,把 NS1–NS5 填成 deSEC 给的 NS(ns1.desec.ions2.desec.org)。传播很快。

5. 写记录。 在 deSEC 里,这块区域就随你用了。

整条链路:

IPv6 前缀  →  反向 DNS nibble 命名  →  ip6.arpa 子树  →  NS 委派给 deSEC  →  自己的 DNS 记录

你没有"注册"任何 .arpa 域名。你是因为持有一段 IPv6 地址空间,顺带控制了它对应的那段反向 DNS。

拿它做网站

技术上没问题。在这块区域里建一条记录,比如 blog.0.4.1.0.9.0.f.1.0.7.4.0.1.0.0.2.ip6.arpaCNAME 到一个静态托管:

blog.<你的区域>.ip6.arpa  →  CNAME  →  静态托管商

浏览器解析这个名字时不会因为它在 ip6.arpa 下就拒绝——递归解析器对 ip6.arpa正向查询一视同仁。所以 HTTP 层面它能正常打开。

原文用 Surge 托管,命令是:

bunx surge . subdomain.domain.ip6.arpa

选 Surge 是因为它默认用纯 HTTP 服务自定义域名,不强制跳 HTTPS,正好绕开下面这道坎。

卡点:HTTPS

只是做 DNS 实验的话,到这里就跑通了。当成真网站用是另一回事。

现代网站离不开公网 HTTPS,而公网 HTTPS 依赖浏览器和操作系统预置信任的 CA。CA 签发证书要遵守 CA/Browser Forum 的 Baseline Requirements。

2025 年 11 月,CA/B Forum 通过了 Ballot SC-086v3(Sunset the Inclusion of IP Reverse Address Domain Names),由 DigiCert 提出,Apple、Opera 附议。它规定:自 2026 年 3 月 15 日起,公开信任的 TLS 证书中不得再包含以 IP 反向区域后缀(in-addr.arpaip6.arpa)结尾的域名。理由很直接:.arpa 是基础设施命名空间,不是用来放主机名的。

在这之前,一部分 CA(尤其是对 .arpa 一向谨慎的几家)已经会拒签这类名字,SC-086 只是把它变成硬性规定。

结果就是:

something.ip6.arpa   ✗  拿不到公网信任的证书
example.dev          ✓  正常签发

自签证书或内部 CA 在自己可控的环境里能用,但普通访客的浏览器不认,会红屏警告。

另外还有几个连带的坑:

  • DNSSEC 到这里是断的。deSEC 会给区域签名,但信任链要接上,得让父区(HE)给你的委派发一条 DS 记录,而 HE 的 rDNS 界面根本没有填 DS 的地方,于是这块区域成了签了名却没人验证的孤岛。
  • HSTS preload 列表、公共后缀列表这类生态设施不会收录这种名字。
  • 控制权不稳。这段命名空间归你管,前提是 HE 隧道还活着、前缀还在你名下,隧道一停或者前缀被收回它就没了,严格说它从来不属于你。
  • 第一次访问时如果记录还没配好,解析器会缓存一条 NXDOMAIN,之后得等 TTL 过期才能好。

什么时候值得做

要真拿它建博客、部署 SaaS、做项目主页,没必要。普通的 .dev.page 域名更省事,很多平台还连域名带 HTTPS 一起免费给,犯不着为一串奇怪的地址折腾。

但如果是想搞清楚 IPv6 前缀、正向和反向 DNS 的区别、DNS 委派怎么把一个子区切出去、一块命名空间怎么被逐级管理,那这一圈走下来挺值。平时分开学的几个概念,在这里被串成一条链,而且每一步都能自己动手验证。

一点体会

走完这一圈,我印象最深的是:IP 地址空间本身也是一块 DNS 命名空间。平时用的是 域名 → IP,反向 DNS 是 IP → 域名,IPv6 的地址空间又大到让这棵反向树变得非常深。加上委派机制之后会发现,很多看起来只是一串字符的域名,背后是一整套逐级下放的管理关系。ip6.arpa 就是这套关系里一个不常被人翻到的角落。

参考

关于

关注我获取更多资讯

月球基地博客公众号二维码,扫码关注获取更多 AI 与编程资讯
📢 公众号
月球基地博客作者个人微信二维码,扫码交流 AI 与编程话题
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计