域名现在可以通过 DNS 声明其正在出售。
A domain can now say it is for sale, in DNS

原始链接: https://specification.website/spec/foundations/for-sale-dns/

RFC 10023 引入了一种标准化的 DNS 惯例,旨在无需停放域名或替换现有内容的情况下,标示域名处于待售状态。域名所有者只需发布一条 `_for-sale` 的 TXT 记录(例如 `_for-sale.example.com`),即可直接向经纪人和自动化服务传达域名的可用性、价格或联系 URI。 与传统的域名停放不同,此方法允许现有的网站和服务保持完全正常运行。该记录主要用于机器可读的发现,而非供人类浏览器使用。实现时需遵循特定格式:必须包含 `v=FORSALE1;` 标签,后跟一个属性(例如用于价格的 `fval` 或用于联系的 `furi`)。若需包含多项详细信息,所有者应在同一 DNS RRset 中发布多条记录,而非将其挤入单条记录中。 安全性和可靠性的关键要求包括:使用较短的 TTL(≤3600 秒)、通过 DNSSEC 对区域进行签名以防止伪造,并确保在域名不再可售时立即移除该记录。此惯例填补了 WHOIS 数据与实际可用性之间的空白,为域名收购提供了一种透明且非侵入式的渠道。

一项新的技术规范(RFC 10023)现已允许域名所有者直接在 DNS 记录中正式标示其域名处于在售状态。 尽管该提案旨在规范潜在买家发现域名可用性的方式,但在 Hacker News 上却引发了质疑。批评者认为,该工具主要惠及“域名抢注者”,且如果所有者未能及时更新记录,它可能会变得毫无用处。 讨论还强调了公开广告宣传域名出售所带来的法律风险。一位用户分享了其 90 年代末的个人经历,指出当时律师建议不要将域名列为“出售”,以避免在商标仲裁中败诉,因为此举可能被视为所有者对该名称没有合法权益的证据。最终,评论者对该规范的实际效用表示怀疑,质疑其是否比现有的着陆页广告方式有实质性的改进。
相关文章

原文

What it is

_for-sale is a reserved DNS leaf node name, defined by RFC 10023 (Informational, July 2026) and registered with IANA. A TXT record published at _for-sale.example.com signals that example.com, although registered and resolving normally, is available for purchase.

_for-sale IN TXT "v=FORSALE1;furi=https://example.com/for-sale"

The record carries a mandatory version tag followed by at most one tag=value pair:

Tag Meaning Example
ftxt= Free human-readable text ftxt=Eligibility criteria apply.
furi= Contact or information URI furi=mailto:[email protected]
fval= Asking price, currency + amount fval=EUR2500.00
fcod= Proprietary code, by prior agreement fcod=XX-aHR0cHM...

The wrong belief to clear first is that this is a way of parking a domain. It is close to the opposite. Parking replaces the site with a sales page, which costs you every visitor the domain still has. _for-sale sits beside a live site in DNS and says nothing to a browser: the homepage keeps serving, the mail keeps flowing, and the record can be added and removed at will. RFC 10023 makes the point explicitly — the convention is designed to work while the domain is still in active use.

It is also not the same thing as registration data. WHOIS and RDAP answer “is this name registered?”; a registered name may still be purchasable, and an unregistered one may not be worth having. That gap is the whole reason the convention exists, and it is why brokers and automated availability services are the intended audience rather than people.

Why it matters

The signal a domain owner most wants to send is the one there has never been a channel for. If you are willing to sell, the interested buyer has no way to learn that short of a cold email to a WHOIS contact that privacy redaction has probably removed. Enquiries that would have been welcome never arrive, and the ones that do arrive are indistinguishable from spam.

Putting the signal in DNS rather than on the page is what makes it useful to the parties who can act on it. A broker or an availability service checking a name resolves it anyway; one extra lookup tells them what a rendered page could not, because nothing on a working homepage says “the domain under this is negotiable”. It is externally checkable, costs one record, and carries no risk to the site itself — a browser never sees it.

How to implement

Publish a single TXT record at the _for-sale leaf of the zone you are selling, and only while you mean it.

; Free text
_for-sale IN TXT "v=FORSALE1;ftxt=Serious offers only"

; A URI to negotiate through — https, mailto and tel are the usable schemes
_for-sale IN TXT "v=FORSALE1;furi=https://example.com/fs?d=eHl6"

; An asking price: uppercase currency code, then the amount
_for-sale IN TXT "v=FORSALE1;fval=USD12500"

Rules worth getting right the first time:

  • The version tag is mandatory and case-sensitive: every record starts v=FORSALE1;. It exists so a processor can tell a real _for-sale record from an unrelated TXT record that a DNS wildcard happened to expand into that name.
  • One tag-value pair per record. To publish a price and a contact URI, publish two records in the same RRset and let the processor pick what it understands. This is not SPF; the pairs do not concatenate.
  • One character-string per record, 255 octets maximum, so nothing has to be reassembled during parsing.
  • Keep the TTL at 3600 seconds or less. A stale record advertising a price you have withdrawn, or a domain you already sold, is worse than no record.
  • Place it at a leaf. _for-sale.example.com is valid at any level of the tree, but xyz._for-sale.example.com is not, and records under .arpa must be ignored — an offer to sell address space is out of scope.
  • Remove it when the domain is no longer for sale. The convention has no “not for sale” value; absence is the only way to say no.

Sign the zone with DNSSEC if you can. An unsigned TXT record asserting your domain is for sale, at a price, with a contact URI, is a comfortable thing for someone else to forge.

This site does not ship a _for-sale record: specification.website is not for sale.

Common mistakes

  • Cramming several pairs into one record. "v=FORSALE1;fval=EUR2500;furi=https://…" looks reasonable and is not what the format defines. Use one pair per record, multiple records per RRset.
  • Publishing it aspirationally. The indicator is only for domains actually available. It is not a marketing banner, and a record that exists to lure enquiries is an abuse the RFC calls out by name.
  • Assuming it obliges anyone. Publishing the record does not commit the holder to sell, and an advertised fval= price is indicative — the RFC tells processors to display a disclaimer and never to treat it as a purchase commitment.
  • Expecting a wildcard to cover a whole zone. _for-sale.*.example.com is not a valid wildcard. There is no way to put every domain under a TLD up for sale with one record.
  • Trusting the content. If you are on the reading side, ftxt= is attacker-controlled text and furi= is an attacker-controlled URI. Sanitise before display — the RFC’s own example content is <script>...</script> — and never auto-navigate a user to a furi= target without an explicit confirmation step.

Verification

dig +short TXT _for-sale.example.com
  • The answer begins with v=FORSALE1; and contains at most one tag=value pair per string.
  • The TTL is 3600 or lower: dig TXT _for-sale.example.com | grep _for-sale.
  • If the zone is signed, dig +dnssec TXT _for-sale.example.com returns a validating RRSIG.
  • The record resolves at all. During a redemption or pendingDelete period, or when DNSSEC validation is bogus, the name will not resolve and the signal silently disappears.

Related topics

Sources & further reading

联系我们 contact @ memedata.com