因为 Cloudflare 会在将数据包转发到您的服务器之前拦截它们,所以如果您查看客户端 IP,您将看到 Cloudflare 的 IP,而不是真实的客户端 IP。
您运行的一些服务可能需要知道真实的客户端 IP。在这些情况下,您可以使用代理协议,让 Cloudflare 将客户端 IP 传递给您的服务。是否发送代理信息取决于使用的是 TCP 还是 UDP。对于 TCP,Spectrum 支持添加 Proxy Protocol v1 ↗,这是 Amazon ELB 和 NGINX ↗ 支持的人类可读版本。对于 UDP 应用程序,Cloudflare 开发了一种名为 Simple Proxy Protocol 的自定义代理协议。请注意,对于 Cloudflare WAN(以前称为 Magic WAN)的 Spectrum 出口,不支持代理协议。
-
在 Cloudflare 仪表板中,转到 Spectrum 页面。
Go to Spectrum ↗ -
找到将使用 PROXY 协议的应用程序并选择 Configure(配置)。
-
从下拉菜单中,选择 PROXY Protocol v1。
当配置 TCP 应用程序使用 PROXY Protocol v1 时,Cloudflare 将在每个入站 TCP 连接前面添加 PROXY 协议纯文本标头。
PROXY 协议在每个连接前面添加一个标头,报告客户端 IP 地址和端口。PROXY 协议纯文本标头具有以下格式:
PROXY_STRING + single space + INET_PROTOCOL + single space + CLIENT_IP + single space + PROXY_IP + single space + CLIENT_PORT + single space + PROXY_PORT + "\r\n"IPv4 地址的示例 PROXY 协议行如下所示:
PROXY TCP4 192.0.2.0 192.0.2.255 42300 443\r\nIPv6 地址的示例 PROXY 协议行如下所示:
PROXY TCP6 2001:db8:: 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff 42300 443\r\n-
在 Cloudflare 仪表板中,转到 Spectrum 页面。
Go to Spectrum ↗ -
找到将使用 PROXY 协议的应用程序并选择 Configure(配置)。
-
从下拉菜单中,选择 PROXY Protocol v2。
当配置 TCP 应用程序使用 PROXY Protocol v2 时,Cloudflare 将在每个入站 TCP 连接前面添加 PROXY 协议二进制标头。
当配置 UDP 应用程序使用 PROXY Protocol v2 时,Cloudflare 将在流的第一个 UDP 数据报前面添加 PROXY 协议二进制标头。
PROXY 协议在每个连接前面添加一个标头,报告客户端 IP 地址和端口。
IPv4 传入地址的 PROXY 协议二进制标头具有以下格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Proxy Protocol v2 Signature |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|Command| AF | Proto.| Address Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+IPv6 传入地址的 PROXY 协议二进制标头具有以下格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| Proxy Protocol v2 Signature |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|Command| AF | Proto.| Address Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ IPv6 Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ IPv6 Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+当将 Spectrum 用于 UDP 时,可以通过使用 Simple Proxy Protocol 来获取客户端源 IP 和端口信息,这是一种专为 UDP 开发的轻量级协议。
要启用它,请在 Spectrum 应用程序上选择 Configure(配置),然后将 Simple Proxy Protocol 的设置切换为 On(开启)。
Simple Proxy Protocol 规定,您的源站也必须在发送给客户端的数据包前面添加相同的标头,包括原始客户端源信息。这样做是为了验证传入的数据包确实是发给客户端的。
有关 Simple Proxy Protocol 标头的更多信息,请参考 Simple Proxy Protocol 标头。