内网穿透记录
域名:
websocket.zqyuan.xyz→ 本机localhost:3000
工具:Cloudflare Tunnel(cloudflared)+ Clash(全局模式 + TUN)
每次开机必做:三步启动清单
重要!每次重启电脑后,必须按顺序完成以下三步,网站才能正常使用!
第一步
启动 Clash(全局模式 + TUN)
-
打开 Clash
-
模式切换为 全局(Global)
-
确认 TUN 模式 已开启(System Proxy 也要开)
原因:GFW 对 Cloudflare 隧道域名(
argotunnel.com)有 DNS 污染,返回假 IP28.0.0.x。
不开全局+TUN,cloudflared 会连接超时,隧道无法建立。
第二步
启动 Cloudflare 隧道
打开 PowerShell,运行:
此处省略,以防个人隧道泄露
看到
Connection ... registered字样说明隧道建立成功
![]()
--protocol http2必须加,避免 QUIC 协议在代理下不稳定
保持此窗口不要关闭!
第三步
启动后端服务器
另开一个 PowerShell 窗口,运行:
此处省略,以防个人后端调用权限泄露
看到
前端服务已启动 http://127.0.0.1:3000说明后端正常
保持此窗口不要关闭!
访问网站 
三步完成后,任何设备打开浏览器访问:
https://websocket.zqyuan.xyz
在「
访问 Token」栏输入密码后点击连接即可。
系统架构说明
银尔达 DTU 硬件
└─ ws://websocket.zqyuan.xyz ← 无需 Token,硬件直连
│
▼
Cloudflare Edge(TLS 终止)
│
▼
cloudflared 本地隧道进程
│
▼
localhost:3000(Node.js 后端)
├─ 静态文件服务(前端页面)
├─ /api/ai-chat(DeepSeek AI 代理)
├─ /api/tts-auth(讯飞 TTS 鉴权)
└─ WebSocket Hub(消息广播中转)
│
▼
浏览器客户端
└─ wss://websocket.zqyuan.xyz?token=xxx ← 需输入 Token
核心逻辑:DTU 和浏览器都连接到同一个后端 WebSocket Hub,后端将任意一端的消息广播给其他所有连接端,实现硬件 ↔ 网页双向通信。
Token 鉴权说明
| 连接方 | 是否需要 Token | 说明 |
|---|---|---|
| 银尔达 DTU | 服务器地址填 ws://websocket.zqyuan.xyz 即可 |
|
| 浏览器用户 | 在「访问 Token」框输入密码后点连接 |
Token 密码:
此处省略,以防个人密钥泄露(保密!)
输错 Token → 后端直接拒绝连接,不会建立通信
关键文件位置
| 文件 | 路径 | 说明 |
|---|---|---|
| cloudflared | C:\Users\21906\Desktop\cloudflared.exe |
隧道程序 |
| 隧道配置 | C:\Users\21906\.cloudflared\config.yml |
隧道 ID 和转发规则 |
| 后端服务 | 上云\Web\backend\http-server.js |
HTTP + WebSocket Hub |
| 前端页面 | 上云\Web\frontend\ |
HTML/CSS/JS |
| 统一配置 | 上云\Web\config.js |
端口/地址配置 |
Cloudflare 隧道配置(config.yml)
tunnel: 7335ae97-51d1-481d-a562-025623c0d436
credentials-file: C:\Users\21906\.cloudflared\7335ae97-51d1-481d-a562-025623c0d436.json
ingress:
- hostname: websocket.zqyuan.xyz
service: http://localhost:3000
- service: http_status:404
常见问题排查
隧道连不上 / 28.0.0.x 报错
→ Clash 没开 全局模式 或 TUN 模式,切换后重启 cloudflared
隧道超时 / QUIC 失败
→ 运行命令加 --protocol http2 参数
网页打开是 Cloudflare 1033 错误
→ cloudflared 进程没在运行,执行第二步
网页可以打开但 WebSocket 连不上
→ 后端没在运行,执行第三步
Token 输对了还是连不上
→ 先清 Cloudflare 缓存(控制台 → 缓存 → 清除一切),再硬刷新浏览器(F12 开着 → 右键刷新 → 清空缓存并硬性重新加载)
连上后过一会自动断开
→ 后端有 30 秒心跳 ping,正常情况不会断。检查 Clash 是否还在全局模式
搭建过程踩坑记录
阶段一:弃用 LoCyanFrp
最初用 LoCyanFrp 做内网穿透,API 服务器 522/502 全挂,弃坑。
阶段二:Cloudflare Tunnel 下载地狱 
cloudflared.exe 下载屡次中断,winget 卡死、PowerShell WebClient 拿到 0 字节 HTML,
最终用 curl.exe -L -C - --ssl-no-revoke 断点续传循环解决。
阶段三:GFW DNS 污染
cloudflared 连接报 TLS EOF / QUIC timeout,排查发现 argotunnel.com 被 DNS 污染返回 28.0.0.x(Clash Fake IP)。
解决方案:Clash 切全局模式 + 开 TUN,让所有流量走代理。
阶段四:WebSocket 混合内容问题
HTTPS 页面无法发起 ws:// 连接(Mixed Content 错误)。
错误思路:以为要从浏览器连接到硬件,做了一个 /ws-proxy 转发代理。
正确理解:DTU 硬件是 WebSocket 客户端,主动连接到后端;浏览器也连后端;后端作为 Hub 中转。只需把 WebSocket Hub 合并进 HTTP 服务器(port 3000),Cloudflare 隧道自动处理 TLS。
阶段五:Token 鉴权
最初 Token 硬编码在 JS 里(无意义)→ 改为页面输入框 + 后端验证。
new URL(req.url, host) 在 Cloudflare 穿透下 host 头异常导致解析崩溃 → 改用 URLSearchParams 直接解析 query string。
Clash Verge基础常识补充
网络设置:系统代理 vs 虚拟网卡模式
系统代理(System Proxy)
-
在 Windows 网络设置里挂一个 HTTP/HTTPS 代理
-
只有支持代理设置的应用才会走(浏览器、大多数 App
) -
不支持代理的应用直接绕过,完全不走 Clash(命令行工具、游戏、cloudflared
) -
轻量,对系统影响小
虚拟网卡模式(TUN 模式)
-
在系统里虚拟出一张网卡,劫持所有网络流量
-
任何程序,不管支不支持代理,全部强制走 Clash
-
cloudflared、命令行 curl、游戏客户端 全都能被代理

-
这就是为什么跑 cloudflared 必须开 TUN——它不认系统代理
一句话区别:系统代理是「开门请进」,TUN 是「直接拦路」
代理模式:规则 / 全局 / 直连
规则模式(Rule)
-
按照订阅里的规则列表分流
-
国内网站 → 直连,境外网站 → 走代理
-
日常上网最推荐,省流量、速度快
全局模式(Global)
-
所有流量不管什么网站,全部走代理
-
用于需要让某个程序(比如 cloudflared)强制走代理的场景
-
缺点:国内网站也绕一圈,慢、费流量
直连模式(Direct)
-
所有流量完全不走代理,跟没开 Clash 一样
-
临时测试用,或者不需要科学上网时
对此项目来说
| 场景 | 应该设置 |
|---|---|
| 跑 cloudflared | 全局 + TUN 都要开 |
| 正常日常使用 | 规则 + TUN(或者只系统代理) |
记录时间:2026-02-26
技术栈:Node.js · Cloudflare Tunnel · Clash · 银尔达 DTU · WebSocket