edgetunnel 被封记

edgetunnel 被封记

一、动机:免费的算力最贵

edgetunnel 是 GitHub 上很流行的一个开源项目,一份 _worker.js 部署到 Cloudflare,就能把 Workers/Pages 变成一个代理节点:VLESS、Trojan、VMess 都支持,自带订阅生成和管理面板。部署只要几分钟,不用买服务器,不用续费,带宽和算力全是平台的。

我自己的节点一直跑在自有 VPS 上,sing-box 加隧道,用了很久。这次纯属折腾心理:现成的轮子、免费的资源,试一把又不亏。项目建好、部署上线、节点能用,一切顺利得理所当然。

现在回头看,“免费"恰恰是这件事里最贵的部分——只是账单不以钱的形式寄来。

二、封禁:先封项目,再限账号

10 月 22 日,项目被 Cloudflare 封了,封禁代码 8000119,理由方向毫不含糊:这类把平台算力拿来做代理转发的工具,踩的是平台明文写着的红线。项目是我自己删的,删的时候还觉得事情就到此为止:一个测试项目而已,删了翻篇,主站和其他项目都好好的。

当晚晚些时候才发现没那么简单。账号被限制使用 Workers Builds——这是账号级的限制,不是项目级的。也就是说,处罚从"删掉那个项目"升级成了"这个账号新建和构建 Worker 的能力被冻住”。好在核查下来,影响面到此为止:博客照常部署(当晚新博文双站发布成功,就是实证),隧道、DNS 全部正常。

当晚 23:31,申诉信发了出去:说明项目已删除、不会再部署同类工具、账号里其余项目都是正经的个人项目,请求解除 Workers Builds 的限制。接下来只能等人工审核。

三、为什么改代码没用

事后认真看了一遍原版源码,也看了一个别人做的"改进版"(给原版打了十九处补丁:超时改流式计字节、登录失败计数挪进内存、日志脱敏、密码改常量时间比较,代码质量确实上了一个台阶)。结论一致:这些改动救不了它。

原因在于平台封的不是代码,是行为。

第一,流量指纹不变。这类工具的本质动作是 WebSocket 加 TCP 转发,运行时行为特征和源码长什么样无关。把源码 base64 一层再部署也没用:运行时必须先还原成明文才能执行,还原后的行为与原来一模一样,而"刻意混淆"本身在风控眼里是加分项——正经项目不需要藏。

第二,源码里写死的指纹太多。原版订阅转换的 UA 是明文一整句,带着项目名和仓库地址,每个请求都在自报家门;改进版更典型:专门搞了个"特征码字典",用字符拼接把项目名拼出来躲源码扫描,可拼完发出去的 UA 还是原样那一句。躲得过文本扫描,躲不过运行时。这种小聪明对人有效,对按行为判定的系统无效。

第三,默认口令这类硬伤和封号无关,但说明了这类项目的定位:它是给"部署完能跑就行"准备的,不是给"长期持有"准备的。拿它当长期基础设施,本身就是错配。

四、真正的账:账号里押着什么

这次最值得记的一笔,不是"某个项目被封",而是动手之前没算清账号里押着什么。

这个 Cloudflare 账号里,有主站博客的部署和全部 DNS 解析,有七台机器在用的隧道,有一堆跑了几个月的正经项目。edgetunnel 省下的是几美元一月的 VPS 钱,赌上的却是这一整套东西的托管平台。申诉信里那句"不会再部署",写的时候是承诺,冷静下来看是止损:重复违规的下一步是账号级限制升级,到那一步,丢的就不是一个玩具项目了。

对照之下,自有 VPS 上的 sing-box 从来没出过这种事。不是它技术更高明,而是它站在自己的地盘上:机器是自己的,规则是自己的,出了问题最坏是机器停机,不存在"被房主连人带行李请出去"。

五、结论

平台的免费资源从来不是免费的,它标价的方式是规则:你可以用,但只能用在它允许的事情上。想拿它的算力干它明文禁止的事,代码写得多漂亮、混淆做得多深,都改变不了判定的依据——行为。

所以这件事的最终处理很简单:申诉走完,项目不恢复,同类工具不再往这个账号里放。真要代理节点,自己的 VPS 上 sing-box 一直都在,老老实实付那几美元月租,买的是"没人能封你"。

折腾的价值在于把边界摸清楚。这次的边界摸得明明白白:别人的平台上,只能盖别人允许的房子。

评论