内网穿透记录

:cloud_with_lightning: 内网穿透记录

域名:websocket.zqyuan.xyz → 本机 localhost:3000
工具:Cloudflare Tunnel(cloudflared)+ Clash(全局模式 + TUN)


:rocket: 每次开机必做:三步启动清单

:warning: 重要!每次重启电脑后,必须按顺序完成以下三步,网站才能正常使用!

第一步 :blue_circle: 启动 Clash(全局模式 + TUN)

  1. 打开 Clash

  2. 模式切换为 全局(Global)

  3. 确认 TUN 模式 已开启(System Proxy 也要开)

原因:GFW 对 Cloudflare 隧道域名(argotunnel.com)有 DNS 污染,返回假 IP 28.0.0.x
不开全局+TUN,cloudflared 会连接超时,隧道无法建立。


第二步 :orange_circle: 启动 Cloudflare 隧道

打开 PowerShell,运行:

此处省略,以防个人隧道泄露

:white_check_mark: 看到 Connection ... registered 字样说明隧道建立成功
:warning: --protocol http2 必须加,避免 QUIC 协议在代理下不稳定

保持此窗口不要关闭!


第三步 :green_circle: 启动后端服务器

另开一个 PowerShell 窗口,运行:

此处省略,以防个人后端调用权限泄露

:white_check_mark: 看到 前端服务已启动 http://127.0.0.1:3000 说明后端正常

保持此窗口不要关闭!


访问网站 :globe_with_meridians:

三步完成后,任何设备打开浏览器访问:

https://websocket.zqyuan.xyz

在「:key: 访问 Token」栏输入密码后点击连接即可。


:satellite_antenna: 系统架构说明

银尔达 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,后端将任意一端的消息广播给其他所有连接端,实现硬件 ↔ 网页双向通信。


:key: Token 鉴权说明

连接方 是否需要 Token 说明
银尔达 DTU :cross_mark: 不需要 服务器地址填 ws://websocket.zqyuan.xyz 即可
浏览器用户 :white_check_mark: 需要 在「访问 Token」框输入密码后点连接

Token 密码:此处省略,以防个人密钥泄露(保密!)
输错 Token → 后端直接拒绝连接,不会建立通信


:file_folder: 关键文件位置

文件 路径 说明
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 端口/地址配置

:gear: 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

:bug: 常见问题排查

:cross_mark: 隧道连不上 / 28.0.0.x 报错

→ Clash 没开 全局模式TUN 模式,切换后重启 cloudflared

:cross_mark: 隧道超时 / QUIC 失败

→ 运行命令加 --protocol http2 参数

:cross_mark: 网页打开是 Cloudflare 1033 错误

→ cloudflared 进程没在运行,执行第二步

:cross_mark: 网页可以打开但 WebSocket 连不上

→ 后端没在运行,执行第三步

:cross_mark: Token 输对了还是连不上

→ 先清 Cloudflare 缓存(控制台 → 缓存 → 清除一切),再硬刷新浏览器(F12 开着 → 右键刷新 → 清空缓存并硬性重新加载)

:cross_mark: 连上后过一会自动断开

→ 后端有 30 秒心跳 ping,正常情况不会断。检查 Clash 是否还在全局模式


:memo: 搭建过程踩坑记录

阶段一:弃用 LoCyanFrp

最初用 LoCyanFrp 做内网穿透,API 服务器 522/502 全挂,弃坑。

阶段二:Cloudflare Tunnel 下载地狱 :sob:

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。


:rocket:Clash Verge基础常识补充

:electric_plug: 网络设置:系统代理 vs 虚拟网卡模式

系统代理(System Proxy)

  • 在 Windows 网络设置里挂一个 HTTP/HTTPS 代理

  • 只有支持代理设置的应用才会走(浏览器、大多数 App :white_check_mark:

  • 不支持代理的应用直接绕过,完全不走 Clash(命令行工具、游戏、cloudflared :cross_mark:

  • 轻量,对系统影响小

虚拟网卡模式(TUN 模式)

  • 在系统里虚拟出一张网卡,劫持所有网络流量

  • 任何程序,不管支不支持代理,全部强制走 Clash

  • cloudflared、命令行 curl、游戏客户端 全都能被代理 :white_check_mark:

  • 这就是为什么跑 cloudflared 必须开 TUN——它不认系统代理

:light_bulb: 一句话区别:系统代理是「开门请进」,TUN 是「直接拦路」


:globe_with_meridians: 代理模式:规则 / 全局 / 直连

规则模式(Rule)

  • 按照订阅里的规则列表分流

  • 国内网站 → 直连,境外网站 → 走代理

  • 日常上网最推荐,省流量、速度快

全局模式(Global)

  • 所有流量不管什么网站,全部走代理

  • 用于需要让某个程序(比如 cloudflared)强制走代理的场景

  • 缺点:国内网站也绕一圈,慢、费流量

直连模式(Direct)

  • 所有流量完全不走代理,跟没开 Clash 一样

  • 临时测试用,或者不需要科学上网时

:bullseye: 对此项目来说

场景 应该设置
跑 cloudflared 全局 + TUN 都要开
正常日常使用 规则 + TUN(或者只系统代理)

:date: 记录时间:2026-02-26
:wrench: 技术栈:Node.js · Cloudflare Tunnel · Clash · 银尔达 DTU · WebSocket