记录使用Cloudflare Tunnel实现Alist内网穿透时遇到的两个核心问题及解决方案

前言

Cloudflare Tunnel是免费的内网穿透方案,无需公网IP即可将本地服务暴露到公网。本文记录了在配置Alist时踩过的两个大坑:

  1. 隧道502错误 - 服务URL协议配置错误
  2. WebDAV无法连接 - Access认证与WebDAV协议冲突

一、Tunnel基础配置:解决502错误

问题现象

  • Cloudflare控制台隧道状态显示"失效"
  • 访问域名返回 502 Bad Gateway
  • 本地 http://localhost:5244 访问正常
  • cloudflared服务显示"正在运行"

问题根因

关键错误:在Tunnel配置中使用了 https://localhost:5244

❌ 错误配置:  
服务URL: https://localhost:5244  
  
✓ 正确配置:  
服务类型: HTTP  
服务URL: http://localhost:5244  

原理说明

请求流程:  
浏览器 → HTTPS:443 → Cloudflare Edge   
       → (TLS终止) → Cloudflare Tunnel  
       → (加密隧道) → cloudflared本地进程  
       → HTTP:5244 → Alist服务  

核心要点:

  • 外部访问用HTTPS(443端口) - Cloudflare自动处理
  • 内部转发用HTTP(5244端口) - cloudflared连接本地服务
  • 如果配置成https,Tunnel无法连接本地HTTP服务,导致502

修复步骤

  1. 登录Cloudflare Zero Trust控制台
  2. 网络隧道连接器 → 点击隧道名称
  3. 已发布应用程序路由 → 点击路由右侧菜单 → 编辑
  4. 将服务URL从 https://localhost:5244 改为 http://localhost:5244
  5. 确认服务类型选择 HTTP
  6. 保存后隧道状态应变为"正常"

二、WebDAV配置:解决客户端无法连接

问题现象

  • RaiDrive等WebDAV客户端被重定向到Access登录页
  • 客户端无法完成网页登录,显示404或认证失败
  • 公司网络无法连接,手机热点可以

三重问题叠加

问题1: Access与WebDAV协议不兼容

WebDAV工作方式:  
客户端 → HTTP Basic认证(用户名+密码)  
       → 直接访问服务  
  
Cloudflare Access:  
客户端 → 302重定向到登录页  
       → OAuth网页登录  
       → WebDAV客户端无法处理 ✗  

问题2: 路径配置错误

Alist URL结构:  
/      ← 网页界面  
/d     ← 文件浏览(网页)  
/dav   ← WebDAV端点 ✓  

问题3: 公司网络端口限制

访问方式5244端口443端口公司网络
ddns.example.com:5244需要-❌ 被防火墙拦截
alist.example.com:443-需要✓ 必须开放

企业防火墙只开放80/443等标准端口,5244这类非标准端口会被拦截。

解决方案:配置Access Bypass

目标:让 /dav 路径绕过认证,其他路径仍受保护

步骤1: 创建WebDAV专用Application

访问控制 → 应用程序 → 添加应用程序 → 自托管  
  
应用名称: Alist WebDAV  
域名: alist.example.com  
路径: /dav  ← 关键!只针对WebDAV路径  

步骤2: 添加Bypass策略

策略名称: Bypass WebDAV  
操作: Bypass  ← 必须是Bypass,不是Allow  
  
Include规则:  
  选择器: Everyone  
  值: Everyone  

重要: Bypass = 完全放行,不做检查;Allow = 允许但仍检查token

步骤3: 验证配置

1
2
3
4
5
6
7
# 测试1: 根路径(应该需要Access认证)  
https://alist.example.com/  
期望: 跳转到Cloudflare Access登录页 ✓  
  
# 测试2: WebDAV路径(应该弹出基础认证)  
https://alist.example.com/dav  
期望: 弹出HTTP Basic认证对话框 ✓  

WebDAV客户端配置

RaiDrive

连接类型: WebDAV  
地址: alist.example.com  (不带端口)  
端口: 443  
路径: /dav  
用户名: your_username  
密码: ******  
加密: TLS 1.3  

Windows网络驱动器

文件夹: https://alist.example.com/dav  
用户名: your_username  
密码: ******  
勾选: 使用其他凭据连接  

三、技术架构

[WebDAV客户端]  
    ↓ HTTPS:443 + /dav  
[Cloudflare Edge]  
    ↓ 检查Access规则  
    ↓ → /dav → Bypass放行 ✓  
    ↓ → /    → 需要认证  
[Cloudflare Tunnel]  
    ↓ 加密隧道  
[cloudflared本地进程]  
    ↓ HTTP:5244  
[Alist服务]  

四、配置对照表

Tunnel配置

配置项❌ 错误✓ 正确
服务URLhttps://localhost:5244http://localhost:5244
服务类型HTTPSHTTP

Access配置

配置项❌ 错误✓ 正确
路径留空或 /d/dav
策略动作AllowBypass

WebDAV客户端配置

配置项❌ 错误✓ 正确
地址alist.example.com:443alist.example.com
端口5244443
路径/d 或留空/dav

五、故障排查

1. 遇到502错误

检查顺序:  
1. 本地访问 http://localhost:5244 → 正常?  
   └─ 否 → Alist服务未启动  
     
2. Tunnel服务URL是 http 而非 https?  
   └─ 否 → 修改为 http://localhost:5244  
     
3. cloudflared服务运行中?  
   └─ 否 → services.msc 启动服务  

2. WebDAV无法连接

检查顺序:  
1. 浏览器访问 https://alist.example.com/dav  
   └─ 弹出认证框? → Bypass正常  
   └─ 跳转Access登录? → 检查Bypass配置  
     
2. 客户端配置:  
   └─ 端口是443? (不是5244)  
   └─ 路径是/dav? (不是/d)  
   └─ 加密是TLS 1.3?  

3. 公司网络无法连接

这是正常的! 企业防火墙封锁非标准端口。

解决:

  • ✓ 使用 alist.example.com:443 (Cloudflare Tunnel)
  • ✗ 不要用 ddns.example.com:5244 (被拦截)

六、常见问题

Q: 修改为http还是502?

  1. 确认配置已保存(刷新页面查看)
  2. 重启cloudflared服务
  3. 检查Alist服务是否正常运行

Q: /dav还是跳转到Access登录?

  1. 确认Application路径精确填写 /dav
  2. 确认策略动作为 Bypass (不是Allow)
  3. 清除浏览器缓存,等待5-10分钟生效
  4. 尝试隐身窗口测试

Q: 速度很慢怎么办?

Cloudflare在国内速度受限,替代方案:

  • 有公网IP:使用IPv6 + DDNS直连
  • 无公网IP:只能接受Tunnel的速度限制
  • 混合方案:家用直连,公司用Tunnel

七、安全建议

最小权限配置

推荐设置:  
├─ 根路径 /     → Cloudflare Access保护 ✓  
├─ WebDAV /dav  → Bypass放行  
│  └─ Alist用户名密码保护 ✓  
└─ 其他路径     → Access保护  

增强安全性

  1. IP白名单 (可选)

    策略配置:  
    Include: IP ranges  
    值: 信任的IP段  
    
  2. 使用强密码

    • Alist用户密码16位以上
    • 定期更换密码
  3. 监控日志

    • 定期检查Access访问日志
    • 注意Alist异常登录尝试

总结

核心要点

  1. Tunnel配置的关键

    • 内部转发必须用HTTP,不是HTTPS
    • 修改后隧道状态从"失效"变"正常"
  2. WebDAV配置的关键

    • /dav 路径单独配置Bypass规则
    • 客户端使用443端口,路径填 /dav
    • 公司网络只能走Tunnel(443端口)
  3. 问题本质

    • Tunnel 502 → 协议配置错误(https vs http)
    • WebDAV连不上 → Access认证与WebDAV协议冲突
    • 公司网络无法访问 → 防火墙封锁非标准端口

配置检查清单

完成后验证:

  • 本地 http://localhost:5244 正常
  • 隧道状态显示"正常"
  • https://alist.example.com 无502错误
  • https://alist.example.com/dav 弹出认证框
  • WebDAV客户端成功连接并列出文件