您可以将 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 连接,并使用最先响应的地址族),按以下顺序代理流量:
- 用户的浏览器通过向 Gateway 发送 TCP SYN 分段来发起 TCP 握手。
- Gateway 向源服务器发送一个 SYN 分段。
- 如果源服务器返回 SYN-ACK 分段,Gateway 将分别在用户与 Gateway 之间以及 Gateway 与源服务器之间建立独立的 TCP 连接。
- Gateway 检查并过滤从用户接收到的流量。
- 如果流量通过检查,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 流量。
启用代理时,Gateway 将始终转发 TCP 流量。
默认情况下,TCP 连接尝试将在 30 秒后超时,空闲连接将在 8 小时后断开。
UDP 代理转发 UDP 流量,例如 VoIP、内部 DNS 请求和胖客户端应用程序。
HTTP/3 使用 UDP 上的 QUIC 协议。要检查 HTTP/3 流量,请同时开启 TLS 解密和 UDP 代理。Gateway 随后将拦截 HTTP/3 连接,并通过 HTTP/2 连接到源服务器。否则,HTTP/3 流量将绕过检查。有关特定浏览器行为的更多信息,请参阅 HTTP/3 检查。
ICMP 代理允许 ICMP 流量通过 Gateway 到达您的私有网络。例如,这将允许 Cloudflare One 客户端用户运行诸如 ping 和 traceroute 的诊断命令到内部服务器 IP。
要通过 Cloudflare Tunnel 使用 ICMP 代理,您可能需要配置 cloudflared 主机以允许 ICMP 流量通过 cloudflared。
-
确保
ping_group_range包含运行cloudflared的用户的组 ID (GID):a. 查找拥有
cloudflared进程的用户:ps -aux | grep cloudflaredjohndoe 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 johndoe10001c. 确定允许使用 ICMP 的组 ID:
sudo sysctl net.ipv4.ping_group_rangenet.ipv4.ping_group_range= 0 10000d. 将该用户添加到该范围内的组中,或者更新该范围以包含该用户已在的组。要更新
ping_group_range:echo 0 10001 | sudo tee /proc/sys/net/ipv4/ping_group_rangee. 如果您需要使更改应用于已在运行的进程,则需要重新启动
cloudflared。要使更改在重新启动时持久存在,请更新您的sysctl参数:echo "net.ipv4.ping_group_range = 0 10001" | sudo tee -a /etc/sysctl.d/99-cloudflared.conf -
如果您运行多个网络接口(例如
eth0和eth1),请配置cloudflared使用面向外部互联网的接口:cloudflared tunnel run --icmpv4-src <IP of primary interface>
在您的环境中,修改 ping_group_range 参数以包含运行 cloudflared 的用户的组 ID (GID)。
默认情况下,cloudflared Docker 容器在容器内以名为 nonroot 的用户身份执行。nonroot 是存在于我们使用的基础镜像中的特定用户,其组 ID 硬编码为 65532。
Gateway 代理开关仅适用于来自 Cloudflare One 客户端设备的流量。无论此设置如何,Gateway 都会始终代理使用 PAC 文件或 Browser Isolation 发送的流量。
- 在 Cloudflare 仪表板 ↗中,转到Zero Trust > Traffic policies(流量策略) > Traffic settings(流量设置)。
- 在代理和检查设置中,开启允许 Secure Web Gateway 代理流量。
- 选择 TCP。
- (可选)根据您的使用场景,您可以选择 UDP 和/或 ICMP。