不乱于心,不困于情,不畏将来,不念过往.
核心原理:cloudflared 从内网主动向外连接 Cloudflare 边缘节点,建立加密隧道。外部用户访问域名时,流量通过 Cloudflare 边缘 → 隧道 → 本地 OpenList,全程无需公网 IP、无需开放入站端口。
目录
- 方案总览
- 前置条件
- OpenList Desktop 兼容性说明
- 第一步:安装 cloudflared
- 第二步:登录 Cloudflare 账号
- 第三步:创建 Tunnel
- 第四步:配置路由规则
- 第五步:配置 DNS 记录
- 第六步:启动 Tunnel
- 第七步:OpenList 站点配置
- 第八步:验证与测试
- 第九步:安全加固
- 第十步:Windows 开机自启
- 常见问题排查
- 方案总结
方案总览
数据流架构
用户浏览器 Cloudflare 边缘 你的电脑(内网)https://open.xxx.eu.cc → DNS 解析 + TLS 终止 → cloudflared → OpenList (Tunnel 客户端) (127.0.0.1:5544)前置条件
| 条件 | 说明 |
|---|---|
| Cloudflare 账号 | 邮箱注册登录即可 |
| 自定义域名 | NS 已指向 Cloudflare(如 xxx.eu.cc) |
| OpenList 已部署 | 本地可正常访问(如 http://127.0.0.1:5544) |
| 终端访问权限 | Windows 上使用 PowerShell 或 CMD |
OpenList Desktop 兼容性说明
TIP官方docker部署太难我看不懂? 可以尝试openlist-desktop(小白简单向!)
<br>如果你是大佬,请移步官方文档
OpenList Desktop 和 Cloudflared 完全兼容,没有任何冲突。
- OpenList Desktop 只是一个本地运行的 Web 服务,监听在
http://localhost:5544/ - Cloudflared 作为隧道客户端,将外部流量转发到这个本地地址
- 两者各司其职,互不干扰
第一步:安装 cloudflared
Windows(你的环境)
方式一:winget 安装(推荐)
winget install Cloudflare.cloudflared方式二:手动下载
- 访问 cloudflared GitHub Releases
- 下载
cloudflared-windows-amd64.msi - 双击安装
安装后验证:
cloudflared --version建议使用 v2024.0.0 及以上版本。
其他系统(参考)
mac:
brew install cloudflared第二步:登录 Cloudflare 账号
在 CMD 或 PowerShell 中执行:
cloudflared tunnel login执行后会自动打开浏览器,要求你:
- 选择一个域名(选择你打算绑定的域名,如
xxx.eu.cc) - 授权 cloudflared 访问该域名
无图形界面环境:命令行会输出一个 URL,复制到任意设备的浏览器中打开完成授权,将回调内容粘贴回终端。
成功后凭证保存在 C:\Users\你的用户名\.cloudflared\cert.pem,只需执行一次。
第三步:创建 Tunnel
cmd后输入
cloudflared tunnel create openlist成功后输出类似:
Tunnel credentials written to C:\Users\xxx\.cloudflared\a1b2c3d4-e5f6-7890-abcd-ef1234567890.jsonCreated tunnel openlist with id a1b2c3d4-e5f6-7890-abcd-ef1234567890请记录 Tunnel ID(上例中的
a1b2c3d4-e5f6-7890-abcd-ef1234567890),后续配置需要用到。凭证 JSON 文件请勿删除或泄露。
第四步:配置路由规则
创建配置文件 C:\Users\你的用户名\.cloudflared\config.yml,内容如下:
tunnel: a1b2c3d4-e5f6-7890-abcd-ef1234567890credentials-file: C:\Users\你的用户名\.cloudflared\a1b2c3d4-e5f6-7890-abcd-ef1234567890.json
ingress: # 子域名路由到 OpenList - hostname: open.xxx.eu.cc /*一定需要子域名,在你选择的域名前添加任意前缀即可*/ service: http://127.0.0.1:5544
# 必须的兜底规则 - service: http_status:404配置项说明
| 配置项 | 说明 | 示例 |
|---|---|---|
tunnel | Tunnel ID | a1b2c3d4-... |
credentials-file | 凭证 JSON 的绝对路径 | C:\Users\xxx\.cloudflared\xxx.json |
ingress[].hostname | 要绑定的子域名 | open.xxx.eu.cc |
ingress[].service | 本地服务地址 | http://127.0.0.1:5544 |
IMPORTANT1. service 必须用
127.0.0.1,不要用localhost<br>localhost是一个域名,Cloudflare 边缘节点在某些情况下会尝试对其进行 DNS 解析,导致 Error 1016 Origin DNS error。使用127.0.0.1纯 IP 地址可彻底避免此问题。<br>2. 最后一条 ingress 必须是 catch-all 规则<br>不含hostname字段,否则 cloudflared 拒绝启动。<br>3. credentials-file 必须使用绝对路径<br>Windows 上不要用相对路径,写出完整路径。
第五步:配置 DNS 记录
方式一:命令行(推荐)
cloudflared tunnel route dns openlist open.xxx.eu.cc方式二:Cloudflare Dashboard 手动添加
进入 你的域名 → DNS → Records → Add Record:
| 字段 | 值 |
|---|---|
| Type | CNAME |
| Name | open |
| Target | a1b2c3d4-e5f6-7890-abcd-ef1234567890.cfargotunnel.com |
| Proxy status | Proxied(橙色云朵,必须开启) |
| TTL | Auto |
根域名(@ 记录)不要指向 Tunnel,除非你有其他特殊用途。
WARNING不要把根域名加入路由 根域名(如
xxx.eu.cc)通常不应该绑定到 OpenList。只绑定子域名(如open.xxx.eu.cc)。如果错误地添加了根域名路由,同样会触发 1016 错误。
第六步:启动 Tunnel
前台运行(首次调试用)
cloudflared tunnel run openlist看到以下输出说明成功:
INF Starting tunnel tunnelID=a1b2c3d4-e5f6-7890-abcd-ef1234567890INF Route registered for open.xxx.eu.ccINF Connection registered connIndex=0 location=SJCINF Connection registered connIndex=1 location=LAXINF Connection registered connIndex=2 location=SEAINF Connection registered connIndex=3 location=IADcloudflared 默认建立 4 条冗余连接到不同边缘节点,自动故障切换。
此时不要关闭这个 CMD 窗口,关闭 = 杀掉进程 = 隧道断开。后续设置为 Windows 服务后可解决此问题。
第七步:OpenList 站点配置(可选)
- 访问
http://127.0.0.1:5544/@manage进入 OpenList 管理后台 - 找到 「站点设置」或「全局设置」
- 将 站点 URL 修改为
https://open.xxx.eu.cc(注意是 https) - 保存设置
第八步:验证与测试
- Cloudflare Dashboard → Zero Trust → Networks → Tunnels 中确认状态为 Healthy
- 浏览器打开
https://open.xxx.eu.cc,能看到 OpenList 首页 - 检查地址栏锁图标,确认 HTTPS 证书有效(Cloudflare 签发)
- 登录 OpenList,浏览文件列表,尝试下载文件
快速命令行测试:
curl -sI https://open.xxx.eu.cc期望看到 HTTP/2 200 和 server: cloudflare。
第九步:Windows 开机自启
问题:直接在 CMD 中运行 cloudflared,关闭CMD窗口或关机后隧道断开。 解决:1.将cloudflared注册为Windows系统服务;2.openlist/cloudflared.exe开机自动后台运行;
确保 OpenList Desktop 也开机自启
- 按
Win + R输入shell:startup回车 - 将 OpenList Desktop 的快捷方式拖入该文件夹
- 右键 OpenList Desktop 快捷方式 → 属性 → 兼容性 → 勾选”以管理员身份运行”
start.vbs/注册cloudflared.exe Windows 服务
方案一:创建vbs启动脚本
这个方法是使用.vbs自启动后在后台作为系统服务运行,会产生需要手动关闭的CMD窗口。
- 在Cloudflare.exe同级目录下新建文件
start.txt文本文档并输入以下内容:
Set WshShell = CreateObject("WScript.Shell")' ==========================================' 配置区域:请根据实际路径修改下方引号内的内容' ==========================================Dim exePath, exeCmd
' cloudflared.exe 的完整绝对路径exePath = "D:\Openalist\cloudflared\cloudflared.exe" /*将路径替换为你实际的 cloudflared 路径。*/
' 需要执行的命令参数exeCmd = "tunnel run openlist-tunnel"
' ==========================================' 执行命令' 参数说明: 0 表示隐藏窗口, False 表示不等待程序结束(这样即使vbs结束,服务也在运行)' ==========================================WshShell.Run """" & exePath & """ " & exeCmd, 0, False
Set WshShell = NothingWARNING注意将所有路径替换为个人实际路径
- 保存文本文档并重新命名为:
start.vbs - 键入win+r打开运行框,输入
shell:startup回车,将start.vbs拖入该文件夹。
方案二:注册cloudflared.exe Windows 服务
这个方法会让 cloudflared 在后台作为系统服务运行,开机自动启动,无需手动干预,且不会留下需要手动关闭的CMD窗口。
- 在开始菜单搜索
CMD或PowerShell,右键点击,选择“以管理员身份运行”。 - 使用 cd 命令切换到你的 cloudflared.exe 所在的文件夹。根据你的情况,应该是:
cd /d D:\Openalist\- 运行以下服务安装命令,将 cloudflared 注册为系统服务。这个命令会自动读取你已有的配置文件(config.yml)。
.\cloudflared.exe service install- 验证服务状态
安装成功后,你可以打开“服务”管理器来验证。
按下 Win + R 键,输入
services.msc并回车。 在服务列表中找到名为Cloudflared的服务。 你会看到它的“启动类型”是“自动”,并且“状态”是“正在运行”。 - 完成以上步骤后,(首次安装)你就可以关闭 CMD 窗口了。cloudflared 隧道会在后台持续稳定运行,并且每次开机都会自动启动。
4. 开机后的完整启动流程
电脑开机 ↓OpenList Desktop 自动启动 → 监听 127.0.0.1:5544 ↓Cloudflared 服务自动启动 → 建立 Tunnel 隧道 ↓约 30 秒后 → https://open.xxx.eu.cc 可访问openlist/cloudflared.exe都要设置自启,缺一不可。
5. 以下为可选内容
第十步:安全加固(可选-因为我不会)
9.1 Cloudflare Access 保护
为 OpenList 添加身份验证,未授权用户看到登录页面:
- 进入 Zero Trust → Access → Applications → Add an application → Self-hosted
- Application name:
OpenList - Session Duration:
24 hours - Application domain:
open.xxx.eu.cc - Policy 规则示例:
If Emails ending in @xxx.com → AllowElse → Block
9.2 SSL 模式设置
进入 域名 → SSL/TLS → Overview:
- 如果 cloudflared 到 OpenList 用的是
http://127.0.0.1(无 TLS)→ 选择 Full - 如果本地也配了 TLS 证书 → 选择 Full (Strict)
9.3 其他建议
| 措施 | 位置 | 建议 |
|---|---|---|
| Bot Fight Mode | Security → Bots | 开启 |
| Browser Integrity Check | Security → Settings | 开启 |
| Rate Limiting | Security → WAF → Rate limiting | 对 /d/ 和 /api/ 路径限速 |
| IP Access Rules | Security → WAF → Tools | 按需封禁恶意 IP |
常见问题排查
Error 1016 Origin DNS error
现象:浏览器显示 Error 1016 Origin DNS error,Cloudflare 无法解析域名。
原因:
- config.yml 中
service使用了localhost而非127.0.0.1 - 根域名被错误地加入了 Tunnel 路由
解决:
# 错误写法service: http://localhost:5544
# 正确写法service: http://127.0.0.1:5544同时删除 Tunnel 路由中的根域名条目,只保留子域名。
502 Bad Gateway
现象:Cloudflare 能解析域名但无法连接后端。
排查步骤:
REM 1. 确认 OpenList 正在运行curl http://127.0.0.1:5544
REM 2. 确认 cloudflared 正在运行nssm status CloudflaredTunnel
REM 3. 检查 config.yml 中端口号是否匹配 OpenList 实际监听端口ERR_TOO_MANY_REDIRECTS(重定向循环)
原因:OpenList 配置了强制 HTTPS,但 Cloudflare SSL 模式不匹配。
解决:将 Cloudflare SSL/TLS 模式设为 Full(非 Strict)。因为 cloudflared 到 localhost 是明文 HTTP,不是 TLS。
下载速度慢 / 超时
- Cloudflare 免费版对单文件大小有一定限制
- 在 Cloudflare → Speed → Optimization 中关闭 Rocket Loader、Mirage 等
- 检查 cloudflared 日志是否有频繁断连重连
- 大文件(>100MB)场景需考虑其他方案
error reading config: invalid ingress rule
原因:YAML 格式错误。
常见原因:
- 使用了 Tab 缩进(必须用空格)
- 缺少最后的 catch-all ingress 规则
- hostname 多了空格或少了后缀
建议:用 YAML Lint 在线校验格式。
如何更换域名 / 添加多个域名
- 修改
config.yml,在ingress中添加新的hostname+service条目 - 执行
cloudflared tunnel route dns openlist 新域名.xxx.eu.cc - 重启服务:
nssm restart CloudflaredTunnel
示例:
ingress: - hostname: open.xxx.eu.cc service: http://127.0.0.1:5544 - hostname: files.xxx.eu.cc service: http://127.0.0.1:5544 - service: http_status:404方案总结
- 先总结
| 特性 | 说明 |
|---|---|
| 无需公网 IP | NAT / 内网环境均可使用 |
| 无需开放端口 | 零入站防火墙规则 |
| 自动 HTTPS | Cloudflare 自动签发和续期证书 |
| 全球加速 | 300+ 边缘节点,自动就近接入 |
| 费用 | 完全免费 |
| 部署耗时 | 约 10 分钟 |
| 可靠性 | 4 条冗余隧道连接,自动故障切换 |
| 与 OpenList Desktop 兼容 | 完全兼容,无任何冲突 |
- 后日谈
- 优点
- 此方法适用于小白,使用少量命令行操作即可完成。
- 工具安装/使用简便,简单易懂。
- 包括域名在内,全部流程可以免费完成,对学生党非常友好。
- 缺点
- 对于新手来说部署整体耗时长,需要耐心操作。
- 不是一劳永逸的做法,仅适用于电脑随时开机的场景,包括终端关闭后均无法再次访问。
- 建议
- 如果有能力,建议购买云服务器,或搭配宝塔面板/1panel等使用。
- 可参考北に向かう的文章openlist部署。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









