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

家里有一台 NAS、一台跑着博客的小主机，或者一个只想自己访问的 Web 服务，却没有公网 IP，也不想把端口暴露到公网上被扫描？Cloudflare Tunnel 可以免费解决这个问题。它（原名 Argo Tunnel）通过一条从你内网主动发起的加密隧道，把本地的 HTTP/HTTPS/TCP 服务安全地映射到公网域名上。全程不需要公网 IP、不需要在路由器上做端口映射。一、准备工作一个 Cloudflare 账号，并且把你想要使用的域名托管到 Cloudflare（免费的 DNS 解析即可）一台部署了本地服务的电脑/服务器（Linux、Windows、macOS 都行）二、安装 cloudflared cloudflared 是 Cloudflare 官方提供的隧道客户端，装在你本地这台机器上。 Linux： # 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 下载对应安装包，双击安装即可。三、创建隧道（推荐：面板方式）这种方式最直观，适合大多数人。进入 Cloudflare 控制台，左侧菜单找到 Zero Trust（免费版可用）依次进入 Networks → Tunnels → Create a tunnel 选择 Cloudflared，填一个隧道名字页面会给你一条带 token 的安装命令，复制到你的服务器执行即可完成连接： sudo cloudflared service install 回到面板，给隧道添加一个 Public Hostname： Subdomain：填 nas（示例） Domain：选你托管到 Cloudflare 的域名 Service 类型选 HTTP，地址填 localhost:8080（你本地服务的实际端口）保存后，公网 https://nas.你的域名.com 就会通过加密隧道访问到你本地的 8080 端口。四、配置文件方式（进阶，适合命令行党）如果你更喜欢用配置文件管理，可以在 ~/.cloudflared/config.yml 里这样写： 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 然后启动： cloudflared tunnel run <隧道ID> 五、注意事项免费版对 TCP 类型隧道（如 SSH、RDP）需要在客户端加 cloudflared access 才能访问，HTTP 服务则无限制隧道是主动出站连接，即使你的公网 IP 发生变化也无需关心可以在面板给隧道加 Access 策略，用邮箱验证码、GitHub 登录等方式做访问鉴权，进一步保护隐私服务六、总结 Cloudflare Tunnel 是目前成本最低、最省心的内网穿透方案之一：免费、免公网 IP、免开端口、自带 HTTPS，还能叠加访问鉴权。如果你家里有 NAS、自建服务，又苦于没有公网 IP，强烈建议试试它。