本文为您介绍NLB如何获取客户端真实IP,及通过Proxy Protocol获取客户端真实IP的场景和配置教程。

NLB如何获取客户端真实IP

获取客户端真实IP
  • 正常情况下,NLB通过源地址透传,在后端服务器上获取的源IP即为客户端真实IP。您无需在监听开启Proxy Protocol,请确保您已开启服务器组的客户端地址保持开关。具体操作,请参见:客户端地址保持
  • 以下场景中,NLB无法实现源地址透传,您需要在监听开启Proxy Protocol来获取客户端真实IP。
    说明 NLB监听支持通过Proxy Protocol携带原始连接信息(源IP、目的IP、源端口、目的端口等)并添加到TCP或UDP数据头中,且不会丢弃或覆盖任何原有数据。NLB仅支持Proxy Protocol v2版本。更多信息,请参见The PROXY protocol
    场景说明
    场景一客户端使用IPv6地址访问NLB后端的IPv4服务
    场景二开启TCPSSL监听

    TCPSSL监听不能选择已开启客户端地址保持功能的服务器组。

    场景三挂载IP类型的后端服务

    IP类型的服务器组不支持开启客户端地址保持功能。NLB实例挂载了IP类型的后端服务时,如需获取客户端真实IP,必须在监听开启Proxy Protocol。

NLB通过Proxy Protocol获取客户端真实IP的配置教程

前提条件

  • 您已经创建NLB实例并为该实例添加了监听。具体操作,请参见创建和管理NLB实例
  • 您已经创建可用的服务器组并添加了后端服务器。具体操作,请参见创建和管理服务器组
    • 后端服务器已部署应用服务。本文以后端服务器已部署Nginx服务为例,具体操作,请参见手动部署LNMP环境(CentOS 7)
    • 启用Proxy Protocol之前,请确保您的后端服务器支持Proxy Protocol v2版本,否则会导致新建连接失败。
      说明 Nginx Plus R16及以后版本或者开源Nginx 1.13.11及以后版本支持Proxy Protocol v2版本。
  • 如果实例的多个NLB监听挂载同一组后端服务器,必须将所有实例的监听都开启Proxy Protocol功能。

步骤一:监听开启Proxy Protocol

您可以在创建监听或者修改监听时,开启Proxy Protocol。本文以创建监听为例开启Proxy Protocol,如果您已经为目标NLB实例添加监听但未开启Proxy Protocol,您可以在修改监听时开启Proxy Protocol。更多信息,请参见修改监听

  1. 登录网络型负载均衡NLB控制台
  2. 在顶部菜单栏,选择NLB实例的所属地域。
  3. 实例页面,找到目标实例,选择以下一种方法,打开监听配置向导。
    • 操作列单击创建监听
    • 单击实例ID,然后单击监听页签,在监听页签,单击监听列表上方的创建监听
    • 单击实例ID,然后单击监听页签,在监听页签,单击配置向导中的创建监听
    • 单击实例ID,然后单击监听页签,在监听页签右上角单击创建监听
  4. 配置监听配置向导页面,完成参数配置,然后单击下一步

    展开高级配置,打开开启ProxyProtocol开关,开启后NLB可以通过Proxy Protocol协议携带客户端真实IP至后端服务器。

    此处仅列出和本文强相关的配置项。关于其余参数的配置,请参见:
  5. 可选:配置SSL证书配置向导页面,选择服务器证书及设置高级配置参数。
    仅TCPSSL监听需要执行该步骤。更多信息,请参见创建TCPSSL监听
  6. 选择服务器组配置向导页面,选择已创建的服务器组,查看后端服务器信息,然后单击下一步
  7. 配置审核配置向导页面,确认配置信息,单击提交

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

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

登录后端服务器,执行以下命令,开启Proxy Protocol获取客户端真实IP。
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