您可以通过传统型负载均衡CLB的四层监听获取客户端真实IP地址。

背景信息

正常情况下,对于四层负载均衡,在后端服务器上获取的源IP即为客户端真实IP。但如果对客户端IP地址做了NAT转换,则后端服务器无法直接获取客户端的真实IP。CLB四层监听支持通过Proxy Protocol携带原始连接信息(源IP、目的IP、源端口、目的端口等)添加到TCP数据头中且不会丢弃或覆盖任何原有数据,CLB仅支持Proxy Protocol v2版本。更多信息,请参见The PROXY protocol

适用场景

通过Proxy Protocol获取客户端真实IP适用于场景:CLB实例IP类型为IPv6,后端服务器的IP类型为IPv4。

前提条件

  • 启用Proxy Protocol之前,请确保您的后端服务器支持Proxy Protocol v2版本,否则会导致新建连接失败。

    Nginx Plus R16及以后版本或者开源Nginx 1.13.11及以后版本支持Proxy Protocol v2版本。

  • 如果实例的多个CLB监听挂载同一组后端服务器,必须将所有实例的监听都开启Proxy Protocol功能。

步骤一:创建TCP或UDP监听

  1. 登录传统型负载均衡CLB控制台
  2. 在顶部菜单栏,选择CLB实例所属的地域。
  3. 实例管理页面,找到目标实例,在操作列单击监听配置向导
  4. 根据配置向导,完成监听配置。
    • 选择负载均衡协议:选择TCP或者UDP
    • ProxyProtocol配置:在高级配置右侧单击修改,选中通过ProxyProtocol协议携带客户端源地址到后端服务器,选中我确认知晓上述风险,单击下一步
    更多配置说明,请参见添加TCP监听添加UDP监听

步骤二:为后端服务器的监听服务开启Proxy Protocol

在监听开启Proxy Protocol 后,后端服务器的监听服务也需要开启Proxy Protocol,否则将出现转发不通或健康检查失败等问题。

登录后端服务器,执行以下命令,配置Proxy Protocol获取源地址功能。
http {
    #...
    server {
        listen 80   proxy_protocol;
        listen 443  ssl proxy_protocol;
        #...
    }
}
   
stream {
    #...
    server {
        listen 12345 proxy_protocol;
        #...
    }
}

步骤三:获取客户端真实源IP地址

  • 携带客户端IPv4地址的Proxy Protocol v2二进制头格式如下所示:IPv4
  • 携带客户端IPv6地址的Proxy Protocol v2二进制头格式如下所示:IPv6