启用代理协议
IBM Cloud Internet Services 在将包转发到服务器之前拦截这些包,以便在查找客户机 IP 时,您会看到 CIS的 IP 而不是真正的客户机 IP。 但是,您运行的某些服务可能需要您知道真正的客户机 IP。 在这些情况下,可以使用 CIS 的代理协议将客户机 IP 传递到服务。
发送代理信息取决于是使用 TCP 还是 UDP。 对于 TCP,Range 支持添加代理协议 v1,这是 Amazon ELB 和 NGINX 支持的人类可读版本。 对于 UDP 应用程序,CIS 已开发名为 Simple Proxy Protocol 的定制代理协议。
此功能需要企业套餐。 如果要升级,请联系您的帐户团队。
针对 TCP 启用代理协议 v1
- 登录 CIS 面板
- 单击 范围。
- 找到将使用 PROXY 协议的应用程序,然后单击 配置。
- 从菜单中,选择 PROXY Protocol v1。
当 TCP 应用程序配置为使用代理协议 v1时,CIS 会将每个入站 TCP 连接与代理协议明文头前置。
代理协议 v1 头
代理协议会在每个连接前加上一个报头,报告客户端 IP 地址和端口。 代理协议明文报头的格式如下:
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 TCP4 192.0.2.0 192.0.2.255 42300 443\r\n
以下是 IPv6 地址的代理协议行示例:
PROXY TCP6 2001:db8:: 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff 42300 443\r\n
对 TCP/UDP 启用代理协议 v2
- 登录到 CIS 仪表板。
- 单击 范围。
- 找到将使用代理协议的应用程序,然后单击 配置。
- 从菜单中,选择 PROXY Protocol v2。
当 TCP 应用程序配置为使用代理协议 v2时,CIS 将每个入站 TCP 连接与代理协议二进制头一起使用。
当 UDP 应用程序配置为使用 PROXY Protocol v2时,CIS 会在带有代理协议二进制头的流上添加第一个 UDP 数据报。
代理协议 v2 头
代理协议会在每个连接前加上一个报头,报告客户端 IP 地址和端口。
IPv4 入局地址的代理协议二进制头具有以下格式:
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 入局地址的代理协议二进制头具有以下格式:
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
为 UDP 启用简单代理协议
使用 UDP 时,可以使用简单代理协议 (这是专门为 UDP 开发的轻量级协议) 来获取客户机源 IP 和端口信息。
要将其启用,请在“范围”应用程序上单击 配置,并将 简单代理协议 的设置切换为 On
。
简单代理协议规定,您的源还必须为具有相同头的客户机预先发送包,包括原始客户机源信息。 这样做是为了验证传入的包实际上是针对客户机的。