banner
约 900 字
3 分钟

Cloudflare Tunnel 实现内网穿透:免费把家里服务暴露到公网

摘要

Cloudflare Tunnel(原Argo Tunnel)可以免费把家里/内网的服务安全地暴露到公网,无需公网IP、无需开放端口。本教程介绍如何安装cloudflared、通过Cloudflare Zero Trust面板或配置文件创建隧道,并将本地服务映射到公网域名。

家里有一台 NAS、一台跑着博客的小主机,或者一个只想自己访问的 Web 服务,却没有公网 IP,也不想把端口暴露到公网上被扫描?Cloudflare Tunnel 可以免费解决这个问题。

它(原名 Argo Tunnel)通过一条从你内网主动发起的加密隧道,把本地的 HTTP/HTTPS/TCP 服务安全地映射到公网域名上。全程不需要公网 IP、不需要在路由器上做端口映射。


一、准备工作

  1. 一个 Cloudflare 账号,并且把你想要使用的域名托管到 Cloudflare(免费的 DNS 解析即可)

  2. 一台部署了本地服务的电脑/服务器(Linux、Windows、macOS 都行)


二、安装 cloudflared

cloudflared 是 Cloudflare 官方提供的隧道客户端,装在你本地这台机器上。

Linux:

bash
# Debian/Ubuntu
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/cloudflared

Windows / macOS: 直接去 GitHub Releases 下载对应安装包,双击安装即可。


三、创建隧道(推荐:面板方式)

这种方式最直观,适合大多数人。

  1. 进入 Cloudflare 控制台,左侧菜单找到 Zero Trust(免费版可用)

  2. 依次进入 Networks → Tunnels → Create a tunnel

  3. 选择 Cloudflared,填一个隧道名字

  4. 页面会给你一条带 token 的安装命令,复制到你的服务器执行即可完成连接:

bash
sudo cloudflared service install <TOKEN>
  1. 回到面板,给隧道添加一个 Public Hostname

    • Subdomain:填 nas(示例)

    • Domain:选你托管到 Cloudflare 的域名

    • Service 类型选 HTTP,地址填 localhost:8080(你本地服务的实际端口)

保存后,公网 https://nas.你的域名.com 就会通过加密隧道访问到你本地的 8080 端口。


四、配置文件方式(进阶,适合命令行党)

如果你更喜欢用配置文件管理,可以在 ~/.cloudflared/config.yml 里这样写:

YAML
tunnel: <你的隧道ID>
credentials-file: /home/user/.cloudflared/<隧道ID>.json

ingress:
  - hostname: nas.example.com
    service: http://localhost:8080
  - hostname: blog.example.com
    service: http://localhost:3000
  - service: http_status:404

然后启动:

bash
cloudflared tunnel run <隧道ID>

五、注意事项

  • 免费版对 TCP 类型隧道(如 SSH、RDP)需要在客户端加 cloudflared access 才能访问,HTTP 服务则无限制

  • 隧道是主动出站连接,即使你的公网 IP 发生变化也无需关心

  • 可以在面板给隧道加 Access 策略,用邮箱验证码、GitHub 登录等方式做访问鉴权,进一步保护隐私服务


六、总结

Cloudflare Tunnel 是目前成本最低、最省心的内网穿透方案之一:免费、免公网 IP、免开端口、自带 HTTPS,还能叠加访问鉴权。如果你家里有 NAS、自建服务,又苦于没有公网 IP,强烈建议试试它。

END