PROXY Protocol
PROXY Protocol 用于在多级转发链路中传递用户的真实来源 IP,使后端服务能够识别客户端的实际地址,而不是中间节点的地址。
普通转发时,后端看到的是入口机或出口机的 IP。开启并正确配置 PROXY Protocol 后,真实 IP 信息会随数据流一起传递,后端即可获取客户端的原始地址。
工作原理
PROXY Protocol 通过在 TCP 连接建立后、业务数据发送前,插入一行包含来源 IP/端口和目标 IP/端口的头部信息来传递真实 IP。接收方解析该头部后,可将其中的地址用作客户端真实地址。
典型链路示意:
text
用户 -> 中转(入口)-> 落地(出口)-> 后端服务在这条链路中:
- 中转(入口)负责发送 PROXY Protocol 头,将用户真实 IP 告知下一跳。
- 落地(出口)负责接收该头,并可选择继续向后端发送。
- 后端服务需要支持 PROXY Protocol,才能正确读取真实 IP。
配置项说明
PROXY Protocol 在端口转发、隧道或转发链的高级设置中配置,规则引用这些资源后会继承对应的配置。
| 配置项 | 含义 |
|---|---|
| accept proxy(接收) | 接收上一跳传来的真实 IP 信息 |
| send proxy(发送) | 将真实 IP 信息发送给下一跳 |
入口发送和出口接收应成对开启。
- 只开启入口发送时,PROXY 头会被当作普通数据继续传递,下游无法解析。
- 只开启出口接收时,出口会等待一个并不存在的头,导致连接挂起或失败。
GOST 隧道推荐配置
上游已携带 PROXY Protocol 头
适用于上游本身已通过 PROXY Protocol 传入真实 IP 的场景:
- 开启入口接收上游,读取上游提供的真实 IP。
- 开启入口发送到出口 + 出口接收入口,让真实 IP 穿越隧道。
- 若后端支持 PROXY Protocol,开启出口发送到目标。
上游为普通 TCP 连接
适用于用户直接连接入口,上游不携带 PROXY Protocol 头的场景:
- 入口接收上游保持关闭,由入口连接地址自动生成真实 IP 信息。
- 开启入口发送到出口 + 出口接收入口。
- 若后端支持 PROXY Protocol,开启出口发送到目标。
兼容性说明
| 维度 | 说明 |
|---|---|
| 协议支持 | 仅适用于 TCP,UDP 不支持 PROXY Protocol |
| 后端要求 | 后端服务必须显式支持 PROXY Protocol(如 Nginx proxy_protocol on、HAProxy 等) |
| 面板限制 | 不支持的转发方式或场景下,面板会自动禁用相关开关 |
| 多级链路 | 每一跳是否开启接收/发送,需根据实际链路路径单独配置 |
常见误区
- 只在入口开启 send proxy 不够:后端收不到真实 IP,除非出口也配置了 accept 并向后端继续发送。
- 后端不支持时不要开启 send proxy to target:后端会将 PROXY 头当作业务数据处理,导致连接异常或协议解析错误。
- UDP 流量无效:PROXY Protocol 不适用于 UDP,UDP 转发无法通过此方式传递真实 IP。
- 多级链路需逐跳配置:中间每一个节点都需要根据其在链路中的位置,分别配置接收和发送,不能只配置首尾两端。