跳转到内容
搜索文档

代理

最后更新 查看 MarkdownAgent 设置

您可以将 HTTP网络流量转发到 Gateway 以进行日志记录和过滤。Gateway 可以代理出站流量以及流向通过 Cloudflare Tunnel、通用路由封装 (GRE) 隧道或 IPsec 隧道连接的资源的流量。当用户连接到 Gateway 代理时,Gateway 将接受连接并建立一条指向源服务器的新且独立的连接。

要通过处于流量(Traffic)和 DNS 模式下的 Cloudflare One 客户端(Client)过滤 HTTP 和网络流量,需要使用 Gateway 代理。要在不部署 Cloudflare One 客户端的情况下代理 HTTP 流量,您可以在设备上配置 PAC 文件

代理算法

Gateway 使用 Happy Eyeballs 算法(该算法尝试以交错回退的方式建立 IPv4 和 IPv6 连接,并使用最先响应的地址族),按以下顺序代理流量:

  1. 用户的浏览器通过向 Gateway 发送 TCP SYN 分段来发起 TCP 握手。
  2. Gateway 向源服务器发送一个 SYN 分段。
  3. 如果源服务器返回 SYN-ACK 分段,Gateway 将分别在用户与 Gateway 之间以及 Gateway 与源服务器之间建立独立的 TCP 连接。
  4. Gateway 检查并过滤从用户接收到的流量。
  5. 如果流量通过检查,Gateway 将在用户和源服务器之间双向代理流量。
flowchart TD
    %% Accessibility
    accTitle: Gateway 代理工作原理
    accDescr: 描述 Gateway 代理如何使用 Happy Eyeballs 算法建立 TCP 连接并代理用户流量的流程图。

    %% Flowchart
    A[用户的设备向 Gateway 发送 TCP SYN] --> B[Gateway 向源站服务器发送 TCP SYN]
    B --> C{{源站服务器响应 TCP SYN-ACK?}}
    C -->|是| E[TCP 握手完成]
    C -->|否| D[连接失败]
    E --> F{{是否允许连接?}}
    F -->|允许策略| G[Gateway 双向代理流量]
    F -->|拦截策略| H[连接被防火墙策略拦截]

    %% Styling
    style D stroke:#D50000
    style G stroke:#00C853
    style H stroke:#D50000

支持的协议

Gateway 支持代理 TCP、UDP 和 ICMP 流量。

TCP

启用代理时,Gateway 将始终转发 TCP 流量。

默认情况下,TCP 连接尝试将在 30 秒后超时,空闲连接将在 8 小时后断开。

UDP

UDP 代理转发 UDP 流量,例如 VoIP、内部 DNS 请求和胖客户端应用程序。

HTTP/3 使用 UDP 上的 QUIC 协议。要检查 HTTP/3 流量,请同时开启 TLS 解密和 UDP 代理。Gateway 随后将拦截 HTTP/3 连接,并通过 HTTP/2 连接到源服务器。否则,HTTP/3 流量将绕过检查。有关特定浏览器行为的更多信息,请参阅 HTTP/3 检查

ICMP(Internet Control Message Protocol,互联网控制消息协议)

ICMP 代理允许 ICMP 流量通过 Gateway 到达您的私有网络。例如,这将允许 Cloudflare One 客户端用户运行诸如 pingtraceroute 的诊断命令到内部服务器 IP。

允许 ICMP 流量通过 cloudflared

要通过 Cloudflare Tunnel 使用 ICMP 代理,您可能需要配置 cloudflared 主机以允许 ICMP 流量通过 cloudflared

  1. 确保 ping_group_range 包含运行 cloudflared 的用户的组 ID (GID):

    a. 查找拥有 cloudflared 进程的用户:

    ps -aux | grep cloudflared
    johndoe         407  0.8  1.7 1259904 35296 ?       Ssl  21:02   0:00 /usr/bin/cloudflared --no-autoupdate tunnel run --token eyJhI...

    b. 获取 cloudflared 用户的组 ID:

    id -g johndoe
    10001

    c. 确定允许使用 ICMP 的组 ID:

    sudo sysctl net.ipv4.ping_group_range
    net.ipv4.ping_group_range= 0 10000

    d. 将该用户添加到该范围内的组中,或者更新该范围以包含该用户已在的组。要更新 ping_group_range

    echo 0 10001 | sudo tee /proc/sys/net/ipv4/ping_group_range

    e. 如果您需要使更改应用于已在运行的进程,则需要重新启动 cloudflared。要使更改在重新启动时持久存在,请更新您的 sysctl 参数:

    echo "net.ipv4.ping_group_range = 0 10001" | sudo tee -a /etc/sysctl.d/99-cloudflared.conf
  2. 如果您运行多个网络接口(例如 eth0eth1),请配置 cloudflared 使用面向外部互联网的接口:

    cloudflared tunnel run --icmpv4-src <IP of primary interface>

在您的环境中,修改 ping_group_range 参数以包含运行 cloudflared 的用户的组 ID (GID)。

默认情况下,cloudflared Docker 容器在容器内以名为 nonroot 的用户身份执行。nonroot 是存在于我们使用的基础镜像中的特定用户,其组 ID 硬编码为 65532。

开启 Gateway 代理

Gateway 代理开关仅适用于来自 Cloudflare One 客户端设备的流量。无论此设置如何,Gateway 都会始终代理使用 PAC 文件Browser Isolation 发送的流量。

  1. Cloudflare 仪表板中,转到Zero Trust > Traffic policies(流量策略) > Traffic settings(流量设置)
  2. 代理和检查设置中,开启允许 Secure Web Gateway 代理流量
  3. 选择 TCP
  4. (可选)根据您的使用场景,您可以选择 UDP 和/或 ICMP

这篇文档对您有帮助吗?