在甲骨文云实例上配置 Cloudflare Tunnel 隐藏源 IP,核心是通过安装 cloudflared 守护进程建立出站加密连接,将流量经由 Cloudflare 边缘节点转发。适用场景是需要保护源站 IP 免受直接扫描或攻击,风险边界在于隧道断开时服务不可用,且需确保本地防火墙允许出站 HTTPS 流量。
先说结论:Cloudflare Tunnel 适合在不开放甲骨文云入站端口的前提下对外提供服务,能有效隐藏源站公网 IP。
- 适合:希望减少安全组规则配置、避免源 IP 暴露给公众的业务场景。
- 先准备:拥有 Cloudflare 托管的域名账号,以及可联网的甲骨文云 Linux 实例。
- 验收:通过外部网络请求域名,响应头显示 Cloudflare 节点 IP 而非甲骨文云公网 IP。
命令速用版
以下命令适用于大多数基于 Debian/Ubuntu 的甲骨文云实例,CentOS 需调整包管理器。
# 安装 cloudflared
curl -L `--output` cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# 登录认证
cloudflared tunnel login
# 创建隧道
cloudflared tunnel create `--name` oracle-tunnel
# 运行隧道(测试)
cloudflared tunnel run oracle-tunnel
为什么会这样
Cloudflare Tunnel 通过建立出站连接而非监听入站端口来实现流量转发。
传统服务器需要在防火墙开放 80 或 443 端口等待外部请求,这会暴露源站公网 IP。Cloudflare Tunnel 让服务器主动向 Cloudflare 边缘节点建立加密通道,外部用户先访问 Cloudflare,再由 Cloudflare 通过隧道将请求传回服务器。因此甲骨文云安全组无需开放任何入站端口,外部扫描也无法直接获取源 IP。
分步处理
配置过程分为安装客户端、认证账号、创建隧道、配置 DNS 和设置开机自启五个步骤。
1. 安装 cloudflared 客户端
在甲骨文云实例终端执行上述安装命令。安装完成后验证版本:cloudflared `--version`。
2. 认证 Cloudflare 账号
运行cloudflared tunnel login,终端会输出一个 URL。在本地浏览器打开该 URL,登录你的 Cloudflare 账号并授权,认证成功后终端会生成认证证书文件。
3. 创建隧道
运行cloudflared tunnel create `--name` oracle-tunnel。系统会返回一个 Tunnel ID,请记录该 ID。
4. 配置 DNS 和 ingress 规则
创建配置文件config.yml,指定隧道 ID 和内部服务地址(如 localhost:80)。随后运行cloudflared tunnel route dns oracle-tunnel yourdomain.com将域名绑定到隧道。
5. 设置为系统服务
运行cloudflared service install将隧道注册为 systemd 服务,确保实例重启后隧道自动连接。
怎么验证是否生效
验证核心是确认外部请求的入口 IP 是否为 Cloudflare 节点,且甲骨文云安全组关闭入站后服务仍可用。
1. 检查响应头
在本地终端执行curl -I https://yourdomain.com。查看cf-ray或server字段,若包含 Cloudflare 标识则说明流量经过隧道。
2. 检查源 IP 可见性
使用第三方 IP 查询工具 ping 你的域名,解析出的 IP 应为 Cloudflare 任播 IP,而非甲骨文云实例的公网 IP。
3. 关闭入站端口测试
在甲骨文云控制台“虚拟网络”->“安全列表”中,移除所有允许 80/443 入站的规则。若域名仍能访问,说明隧道工作正常且源 IP 已隐藏。
常见坑
配置过程中容易在安全组规则和服务自启环节出现问题。
- 安全组锁死:不要在隧道未运行成功前关闭甲骨文云安全组的 SSH 入站规则,否则无法远程修复。
- 认证过期:登录证书文件需妥善保存,若删除需重新运行 login 命令,否则隧道无法连接。
- 端口冲突:确保本地服务(如 Nginx)监听的端口与 tunnel config 中 ingress 规则一致。
- 实例重启失效:必须执行 service install 命令,仅后台运行进程会在实例重启后停止。
常见问题
配置 Tunnel 后还需要在甲骨文云开放 80 端口吗?
不需要。Cloudflare Tunnel 是出站连接,只需确保实例能访问互联网,无需在安全组开放任何入站端口。
Cloudflare Tunnel 会影响网站访问速度吗?
公开资料中没有看到可靠的量化数据。理论上流量会增加一次 Edge 节点转发,但具体延迟取决于实例与最近 Cloudflare 节点的网络质量。
如果 cloudflared 进程挂了怎么办?
若配置了 systemd 服务,系统会自动尝试重启。可执行systemctl status cloudflared查看状态,并通过journalctl -u cloudflared查看日志排查错误。
参考来源
- Cloudflare 官方文档,Cloudflare Tunnel 连接应用指南,https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
- Cloudflare 官方文档,cloudflared 安装与参数,https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/