前几天在给网站做「防红域名」。解释下这个词:往微信里发站外链接,域名被举报多了,再打开就是「已停止访问」,俗称被标红。防红的思路是准备几个备用域名做跳转——主域名被封,换个备用域名把链接重新生成一遍,用户那边无感。
备用域名要耐用,主流玩法是轮询:池子里放若干个域名,链接换着挂在它们名下,封一个只死一份。查资料时,几乎每篇文章都默认你有一排域名。我下意识也准备去买。
买之前把服务器翻了一遍。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 被封了,只死它名下那一份。

盘点:先查 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.主域;

免费域名那条路,我劝你别走
你可能会说,不是有免费域名吗,eu.org 这类免费二级域,一分钱不花。我认真评估过,放弃了:
- 审批按周算,批下来运营节奏全乱了
- 没法备案,在微信的环境里天然低人一等
- 最要命的是信誉——免费域被灰产用烂了,在风控系统里的初始分就是负的。往防红池里掺这种域名,等于给整个池子下毒,别的域名陪着掉信任
判断标准一条就够:池子里的名字,要平时干净、随时能解析、封了可替换。免费域名三条只占半条。

有个代价得说清楚
子域池有个命门:防得住单个子域被封,防不住主域连坐。真被判到主域头上,7 个一起死。完整隔离只有独立域名池能给,每个几十块钱一年的那种。
我的取舍是先用子域池。起步阶段,主域出事的概率远低于某个子域被举报的概率;真到主域出事再买独立域名,来得及——域名随时能后补,链接发出去再换壳才是真麻烦。这个取舍对不对,我没法验证,只能赌主域比单个子域抗造。
对了,证书这套东西怎么查、续签翻车长什么样,我另写过一篇,SAN 怎么看里面也有。
现在提链还是手动从下拉框选域名,要做到每次访问自动换一个,还差改一处 JS。严格说,7 个域名位今天还不能自动轮。
但池子齐了。零成本。