很多朋友买了域名之后,都希望能在公网安全访问自己家里的服务。传统做法需要公网 IP、端口转发、防火墙配置,甚至要考虑动态 IP 的问题。其实,借助 Cloudflare Tunnel(cloudflared),我们可以绕过这些繁琐的步骤,让 Cloudflare 作为中转,把外网请求安全转发到家里的内网服务。
下面我整理了一份完整的教程,帮助你从零开始配置 Cloudflare Tunnel,并绑定到你购买的域名。
1. 前置准备
- 一个 Cloudflare 账号,并将你购买的域名的 DNS 托管到 Cloudflare(即域名的 NS 指向 Cloudflare 提供的地址)。
- 家里的服务器一台,可以是 Linux / Windows / macOS。
- 服务器需要能访问外网(内网即可,不需要公网 IP)。
2. 安装 cloudflared
以 Linux 为例,安装 cloudflared:
# Debian/Ubuntu |
或使用 Cloudflare 官方安装包:
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb |
检查是否安装成功:
cloudflared --version |
3. 登录 Cloudflare 并创建 Tunnel
在服务器运行:
cloudflared tunnel login |
这会打开浏览器,让你登录并选择授权的域名。完成后,cloudflared 会在 ~/.cloudflared/ 下生成认证文件 cert.pem。
接着创建一个隧道,例如命名为 home-server:
cloudflared tunnel create home-server |
此时会生成一个唯一的隧道 UUID 文件,例如:
~/.cloudflared/4c144478-8e47-4c94-b45a-015382745e29.json |
4. 配置 Tunnel
我们选择将配置迁移到系统目录 /etc/cloudflared/,这样可以避免路径冲突,更符合 Linux 系统服务的习惯。
步骤:
sudo mkdir -p /etc/cloudflared |
新建 /etc/cloudflared/config.yml:
tunnel: 4c144478-8e47-4c94-b45a-015382745e29 |
说明:
tunnel:就是你的隧道 UUID。credentials-file:对应刚才复制过来的 JSON 文件。ingress:定义域名与内网服务的映射关系。例如myserver.example.com→ 服务器本地的http://localhost:3000。
5. 配置 Cloudflare DNS
登录 Cloudflare Dashboard → 选择你的域名 → DNS 管理,添加一条记录:
- 类型:
CNAME - 名称:
myserver - 目标:
<tunnel-uuid>.cfargotunnel.com - 代理状态:开启(橙色小云 ☁️)
这样外部访问 myserver.example.com 就会自动通过 Cloudflare Tunnel 转发到你的内网服务。
6. 安装并启动服务
安装为 systemd 服务:
sudo cloudflared service install |
启动服务:
sudo systemctl start cloudflared |
设置开机自启:
sudo systemctl enable cloudflared |
查看运行状态:
sudo systemctl status cloudflared |
7. 多服务配置(可选)
如果你需要映射多个端口,可以直接扩展 config.yml:
ingress: |
这样不同子域名可以对应不同的服务:
app.example.com→ 内网 8080 端口ssh.example.com→ SSH 登录
8. 总结
通过 Cloudflare Tunnel,我们实现了:
- 无需公网 IP,即可将内网服务暴露到公网。
- Cloudflare 提供安全加密的隧道,不需要自己配置复杂的防火墙规则。
- 支持多服务、多子域名的灵活映射。
最终,我们把配置文件放在 /etc/cloudflared/config.yml,这样 cloudflared 服务可以稳定运行,并在系统启动时自动加载。
🎉 现在,你可以直接通过 myserver.example.com 来访问家里的服务了!






