通过proxy-protocol获取客户端真实ip(四层tcp监听)

通过Proxy Protocol获取客户端真实IP(四层TCP监听)

1. 使用场景

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

2. 前提条件

  • 启用Proxy Protocol之前,请确保您的后端服务器支持Proxy Protocol v2版本,否则会导致新建连接失败;
    Nginx Plus R16及以后版本或者开源Nginx 1.13.11及以后版本支持Proxy Protocol v2版本;
  • 如果实例的多个监听挂载同一组后端服务器,必须将所有实例的监听都开启Proxy Protocol功能;
  • 开启获取客户端真实IP设置创建的TCP监听器不可关闭获取设置。如需修改,请重新创建不开启此配置的监听器,并重新配置后端服务器。

3. 步骤一:创建TCP监听器

登录云控制台,在【负载均衡】列表中,点击创建好的实例ID,进入负载均衡详情页面;
在“监听器”选项卡下,点击【创建监听器】,并选择TCP监听器;
ProxyProtocol配置:填写监听器基本配置信息,勾选“通过ProxyProtocol携带客户端源IP到后端服务器”的选项,创建监听器。

4. 步骤二:为后端服务器的监听服务开启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;         
        #...     
    } 
}

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

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

个结果匹配 ""

    无结果匹配 ""