不买一个新域名,我凑出了 7 个轮询域名

前几天在给网站做「防红域名」。解释下这个词:往微信里发站外链接,域名被举报多了,再打开就是「已停止访问」,俗称被标红。防红的思路是准备几个备用域名做跳转——主域名被封,换个备用域名把链接重新生成一遍,用户那边无感。

备用域名要耐用,主流玩法是轮询:池子里放若干个域名,链接换着挂在它们名下,封一个只死一份。查资料时,几乎每篇文章都默认你有一排域名。我下意识也准备去买。

买之前把服务器翻了一遍。7 个域名位凑齐了,一个都没买。

轮询到底轮什么

跳转站其实就一个 PHP 文件:备用域名收到 ?c= 参数,base64 解码出真实链接,校验白名单,然后 302 跳过去。

// 跳转页核心(简化)
$c = str_replace(' ', '+', $_GET['c']);  // base64 里的加号,URL 传输会变空格
$target = base64_decode($c, true);
// 校验 $target 的域名在白名单内,然后:
header('Location: ' . $target, true, 302);

被封禁封的是「接收方」,也就是 ?c= 前面那个域名。轮询轮的就是它:这批链接挂在子域 A 名下,下一批换子域 B,A 被封了,只死它名下那一份。

一张防红链接的跳转链路:备用域名接收参数、解码校验、302 跳回真实链接,被封就换池子里的下一个
一张防红链接的跳转链路:备用域名接收参数、解码校验、302 跳回真实链接,被封就换池子里的下一个

盘点:先查 DNS,再查证书

我原来以为加子域靠泛解析——DNS 配一条 *.主域,子域随便加自动生效。实测不是:

getent hosts abc123.主域   # 无输出,不解析
getent hosts pool1.主域    # 无输出,不解析
getent hosts pool2.主域    # 有 IP,解析正常

主域下已有的子域,是一条条手动加的。这反倒是好事:不用动 DNS 架构,控制台加条 A 记录,一个新域名位就到位。免费,只是费几次点击。

更意外的是证书。把主站证书拆开看:

openssl x509 -in fullchain.pem -noout -text | grep -A1 "Alternative"
# X509v3 Subject Alternative Name:
#     DNS:主域名, DNS:子域A, DNS:子域B, DNS:子域C ...

curl -sI https://pool2.主域/ | head -1
# HTTP/2 200 —— 证书是现成的,https 都不用另配

当年签证书时,主站的一串别名子域全被塞进了 SAN。也就是说这些子域不光解析通,https 都是现成的。前阵子给一个新子域配 443,正发愁证书,一查 SAN 里居然早就有它。

这套用命令实测的习惯,是上次查「61 次百度蜘蛛」那件事养成的——日志和命令不会骗人,想当然才会。

盘下来的账:6 个现成子域,加 1 个上周刚配的防红子域,7 个域名位。每个都过了三关:能解析、有证书、跳转站白名单放行。第三关是设计时留的口子——白名单写的是「主域的子域全部放行」,池子扩容一行代码不用改:

# nginx 侧,每接一个新域名就多一个名字
server_name jump.主域 pool1.主域 pool2.主域;
7 个域名位的资产盘点:DNS、证书、后台三关逐项核对
7 个域名位的资产盘点:DNS、证书、后台三关逐项核对

免费域名那条路,我劝你别走

你可能会说,不是有免费域名吗,eu.org 这类免费二级域,一分钱不花。我认真评估过,放弃了:

  • 审批按周算,批下来运营节奏全乱了
  • 没法备案,在微信的环境里天然低人一等
  • 最要命的是信誉——免费域被灰产用烂了,在风控系统里的初始分就是负的。往防红池里掺这种域名,等于给整个池子下毒,别的域名陪着掉信任

判断标准一条就够:池子里的名字,要平时干净、随时能解析、封了可替换。免费域名三条只占半条。

三条路线对照:独立域名、免费外域、主域子域池,成本与风险逐项比
三条路线对照:独立域名、免费外域、主域子域池,成本与风险逐项比

有个代价得说清楚

子域池有个命门:防得住单个子域被封,防不住主域连坐。真被判到主域头上,7 个一起死。完整隔离只有独立域名池能给,每个几十块钱一年的那种。

我的取舍是先用子域池。起步阶段,主域出事的概率远低于某个子域被举报的概率;真到主域出事再买独立域名,来得及——域名随时能后补,链接发出去再换壳才是真麻烦。这个取舍对不对,我没法验证,只能赌主域比单个子域抗造。

对了,证书这套东西怎么查、续签翻车长什么样,我另写过一篇,SAN 怎么看里面也有。

现在提链还是手动从下拉框选域名,要做到每次访问自动换一个,还差改一处 JS。严格说,7 个域名位今天还不能自动轮。

但池子齐了。零成本。

发表评论