使用 Cloudflare Tunnel(简称 CF Tunnel)来实现家用主机突破 80/443 端口封锁,是目前公认最优雅、最安全的方案。

下面是为您整理的保姆级配置步骤


第一步:将域名 DNS 解析迁移到 Cloudflare (免费)

Cloudflare Tunnel 要求域名必须由 Cloudflare 解析。

  1. 登录 Cloudflare 官网 注册一个免费账号。
  2. 点击 Add a Site (添加站点),输入你的域名(如 imdld.com),选择 Free (免费) 计划
  3. Cloudflare 会自动扫描你现有的 DNS 记录(比如在 GoDaddy 上的记录)。扫描完成后点击继续。
  4. Cloudflare 会给你两个 Nameservers(域名服务器) 地址(例如 hank.ns.cloudflare.comheather.ns.cloudflare.com)。
  5. 去 GoDaddy 修改设置
    • 登录 GoDaddy,找到你的域名,进入 DNS 管理。
    • 找到“域名服务器 (Nameservers)”,将其修改为 Cloudflare 提供的那两个地址。
    • 注:修改 DNS 服务器需要几分钟到几小时生效,期间不影响你的现有解析。

第二步:在 Cloudflare 创建 Tunnel

DNS 迁移完成后,就可以在网页端创建隧道了。

  1. 在 Cloudflare 控制台左侧菜单,点击 Zero Trust(如果是第一次进入,根据提示开通即可,完全免费,不需要绑定信用卡)。
  2. 在 Zero Trust 面板中,依次点击 Networks -> Tunnels
  3. 点击 Create a Tunnel,选择 Cloudflare Tunnel (named)
  4. 给你的隧道起个名字(例如 my-nas-tunnel),点击保存。
  5. 保存后,页面会显示一串安装命令。找到包含 --token 后面的一长串密钥(Token),把它复制保存下来。

第三步:在 NAS/家用主机上运行 Tunnel 客户端

因为你的 NAS 项目涉及 Docker/Podman,这里推荐直接使用 Docker 运行客户端(cloudflared):

在你的 NAS 上执行以下命令(将 <YOUR_TOKEN> 替换为你上一步复制的 Token):

docker run -d \
  --name cloudflared \
  --restart unless-stopped \
  cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run --token <YOUR_TOKEN>

运行成功后: 回到 Cloudflare 的网页端,你会看到刚才创建的 Tunnel 状态变成了 Active(绿色健康状态)。这说明你的内网主机已经和 Cloudflare 建立了专属的加密通道!


第四步:在网页端配置域名映射(实现无端口访问)

有了通道后,你可以任意分配子域名到你的内网服务,完全不需要配置路由器端口转发,甚至不需要使用 Caddy(除非你有特殊反代需求)。

在刚才的 Tunnel 页面中,点击该 Tunnel 的 Edit (编辑) ➡️ 进入 Public Hostname (公共主机名) 选项卡:

  1. 点击 Add a public hostname
  2. 配置你的子域名:
    • Subdomain (子域名): 输入 story
    • Domain (域名): 选择 imdld.com
    • Path (路径): 留空
  3. 配置内网服务指向(Service):
    • Type (类型): 选择 HTTP
    • URL (链接): 输入你内网服务的地址和端口,例如 192.168.1.20:4567(或者如果 Docker 在同一台机器上,可以写 localhost:4567)。
  4. 点击 Save hostname 保存。

🎉 享受成果!

现在,在任意地方的浏览器中输入: https://story.imdld.com (标准的 443 端口,无需加任何端口号)

整个访问流程是这样的:

  1. 访客请求 https://story.imdld.com
  2. 流量到达 Cloudflare 节点,Cloudflare 自动提供合法的 HTTPS 证书 并建立安全连接。
  3. Cloudflare 将流量打包,通过你刚才建立的隧道(Tunnel)直接发送到你 NAS 上的 cloudflared 容器。
  4. cloudflared 容器将流量解包并传给内网的 192.168.1.20:4567

💡 常见问题与优势补充

  1. 我如果有多个服务怎么办? 超级简单!你只需要在这个 Tunnel 页面里继续点击 Add a public hostname,比如:

    • nas.imdld.com ➡️ 指向内网 localhost:8080 (NAS 管理后台)
    • movie.imdld.com ➡️ 指向内网 localhost:32400 (Plex/Emby 媒体库) 所有的子域名都可以共享这一个 Docker 隧道容器,且全部自动支持免端口 HTTPS 访问!
  2. 这个方案有什么缺点吗?

    • 延迟(Latency)略微增加:因为所有流量都会经过 Cloudflare 的节点进行中转,如果连接国内的 Cloudflare 节点不理想,速度可能会稍微受到影响(对于网页、API、听歌绰绰有余;如果用于大文件上传下载或 4 K 观影,速度取决于 Cloudflare 节点的带宽)。
    • 大文件限制:Cloudflare 免费版对单个 HTTP 请求的文件上传大小有限制(通常为 100 MB),如果需要上传超大文件,可能需要调整客户端或者走其他通道。