Cloudflare + DMIT + edgetunnel:一条可切换的双入口节点
本文记录一次完整落地:DMIT VPS 上的 VLESS 作为可控出口,Cloudflare Workers 上的 edgetunnel 作为边缘入口,FlClash 里两套节点并存。最后链式 SOCKS 验证通过,落地 IP 回到同一台洛杉矶机器。
公开前请轮换面板密码、UUID 和 SOCKS 账密。文中参数来自这次实测,仅作过程说明。
1. 要解决什么
需求很具体:
- 有一台 DMIT (洛杉矶),希望出口 IP 稳定、自己可控。
- 域名已在 Cloudflare ,希望必要时用 CDN/Workers 藏源站、走 443 。
- 客户端用 FlClash 和小火箭,不要两套互不相干的订阅。
后来又加了一层:能否「不靠自己的 2083 端口」进网,但仍从这台 VPS 出网。这就是 edgetunnel 链式代理要做的事。
最终形态:
客户端
├─ DMIT-直连 v.s7ea.com:2083 VLESS + WS + TLS 出口 = VPS
└─ CF-边缘 edt.s7ea.com:443 edgetunnel Worker
└─(可选) SOCKS5 → VPS:10808 出口 = 同一台 VPS
2. 环境
| 项 | 值 |
|---|---|
| VPS | DMIT ,Ubuntu ,密钥登录 |
| IPv4 / IPv6 | 45.59.186.107 / 2605:52c0:3:6a7:be24:11ff:fea2:929a |
| 直连域名 | v.s7ea.com (先灰云指源站) |
| Worker 域名 | 先 edgetunnel.zhoh2019.workers.dev,后绑 edt.s7ea.com |
| 面板 | 3x-ui + Xray |
| 边缘 | cmliu/edgetunnel ,fork 在 zhostev/edgetunnel |
| 客户端 | FlClash 、Shadowrocket |
3. 第一段:只做 VPS 上的 VLESS
方案是 VLESS + WebSocket + TLS ,端口 2083 ( Cloudflare 可反代的 HTTPS 端口),路径 /cfws。
顺序不能反:
- DNS 先灰云,A 记录指 VPS 。橙云会挡住 Let’s Encrypt 的 HTTP-01 。
- 安装 3x-ui 。3.8.5 会把订阅服务和面板抢同一个端口,把
subPort改走或关掉订阅服务。 - 解析未好时先自签证书,入站能起来;解析通了再用 acme.sh standalone 换 Let’s Encrypt 。
- 入站:VLESS 、2083 、TLS 、WS 、
/cfws、SNI/Host 均为v.s7ea.com,flow 留空。
直连分享链接形态:
vless://<UUID>@v.s7ea.com:2083?encryption=none&security=tls&sni=v.s7ea.com&fp=chrome&type=ws&host=v.s7ea.com&path=%2Fcfws#cf-vless
测通标准是访问 https://www.cloudflare.com/cdn-cgi/trace:
ip=2605:52c0:3:6a7:be24:11ff:fea2:929a
colo=LAX
loc=US
warp=off
出口是这台机器的 IPv6 ,不是本地 ISP 。
4. FlClash 的两个坑
FlClash 「添加配置」只有二维码、文件、URL 。
- URL 只要
https://订阅,不要vless://。把分享链接贴进去会报「必须为 URL 」,还容易把 UUID 截断。 - 单节点应走「从剪贴板导入」,或写一份 Clash Meta YAML 用「文件」导入。
直连节点在 Clash 里对应:
- name: DMIT-直连
type: vless
server: v.s7ea.com
port: 2083
uuid: <UUID>
network: ws
tls: true
servername: v.s7ea.com
client-fingerprint: chrome
ws-opts:
path: /cfws
headers:
Host: v.s7ea.com
小火箭可以直接吃 vless://,没有这个问题。
5. 第二段:加上 edgetunnel
edgetunnel 把 VLESS 入站放到 Cloudflare Workers / Pages ,不需要再买一台机器。它不是「没有服务器」,只是入站不跑在你的 Linux 上。出站默认走 Worker 自己的连接或项目内置的 ProxyIP 。
部署选择:
- Pages 上传 zip:适合不想碰 Git 的人。
- Pages 连 GitHub:适合以后要改代码。
- 本次实际生效的是 Workers 域名
*.workers.dev,再绑自定义域。
必做三项:
- 变量
ADMIN、建议固定UUID(与 3x-ui 同一枚)。 - KV 绑定的变量名必须是
KV,不是kv。命名空间叫什么无所谓,先在「存储和数据库 → KV 」里创建一个再选。 - 未配
ADMIN时,所有路径都会显示伪装页(例如 Welcome to nginx ),/admin也不例外。
面板起来后会出现「随机优选 16 个 CF IP 」。那是给 workers.dev 被干扰时换 Anycast IP 用的,和「出口锁定自己的 VPS 」是反着的。自用应改成自定义列表只留自己的域名,或直接「复制节点」。
6. workers.dev 通不了,要换自己的域名
FlClash 里一度出现:DIRECT 有延迟,Worker 节点全 Timeout 。原因不是 UUID ,是 *.workers.dev 在客户端网络里不稳定。
绑定 edt.s7ea.com 之后,从公网看:
- 解析到 Cloudflare Anycast
- 证书 SAN 包含
edt.s7ea.com /admin已是中文设置页
但面板会弹窗:**当前访问域名是 edt.s7ea.com,节点伪装域名仍是 workers.dev**。不改 HOST ,复制节点和订阅就会继续下发打不开的地址。
在「详细配置信息」把 HOST 改成 edt.s7ea.com 并保存。客户端的 server / SNI / Host 必须一致,路径用后台生成的,不要套用 VPS 上的 /cfws。
改完后 FlClash 出现:
DMIT-直连 225 ms
CF-边缘 196 ms
两条都绿。此时若走 CF-边缘看 cdn-cgi/trace,出口可能是:
ip=104.28.163.182
colo=AMS
loc=NL
说明 Worker 自己出网了,还没有回到 DMIT 。
7. 链式 SOCKS:从 Loop 到验证通过
为了让 CF-边缘的出口也是 VPS ,在 3x-ui 增加 mixed 入站( SOCKS5 + HTTP ),端口 10808 ,账密认证。Worker 作为客户端去连这个端口。
edgetunnel 「添加链式代理」里有一个容易踩的验证逻辑:
Worker → SOCKS → 再访问「优选」地址
「优选」若填 edt.s7ea.com 或 1.1.1.1,会绕回 Cloudflare 。Worker 运行时禁止再连 CF 自己的地址,报错:
TCP Loop detected, contact us if this doesn't seem right.
正确填法:
| 栏 | 值 |
|---|---|
| 优选 | 8.8.8.8(不要 1.1.1.1 ,不要自己的 Worker 域名) |
| 链式代理 | socks5 |
| 地址 | 用户:密码 @45.59.186.107:10808(端口不能省) |
验证通过时面板显示:
优选入口 8.8.8.8 → SOCKS5 → 落地 2605:52c0:3:6a7:…
地区 US ,约 540ms
落地 IPv6 与直连测速是同一台机器。链式比直连多一跳,延迟从约 200ms 升到约 540ms ,符合预期。
点「添加」保存后,再走 CF-边缘看 cdn-cgi/trace,目标是 ip 回到 VPS 、colo 靠近 LAX 。
若验证长期 Loop:可以放弃链式,两套节点分开用。公网再暴露 10808 收益有限。本次最后是验证通过,链式可以留作「 CF 入口 + VPS 出口」。
8. 客户端怎么组织
一份 YAML 足够:
proxies:
- name: DMIT-直连
type: vless
server: v.s7ea.com
port: 2083
# ws + tls + path /cfws
- name: CF-边缘
type: vless
server: edt.s7ea.com
port: 443
# ws + tls + path 用后台给出的,常见 /?ed=2560
proxy-groups:
- name: PROXY
type: select
proxies:
- DMIT-直连
- CF-边缘
- DIRECT
策略建议:
- 要稳定出口、流媒体、可控 IP:选 DMIT-直连。
- 2083 或源站 IP 被干扰:选 CF-边缘(已链式则出口仍是 VPS )。
- 不要用「随机优选 16 」那种自动选择组当主力,Timeout 时会整组挂掉。
- 全局模式下 DIRECT 探活变红可以忽略。
9. 排障备忘
| 现象 | 原因 |
|---|---|
| FlClash 「必须为 URL 」 | 把 vless:// 贴进订阅框 |
/admin 是 nginx 欢迎页 |
未设置 ADMIN,或 KV 变量名不是 KV |
| 列表里全是「 CF 官方优选」 | 开了随机优选,不是自己的域名 |
| workers.dev 节点 Timeout 、直连正常 | 换自定义域,并改面板 HOST |
| 自定义域能开后台,节点仍下发 workers.dev | HOST 未改 |
cdn-cgi/trace 在 AMS / 104.28.* |
Worker 未走 SOCKS |
| 链式报 TCP Loop | 优选填了 CF 地址或自身域名 |
| 链式验证通过但延迟高 | 正常,多一跳 |
10. 安全
- 3x-ui 面板不要长期裸奔在公网明文端口。
- SOCKS 10808 必须强密码;不用链式就关掉入站。
- UUID 、订阅 token 、SOCKS 账密不要写进公开 Git 。fork 仓库只放说明,机密放 Workers 变量。
workers.dev和订阅 URL 都相当于入口,token 泄漏等于节点泄漏。
11. 结论
可以合成,但不要幻想「一个 Worker 取代 VPS 」。
- VPS 提供出口质量和 IP 归属。
- Worker 提供 443 、CF 证书、自定义域、在
workers.dev不好用时的另一条入口。 - 链式 SOCKS 能把两条合成「同一出口」,代价是延迟和一次容易误报的 Loop 检测。
- FlClash 要用对导入方式,HOST 要和正在访问的域名对齐。
落地顺序压缩成一句:先灰云把 2083 跑通,再上 Worker 和自定义域,最后才考虑 SOCKS 回源。反过来排障