做开源的人常以为域名只是顺手注册的小事,直到有一天你发现 .com 不见了。

那个被标价 5000 美元的 .com 后来怎么样了

一个长期维护的 Vue 3 组件库,文档站一直挂在 vue-comp-lib.com。续费邮件被忽略后,域名掉落,抢注者两天内完成解析并改了 whois。对方拿着原始 npm 包里遗留的旧链接与 GitHub Issue 里的引用截图,在 Discord 私信报价 5000 美元。经过一轮砍价,最终以 2000 美元成交,全程通过 Escrow 走完。

这套打法并不靠运气。他们用脚本扫 npm 包的 homepage 字段,再对 GitHub 上星标过千且近期仍有 commit 的项目批量查 whois history,最后把已过期但 SEO 权重尚存的域名筛成名单。页面一上线就收录进 Google,开发者搜索“某组件库 + 官网”时,钓鱼镜像反而排在前面。

expired domain monitoring script automation

凌晨两点跑的脚本,背后是一整套流水线

你可能会好奇,这群人到底是怎么发现你的域名刚好过期的?不是靠缘分,是一整套自动化流水线。

市面上有现成的过期域名监控服务,比如 ExpiredDomains.net 这类聚合站,每天凌晨更新释放列表。抢注者不会手动翻——他们写脚本,把条件筛得很细:只挑那些在 npm registry 里 homepage 字段存在、且 GitHub 仓库最近 3 个月仍有 commit 的域名。一套 Python 脚本加上 whois 库,凌晨 2 点跑一轮,能捞出几十个目标。

拿到名单后,第二步是抢注。域名从“过期”到“真正释放”之间有一个 Redemption Grace Period,一般是 30 天,之后进入 5 天的 Pending Delete 状态。抢注平台比如聚名网、NameJet、SnapNames,在你填好预算后,会在域名删除瞬间用批量 API 提交注册请求。成本多少?一个 .com 域名注册费大约 60-70 元人民币,加上抢注服务费,总共不到 150 块。

抢到之后立刻做三件事:改 whois 到隐私保护,把 DNS 解析到一台装了 Nginx 的服务器上,然后用 Let's Encrypt 签个免费证书。至此,你原来的 .com 就成了别人的资产。

报价策略很有意思。他们不会一上来就喊天价。先查这个项目的 GitHub 赞助页、OpenCollective 页面,估一下项目大概有多少资金流水。再翻一下 npm 包下载量,判断开发者是否有付费意愿。最后根据这些数据开价——有些小项目报 800 美元,遇到那种几千星而且文档站流量大的,直接报 5000 美元。砍价空间通常在 30% 到 50% 之间。

交易走的是 Escrow.com 或者第三方担保平台,双方都付手续费。抢注者会主动承担这部分费用,降低你的戒心。整个链条从发现到收款,周期大概一周,净利润几千美元。

这套玩法的恶心之处,不在于那几百块钱的标价,而是精准捅在了开源项目最大的软肋上——域名续费这事儿,根本没人全职盯着。核心维护者可能在三个时区之间连轴转,续费通知早就淹没在垃圾邮件里了,又或者那张绑过期的信用卡一直没人去换。漏洞就这么明晃晃地躺在那。

如果说域名倒卖还只是“捡漏”,那把项目名字一起注册成商标,就是直接把刀架在维护者脖子上了。

trademark extortion open source developer letter

商标敲诈:当“合法”的大棒砸向开源项目

很多前端维护者以为丢了 .com 顶多重构官网,直到收到一封挂号信。对方把商标注册证编号贴在附件里,咬死你在“同类软件服务”上使用了相同名称,构成侵权。解决办法只有两条:要么花几倍价格买下商标,要么彻底改名。别觉得这是危言耸听,npm 上有个 CSS 框架就撞上了。原本叫 ColorSpace,域名过期被盯上后,抢注者顺手在中国和美国提交了文字商标申请,类目覆盖“计算机软件”。等到维护者发现,异议期已经过了。

域名仲裁还能靠 UDRP,证明你有在先权利就能拿回来。商标一旦注册成功,举证责任就落到你头上。你得翻出三年前的 GitHub commit,证明这个名字最早是你起的。问题是,很多人早期根本没做商标布局。抢注者算准了这一点,专门挑那些 star 上千但没公司主体的项目下手。这样既不怕原作者反诉,又能精准找到付费能力最强的目标。

ColorSpace 那个案子,成交价是 4200 美元。抢注者开价 5000,砍价过程中故意透露“已经有两家设计 agency 询价”。维护者团队投票,觉得重构品牌成本更高,只能认栽。钱走的是 Escrow.com,手续费由买家承担,看起来挺“诚意”。可谁能想到,三个月后,同一个抢注者又注册了一个相似发音的域名,继续发邮件。这次他要卖的不是域名,而是“避免再次被搞”的保护费。

信息差与心理战:为什么开发者总是中招

很多人觉得奇怪:一个域名过期,怎么就能让人乖乖掏钱?

核心原因其实就四个字——信息不对称。

你不是不知道域名到期,你是不知道谁在盯着它。

抢注者用脚本每天扫 whois 记录,专挑那些“过期但还能赎回”的宽限期窗口下手。你这边可能还在想“下周再续”,那边已经自动下单了。

时机选得刚刚好。ColorSpace 的维护者在推特上预告了 3.0 大版本更新,连 RC 版本都发了。结果第二天,域名抢注的邮件就进来了。发件时间精确到 UTC 上午 9 点,正好是欧洲上班时间。邮件的措辞很微妙:“我们理解你在准备发布,不想在这个节骨眼上改官网域名吧?”没有威胁,没有脏话。就像在说“我帮你算过了,你现在换域名成本更高”。这就是他们最熟练的心理战术——在维护者压力最大的时刻报价。新版本、融资、开发者大会演讲前一星期,全是黄金窗口。

大量交易发生在水面下。有个 React 生态的组件库,域名过期后直接被抢注。维护团队在 GitHub 上讨论了一周,最后决定不公开这件事。为什么?怕用户觉得项目“不靠谱”,域名都能丢;怕企业用户因此放弃采购授权;怕被竞争对手拿来当负面案例宣传。他们私下凑钱买回了域名,花了 3200 美元。全程没有发一条声明。抢注者吃准的就是这点:开源项目靠的是社区信任,而信任这东西,一旦在公开场合被质疑是“运营不善”,修复成本远高于赎金。

研究过域名过期机制的人就知道,这事根本不需要多高深的黑客技术。有些注册商确实会给 30 天宽限期,但邮件提醒通常只发一次——而且往往是发到你那个被公司安全网关直接吞掉的工作邮箱里。等你某天突然发现项目打不开了,域名已经进了“赎回期”,赎回价 80 到 150 美元不等。那边早就卡着时间点,花几十块注册费拿下,转头就给你报个几千的价。说穿了,他们就是把域名过期到删除这段时间表背得比你还熟,而你连绑定的信用卡过期了都没注意到。

一个前端项目的域名,背后绑的是 CI/CD 的文档站、CDN 的资源引用路径、npm 包 README 里的链接。一旦换掉,所有引用全断。开发者不是不想反抗,是反抗的成本太高。

那年我把一个小型 JavaScript 工具库的域名落在了 Gandi,想着续费提醒总会发到邮箱。结果新版本发布当天,访问文档站直接 403。查 whois,状态从 expired 跳到 transferred,前后不到 48 小时。对方开价 3000 美元,附赠一句“我们也准备做同名框架,不想耽误你发布”。那一刻比愤怒更让人发凉的是空白——CI 里硬编码的 CDN 源、README 里的演示链接、issue 模板里的站点引用,全指着这个域名。

那次仲裁失败后,我学到的事

我先试着走 ICANN 的统一域名争议解决政策(UDRP),把仓库历史、发布节奏、npm 下载量堆成证据,证明我在先使用。对方回了一封“我们也是开发者,正在开发同名项目”的邮件,顺手贴了张空仓库截图。仲裁员最终认定:同名项目存在,无法证明对方恶意。后来我才知道,对方卡在赎回期刚结束那天过户,注册商甚至没触发自动续费回滚。

// CI 里散落的硬编码
scripts:
  - name: deploy-docs
    run: |
      npx vuepress build && \
      aws s3 sync .vuepress/dist s3://<old-domain>/docs/

改域名不只是换个地址。CDN 资源路径变了,CORS 白名单得重配,最疼的是搜索引擎。过去两年沉淀的 /guide/、/api/ 页面权重清零,Google 收录掉了 60% 以上。社区里有人问“是不是换团队了”,这种信任裂缝比流量损失更难补。最后我把主站迁到了 .io,顺手把旧域名指向 301,但直到今天,仍有老用户在 issue 里贴错链接。

吃了那次亏之后,我挨个排查了手上所有项目域名的注册状态。结果比想象中还难看:三分之一绑的是个人邮箱,一半没有开启自动续费,还有两个连注册商控制台的二次验证都没开。后来跟几个同样被坑过的朋友聊,发现大家补救的套路其实差不多。不是什么高深技巧,就是一些日常琐事,但做到了就是能挡掉九成的麻烦。

别让域名的续费周期变成一个黑盒。我现在的做法很简单:所有项目域名统一用一个账户管理,比如 Namecheap 或 Cloudflare,不开自动续费的就直接发警告邮件给自己。注册时顺手把 .com、.org、.io 一次买三四年,打开自动续费,绑定信用卡设好余额预警。域名锁定服务一定要开。注册商提供的 Registry Lock 或 Transfer Lock 不是摆设,它能在你忘记续费后多留几天缓冲期,而不是立刻跳进赎回期。我有个朋友就是因为开了这个功能,在域名过期后第 5 天被邮件提醒,赶在抢注脚本扫到之前续上了。

前端圈很多人觉得商标是法务的事,跟自己没关系。但你在 npm 上挂了一个包,发布了一堆文档,社区里有了口碑,这时候你的项目名称就已经是事实上的商标了。如果别人抢在你前面去 USPTO 或者中国商标局注册,回头反咬你侵权,仲裁流程走下来几个月,项目节奏全被打乱。我后来给手头两个活跃项目都申请了商标,费用其实不高。美国商标注册大概几百美元,中国这边几千块人民币,比被敲诈那 3000 美元便宜多了。关键是提交之后,对方再拿“同名项目”来要挟时,你的在先使用证据就硬气很多——UDRP 仲裁里,在先商标权利比单纯的使用历史更有分量。

如果真的发现域名被抢注,第一反应不是去砍价。先把 whois 记录、对方发来的所有沟通邮件、GitHub 仓库的创建时间戳和提交历史都截好图。然后,走 UDRP 仲裁。流程是有点慢,大概两三个月,但费用比直接赎域名低得多——仲裁费千把美元,对方不回应就直接判给你。社区里其实可以建一个共享预警群。我认识的几个开源作者拉了个 Telegram 频道,谁家的域名快到期了就在里面喊一声。有人忘记续费,别人发现后可以帮忙提醒。这种事一个人盯不过来,但一群人相互看着,抢注者就很难找到下手窗口。

域名这玩意儿跟代码完全是两码事。代码搞砸了能回滚,域名要是被人抢注,人家站住了就是站住了。花半天时间把注册商锁好、续费设成自动、商标该申请就申请——这些破事儿做起来烦,但凌晨三点收到抢注邮件的时候,你至少能少骂一句脏话。