메뉴
HN
Hacker News • 48일 전

DNS에 도메인 판매 등록 가능, '_for-sale' 표준 도입

IMP
7/10
핵심 요약

RFC 10023을 통해 도메인이 활성화된 상태를 유지하면서도 '_for-sale'이라는 DNS TXT 레코드로 매물임을 알릴 수 있는 새로운 규약이 도입되었습니다. 이는 도메인 파킹(parking) 페이지 없이도 중개업자나 자동화 시스템이 해당 도메인의 판매 여부, 희망 가격, 연락처를 기계적으로 확인할 수 있게 해주어 도메인 거래의 효율성을 크게 높입니다. 사이트 운영에 전혀 영향을 주지 않는 것이 가장 큰 장점입니다.

번역된 본문

무엇인가 _for-sale은 RFC 10023(2026년 7월, 정보성 문서)에 정의되고 IANA에 등록된 예약된 DNS 리프(leaf) 노드 이름입니다. _for-sale.example.com에 게시된 TXT 레코드는 example.com이 정상적으로 등록되고 작동 중이지만 구매할 수 있음을 알립니다. _for-sale IN TXT "v=FORSALE1;furi=https://example.com/for-sale" 이 레코드는 필수 버전 태그를 포함하며, 이어서 최대 하나의 tag=value 쌍을 가집니다:

  • ftxt= (사람이 읽을 수 있는 자유 텍스트. 예: ftxt=자격 요건이 적용됩니다.)
  • furi= (연락처 또는 정보 URI. 예: furi=mailto:hq@example.com)
  • fval= (희망 가격, 통화 및 금액. 예: fval=EUR2500.00)
  • fcod= (사전 합의된 고유 코드. 예: fcod=XX-aHR0cHM...)

먼저 오해를 풀어야 할 부분은, 이것이 도메인 파킹(parking)의 한 방식이라는 잘못된 믿음입니다. 이는 오히려 정반대에 가깝습니다. 파킹은 사이트를 판매 페이지로 대체하여 도메인에 여전히 들어오는 모든 방문자를 잃게 만듭니다. 반면 _for-sale은 DNS에서 작동 중인 실제 사이트 옆에 조용히 존재하며 브라우저에는 아무것도 표시하지 않습니다. 홈페이지는 계속 서비스되고 이메일은 계속 흐르며, 이 레코드는 원할 때 자유롭게 추가하고 제거할 수 있습니다. RFC 10023은 이 점을 명확히 강조합니다. 이 규약은 도메인이 여전히 활발히 사용 중일 때 작동하도록 설계되었습니다. 또한 등록 정보(WHOIS)와 같지 않습니다. WHOIS와 RDAP는 "이 이름이 등록되었는가?"에 답하지만, 등록된 이름이라도 구매할 수 있으며 미등록 이름은 소유할 가치가 없을 수 있습니다. 이러한 간극이 바로 이 규약이 존재하는 전체적인 이유이며, 사람보다는 중개업자와 자동화된 도메인 가용성 서비스가 주요 대상입니다.

왜 중요한가 도메인 소유자가 가장 보내고 싶어 하는 신호는 역설적으으로 그것을 전달할 채널이 그 어디에도 없었습니다. 판매 의향이 있더라도, 관심 있는 구매자는 개인정보 보호에 의해 삭제되었을 가능성이 높은 WHOIS 연락처로 콜드 이메일을 보내는 것 외에는 도메인 소유자의 의향을 알 방법이 없습니다. 환영받았을 문의는 결코 도착하지 않으며, 도착하는 문의들은 스팸과 구별할 수 없습니다. 페이지가 아닌 DNS에 신호를 넣는 것이 바로 이 신호를 활용할 수 있는 당사자들(중개업자 등)에게 유용하게 만드는 핵심입니다. 도메인 이름을 확인하는 중개업자나 서비스는 어차피 DNS를 조회하므로, 추가 조회 단 하나만으로 웹페이지를 렌더링해서는 알 수 없었던 정보를 얻게 됩니다. 정상 작동하는 홈페이지 어디에도 "이 도메인은 협상 가능합니다"라는 문구가 없기 때문입니다. 이는 외부에서 프로그래밍 방식으로 확인 가능하고, 단 하나의 레코드 비용만 들며, 사이트 자체에는 아무런 위험도 초래하지 않습니다(브라우저는 이를 절대 보지 않으므로).

구현 방법 판매할 영역(Zone)의 _for-sale 리프에 단일 TXT 레코드를 게시하되, 실제로 판매할 의향이 있을 때만 게시하십시오. ; 자유 텍스트 _for-sale IN TXT "v=FORSALE1;ftxt=진지한 제안만 받습니다" ; 협상을 위한 URI — https, mailto, tel 스키마 사용 가능 _for-sale IN TXT "v=FORSALE1;furi=https://example.com/fs?d=eHl6" ; 희망 가격: 대문자 통화 코드, 금액 순서 _for-sale IN TXT "v=FORSALE1;fval=USD12500"

처음부터 지켜야 할 규칙:

  • 버전 태그는 필수이며 대소문자를 구분합니다: 모든 레코드는 v=FORSALE1;로 시작합니다. 이는 프로세서가 DNS 와일드카드로 인해 우연히 확장된 관련 없는 TXT 레코드와 실제 _for-sale 레코드를 구분할 수 있게 해줍니다.
  • 레코드당 하나의 태그-값 쌍만 허용됩니다. 가격과 연락처 URI를 모두 게시하려면 동일한 RRset에 두 개의 레코드를 게시하고 프로세서가 이해할 수 있는 것을 선택하게 하십시오. SPF와 같이 문자열이 연결되지 않습니다.
  • 레코드당 하나의 문자열, 최대 255 옥텯(Octet). 따라서 파싱 중에 재조립할 필요가 없습니다.
  • TTL(Time To Live)을 3600초 이하로 유지하십시오. 철회한 가격이나 이미 판매한 도메인을 광고하는 오래된 레코드는 레코드가 없는 것보다 더 나쁩니다.
  • 리프(leaf)에 배치하십시오. _for-sale.example.com은 트리의 모든 레벨에서 유효하지만, xyz._for-sale.example.com은 유효하지 않습니다. 또한 .arpa 하위의 레코드는 무시되어야 합니다. 주소 공간(address space) 판매 제안은 이 규약의 범위를 벗어납니다.
  • 도메인이 더 이상 판매 중이 아닐 때 레코드를 제거하십시오. 이 규약에는 "판매 불가(not for sale)"라는 값이 없습니다. 레코드의 부재가 유일한 '아니오'를 의미합니다.
  • 가능하면 DNSSEC으로 영역(Zone)에 서명하십시오. 서명되지 않은 TXT 레코드가 도메인이 연락처 URI 및 희망 가격과 함께 판매 중이라고 주장하는 것은 다른 누군가가 악용하기에 너무나 편리한 표적입니다.
원문 보기
원문 보기 (영어)
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:hq@example.com 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 DNSSEC DNS CAA records DNS for AI Discovery (DNS-AID) Well-known URIs Sources & further reading RFC 10023 — The "_for-sale" Underscored and Globally Scoped DNS Node Name — IETF RFC 8552 — Scoped Interpretation of DNS Resource Records through Underscored Node Names — IETF IANA — Underscored and Globally Scoped DNS Node Names registry — IANA