Cloudflare Tunnel 内网穿透:把家里的机器安全暴露到公网
家里有台物理机,跑着各种服务,但没有公网 IP,只有 NAT 内网地址。想在外面随时访问怎么办?Cloudflare Tunnel 是目前最省心的方案:免费、自带 HTTPS、不用开放任何入站端口。
为什么选 Cloudflare Tunnel
传统内网穿透方案(如 frp、ngrok)需要一台有公网 IP 的中转服务器,还得维护连接保活。Cloudflare Tunnel 的思路完全不同:
- 机器主动向外连接 Cloudflare 边缘节点,入站流量全部走 Cloudflare 转发
- 无需公网 IP、无需开放端口,家里路由器零配置
- 自动签发 HTTPS 证书,不用担心证书管理
- 免费额度对个人站长完全够用
部署步骤
1. 安装 cloudflared
# Debian/Ubuntu
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg -o /usr/share/keyrings/cloudflare-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared bookworm main" > /etc/apt/sources.list.d/cloudflared.list
apt update && apt install -y cloudflared
2. 登录并创建隧道
cloudflared tunnel login
cloudflared tunnel create <隧道名>
登录会得到一个隧道 ID,例如 548e0a36-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
3. 写配置文件
/etc/cloudflared/config.yml,把本地服务映射到公网域名:
tunnel: 548e0a36-xxxx-xxxx-xxxx-xxxxxxxxxxxx
credentials-file: /etc/cloudflared/548e0a36-xxxx.json
ingress:
- hostname: openlist.example.com
service: http://localhost:5244
- hostname: vault.example.com
service: http://localhost:47832
- hostname: astrbot.example.com
service: http://localhost:6185
- service: http_status:404
注意:最后一条兜底规则必须保留,否则未匹配的请求会报错。
4. DNS 指向隧道
在 Cloudflare DNS 面板添加 CNAME 记录,指向:
<隧道ID>.cfargotunnel.com
开启橙色云(代理)模式即可。
5. 启动并配置自启
systemctl enable --now cloudflared-openlist
踩过的坑
- YAML 缩进是最大的坑。往配置里插入新规则时,如果不小心破坏了缩进层级,整个配置解析失败,隧道会反复重启。修改配置后一定要看
journalctl -u cloudflared的日志确认没报错。 - 530 错误代表隧道连不上本地服务。先确认本地端口真的在监听(
ss -tlnp | grep 端口),再检查 ingress 的 hostname 是否和域名完全一致。 - 改完配置必须重启隧道服务,CF 侧不会自动热加载。
总结
Cloudflare Tunnel 把"内网穿透"这件事简化到了极致:一个二进制、一个配置文件、一条 CNAME。家里机器的服务(网盘搜索、机器人面板、状态监控页)全部可以安全暴露到公网,而且自带 HTTPS 和 Cloudflare 的防护,个人站长的最优解。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 江江
评论
隐私政策
0/500
滚动到此处加载评论...
