Skip to content

Proxy 代理模式 vs DNS Only 模式

Cloudflare DNS 记录有两种模式:代理模式(橙色云朵)DNS Only 模式(灰色云朵)

核心区别

特性Proxy (橙色云朵)DNS Only (灰色云朵)
图标☁️ 橙色☁️ 灰色
流量经过 Cloudflare直连源站
IP 地址Cloudflare IP源站真实 IP
功能全部 Cloudflare 功能仅 DNS 解析
HTTPSCloudflare 证书源站自备证书
缓存启用不启用
防护DDoS/WAF 防护无防护

Proxy 代理模式 (橙色云朵)

工作流程

用户 → Cloudflare CDN → 源站
       (全球加速/安全防护)

功能特性

1. 性能优化

  • 全球 CDN 加速
  • 静态资源缓存
  • HTTP/3 支持
  • Brotli 压缩
  • 自动压缩图片
  • HTTP/2 推送

2. 安全防护

  • DDoS 攻击防护
  • WAF (Web 应用防火墙)
  • Rate Limiting (速率限制)
  • Bot 管理
  • 热link 保护
  • 隐藏源站 IP

3. 可靠性

  • 自动负载均衡
  • 智能路由
  • 故障转移
  • 源站健康检查

4. SSL/TLS

  • 免费证书
  • 自定义证书上传
  • Universal SSL
  • Full SSL 模式
  • HSTS 支持

何时使用 Proxy

推荐使用的场景:

  • 网站需要加速
  • 需要隐藏源站 IP
  • 需要防护 DDoS 攻击
  • 需要 WAF 保护
  • 需要缓存静态资源
  • 使用 Cloudflare Workers
  • 使用 Pages Functions

不建议使用的场景:

  • 源站服务运行在非标准端口
  • 源站需要真实访问 IP
  • 特定协议不支持代理(如 FTP、SSH)

Proxy 模式下的限制

不支持的服务:
- FTP (21)
- SSH (22)
- SMTP (25)
- 非标准 HTTP 端口
- 需要源站真实 IP 的服务

支持的标准端口:
HTTP:  80, 8080, 8880, 2052, 2082
HTTPS: 443, 2053, 2083, 2087, 2096, 8443

DNS Only 模式 (灰色云朵)

工作流程

用户 → 直接连接源站
       (仅 DNS 解析)

功能特性

仅提供 DNS 解析服务:

  • DNS 记录管理
  • DNSSEC 支持
  • 自定义 DNS 记录
  • 快速 DNS 更新

不包含:

  • 无 CDN 加速
  • 无缓存功能
  • 无安全防护
  • 无 DDoS 防护
  • 源站 IP 暴露

何时使用 DNS Only

推荐使用的场景:

  • 服务运行在非标准端口
  • 需要 SSL 直连源站
  • FTP/SFTP/SSH 服务
  • 邮件服务器 (MX 记录)
  • 数据库直连
  • 内网服务
  • 需要看到真实访问 IP
  • 第三方服务验证(如域名验证)

DNS Only 示例配置

# Web 服务器 - 代理模式
A    www         192.0.2.1    (橙色云朵)

# FTP 服务器 - DNS Only
A    ftp         192.0.2.2    (灰色云朵)

# 邮件服务器 - DNS Only
A    mail        192.0.2.3    (灰色云朵)
MX   @           mail.example.com

# 数据库 - DNS Only
A    db          192.0.2.4    (灰色云朵)

# API 服务器 - 代理模式
A    api         192.0.2.5    (橙色云朵)

切换模式

切换到 Proxy 模式

  1. 登录 Cloudflare Dashboard
  2. 选择域名 → DNS → Records
  3. 点击记录旁的 橙色云朵 图标

注意: 切换到 Proxy 模式后:

  • 原有的 SSL 证书需要配置 Cloudflare SSL
  • 源站端口必须是支持的 HTTP(S) 端口

切换到 DNS Only 模式

  1. 登录 Cloudflare Dashboard
  2. 选择域名 → DNS → Records
  3. 点击记录旁的 灰色云朵 图标

注意: 切换到 DNS Only 后:

  • 失去 Cloudflare 的所有安全防护
  • 源站 IP 会暴露
  • 无法使用 Cloudflare 缓存

常见配置场景

场景 1: 标准网站

A     @           192.0.2.1    (橙色云朵)
A     www         192.0.2.1    (橙色云朵)
CNAME mail        mail.example.com (灰色云朵)
MX    @           mail.example.com

场景 2: 带非标准端口服务

# Web - 代理
A     www         192.0.2.1    (橙色云朵)

# 游戏服务器端口 7777 - DNS Only
A     game        192.0.2.2    (灰色云朵)

# API - 代理
A     api         192.0.2.3    (橙色云朵)

场景 3: 开发环境

# 生产环境 - 代理
A     www         192.0.2.1    (橙色云朵)

# 开发环境 - DNS Only (端口 3000)
A     dev         192.0.2.2    (灰色云朵)

场景 4: 多服务部署

# Web - 代理
A     @           192.0.2.1    (橙色云朵)

# API - 代理
A     api         192.0.2.2    (橙色云朵)

# FTP - DNS Only
A     ftp         192.0.2.3    (灰色云朵)

# Mail - DNS Only
A     mail        192.0.2.4    (灰色云朵)
MX    @           mail.example.com

# DB - DNS Only
A     db          192.0.2.5    (灰色云朵)

获取真实访问 IP

Proxy 模式下获取真实 IP

当使用 Proxy 模式时,源站看到的 IP 是 Cloudflare 的 IP。获取真实访问 IP 的方法:

方法 1: 查看请求头

javascript
// Express.js
app.get('/', (req, res) => {
  const realIP = req.headers['cf-connecting-ip'] ||
                 req.headers['x-forwarded-for'];
  console.log('Real IP:', realIP);
});
php
// PHP
$realIP = $_SERVER['HTTP_CF_CONNECTING_IP'] ??
          $_SERVER['HTTP_X_FORWARDED_FOR'];
echo "Real IP: $realIP";
python
# Python Flask
from flask import request
@app.route('/')
def index():
    real_ip = request.headers.get('CF-Connecting-IP') or \
              request.headers.get('X-Forwarded-For')
    return f"Real IP: {real_ip}"
nginx
# Nginx
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
# ... 更多 Cloudflare IP 段
real_ip_header CF-Connecting-IP;

方法 2: 使用 Cloudflare IP 模块

# Nginx + ngx_http_cf_module
server {
    # 自动处理 Cloudflare IP
    set_real_ip_from cloudflare;
    real_ip_header CF-Connecting-IP;
}

Cloudflare 请求头

CF-Connecting-IP: 203.0.113.1          # 真实客户端 IP
CF-Ray: 1234567890abcde-KIX            # 请求 ID
CF-IPCountry: US                       # 客户端国家
CF-Visitor: {"scheme":"https"}         # 访问协议
CF-Worker:                             # Worker 路径
X-Forwarded-For: 203.0.113.1           # 转发 IP
X-Forwarded-Proto: https               # 转发协议

源站配置建议

接受 Cloudflare IP

nginx
# Nginx 配置
# 仅允许 Cloudflare 访问(生产环境)
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
deny all;

保持 DNS Only 端口公开

nginx
# DNS Only 服务可以限制访问
# 例如 FTP
allow 203.0.113.0/24;  # 特定 IP
deny all;

混合模式最佳实践

推荐配置

# 公开 Web - Proxy (橙色)
A     @           192.0.2.1    (橙色云朵)
A     www         192.0.2.1    (橙色云朵)

# API - Proxy (橙色)
A     api         192.0.2.2    (橙色云朵)

# 静态资源 - Proxy (橙色)
A     cdn         192.0.2.3    (橙色云朵)

# 邮件 - DNS Only (灰色)
A     mail        192.0.2.4    (灰色云朵)
MX    @           mail.example.com

# FTP - DNS Only (灰色)
A     ftp         192.0.2.5    (灰色云朵)

# 开发环境 - DNS Only (灰色)
A     dev         192.0.2.6    (灰色云朵)

安全建议

  1. 所有公开 Web 服务 使用 Proxy 模式
  2. 邮件服务器 (MX) 使用 DNS Only
  3. 非标准端口服务 使用 DNS Only
  4. 内部工具 使用 DNS Only + IP 白名单
  5. 生产 API 使用 Proxy 模式
  6. 开发环境 使用 DNS Only 或独立子域名

故障排查

Proxy 模式无法访问

问题: 开启 Proxy 后网站无法访问

排查步骤:

  1. 检查源站是否支持 HTTP/HTTPS
  2. 确认源站端口是否为 Cloudflare 支持的端口
  3. 检查源站防火墙是否阻止 Cloudflare IP
  4. 验证 SSL/TLS 配置是否正确

DNS Only 无法访问

问题: DNS 无法解析

排查步骤:

  1. 检查 DNS 记录是否正确
  2. 等待 DNS 传播 (最多 24-48 小时)
  3. 使用 dignslookup 验证
  4. 检查源站服务是否运行

切换模式后无法访问

问题: 切换模式后出现 520/521/522 错误

排查步骤:

520 = Web 服务器返回未知错误
521 = Web 服务器拒绝连接
522 = 连接超时
523 = 源站不可达
525 = SSL 握手失败
526 = 无效的 SSL 证书

解决方案:

  • 检查源站服务状态
  • 验证 SSL 证书
  • 检查防火墙规则
  • 确认端口监听状态

基于 MIT 许可证发布。