Skip to content

필사 모드: 域名如何自己说「我在售」 —— DNS 是从什么时候起变成承载主张的通道的

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

打得开的域名其实是在售的

你想要的域名已经被注册了。打开一看,网站也好好地显示着。到这里一般人就放弃了。可其中相当一部分,其实是有意出售的。

问题在于机器没有办法知道这件事。人可以去找网站上写的联系方式发封邮件,但域名搜索工具或注册商没法对几百万个域名都这么干。注册信息里也不会写着出售意愿。「已注册」和「愿意卖」是两个层次的信息,而后者一直没有地方安放。

DNS 早就在做名称解析以外的事

这个问题的答案最近以 RFC 的形式出现了,而比答案本身更有意思的是答案被放在了哪里。是 DNS。

我们学到的是,DNS 是把名字变成地址的系统。可在真实运维里,我们往 DNS 里塞的东西有相当一部分并不是地址。我们写下哪些服务器可以用这个域名发邮件,写下验证签名要用的公钥,写下哪些机构可以为这个域名签发证书,还会为了拿到证书而短暂地放上一份「我控制着这个域名」的证据。

这些东西的共同点是,它们全都是关于这个域名的主张。而且这些主张被放在了只有域名所有者才能写的位置上。DNS 真正提供的东西,与其说是名称解析,不如说更像一块只有域名所有者能写、所有人都能读的全球公告板。

下划线名字在做的事

这块公告板能互不冲突地运转下去,靠的就是下划线。

TXT 记录什么内容都能装,所以当一个域名上混着多种用途的 TXT 时,读的一方必须打开内容才能挑出属于自己的那条。把这个问题理顺的是 2019 年的 RFC 8552。这份文档立下的规则是:按用途设立以下划线开头的子节点,只有该节点之下的记录才按这个用途来解释。它还在 IANA 建立了下划线节点名的注册表,让它们彼此不重叠地被管理起来。

选用下划线的理由才是关键。主机名规则不允许下划线。所以以下划线开头的名字,绝不会与任何真实主机冲突。早已广泛使用的 _dmarc_domainkey_acme-challenge 这些名字,就这样被纳入了这条规则之下。

RFC 10023 定义的记录

这次新增的是 RFC 10023。它是 SIDN Labs 的 Marco Davids 撰写的信息类文档,于 2026 年 7 月发布。名字是 _for-sale

它的工作方式是这样的。如果你有意出售 example.com,就在 _for-sale.example.com 上放一条 TXT 记录。原来的域名照常工作。网站照常显示,邮件照常收发。只是在旁边多挂了一个信号。

记录的内容是一个 255 字节的字符串片段,并且必须以版本标签开头。之后最多只能再附加一个标签值对。

_for-sale IN TXT "v=FORSALE1;"
_for-sale IN TXT "v=FORSALE1;ftxt=Call for info."
_for-sale IN TXT "v=FORSALE1;furi=https://example.com/foo%20bar"
_for-sale IN TXT "v=FORSALE1;fval=EUR999"
_for-sale IN TXT "v=FORSALE1;fval=BTC0.000010"

像第一行那样只有版本、没有标签的形式也是有效的。它只宣告有出售意愿,其余什么都不说。

四个标签和那些约束

定义的标签有四个。

标签用途格式
fcod处于合作关系的当事方之间使用的私有代码1 到 239 字节
ftxt供人阅读的自由格式文字1 到 239 字节
furi指向更多信息的 URI一个 URI。推荐 http、https、mailto、tel
fval期望价格货币代码加金额,形如 USD750BTC0.000010

约束在规范里也写得很清楚。一条记录里的标签值对不能超过一个。通配符形式不符合规格。缓存有效时间推荐在 3600 秒以内。而写入「无意出售」之类的内容,会被视为无效用法。

价格用的是货币代码而不是货币符号,这一点也值得留意。符号在各国之间会重叠、还会引发字符集问题,而代码不会。看着像个小决定,在自动处理这一侧却是很大的差别。

这种做法便宜的原因

这套设计之所以有吸引力,在于它什么都不动

它没有新造记录类型。真造了的话,解析器、权威服务器和管理工具就全都得跟着适配。取而代之的是,直接用早已到处都能跑的 TXT。协议也不改。而且对原域名的运行没有影响。它安静地挂在一个活着的站点旁边,等你不想卖了,删掉就完事了。

这也是下划线通道一直被沿用的原因。部署一项新功能最便宜的办法,就是把它叠在所有人都已经部署好的东西上面。邮件认证是这样传播开的,证书签发验证也是。

以及这种做法给不了信任的原因

便宜是有代价的。这条通道上承载的一切,都是未经验证的自我主张。除了「控制着这个域名」之外,它什么都不保证。

RFC 10023 在这一点上坦率得令人意外。光看安全一节里点出的风险就够了:把值原样输出到页面上可能变成脚本注入或查询注入;可以利用同形异义字符或双向文本欺骗读到该值的人;furi 指向的地方可能是恶意站点;还可以写一个低得离谱的价格来诱骗买家。所以文档建议,处理方必须对值做净化并核查 URI 的信誉,同时一并展示「价格仅供参考、应向卖方确认」这类提示。

还有一条最明确的禁令。即便遇到了 furi 的内容,也不得在没有用户明确确认的情况下自动跳转。一旦你把用户直接送往 DNS 记录里写的地址,那么临时拿到这个域名的人就能决定那条链接的落点。

隐私方面的风险文档也直接写了。公开出售意愿这件事本身就是信息的暴露,而写上去的联系方式会被收集、成为垃圾信息的目标。

如果要挂在自己的域名上

归纳一下,清单是这样的。

  1. 只在真的想卖的时候才挂。 规范就是这么定的。
  2. 把缓存有效时间设短。 推荐 3600 秒以内。为了避免自己改了主意、却还被整天当作在售来广告,这是必要的。
  3. 新开一个联络方式。 不要写现有的工作邮箱。写进公开记录里的地址会被收集。
  4. 慎重决定要不要写价格。 信息类 RFC 只规定格式,不会替你决定谈判策略。写下去的数字会变成上限。
  5. 如果你做的是读取方,就禁止自动信任。 不要原样渲染取到的值,不要加入自动跳转,并在界面上标明这条信息只是卖方的一面之词。
  6. 不想卖了就删掉。 只要删掉记录信号就消失,这是这套做法最大的优点。

小结与出处

把这份 RFC 只当成一份关于域名交易的文档来读,它就显得很小。更值钱的部分是那个模式。在已部署的基础设施之上叠一个下划线名字来承载新含义,这种做法有多便宜、以及作为代价它有多缺乏信任,一份文档里两面都摆了出来。当你在内部系统里感到同样的诱惑时,请把这两面放在一起看。

현재 단락 (1/44)

你想要的域名已经被注册了。打开一看,网站也好好地显示着。到这里一般人就放弃了。可其中相当一部分,其实是有意出售的。

작성 글자: 0원문 글자: 3,144작성 단락: 0/44