客户端使用IPV6地址,访问CLB后端的IPv4服务,后端服务器如何获取到真实IP?

Published on
7 3.2~4.1 min

客户端使用IPv6地址访问阿里云CLB后端的IPv4服务场景下,需要在CLB四层监听及后端服务上开启Proxy Protocol来获取客户端真实IP地址。

前置条件

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

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

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

CLB侧配置

在监听详情页面,查看到ProxyProtocol配置字段为通过ProxyProtocol协议携带客户端源地址到后端服务器。如果未显示该字段,可单击编辑监听在配置页面中开启该功能。

image-20251203105953042

💡注意:该功能不支持在线平滑迁移,切换到Proxy Protocol需要业务停服升级,请谨慎配置。

后端服务器配置

nginx配置需要修改的地方:

# 日志
'"proxy_protocol_addr":"$proxy_protocol_addr",'
​
# 监听端口
listen 80 proxy_protocol;
​
# 后端获取的ip字段
proxy_set_header X-Real-IP $proxy_protocol_addr;
proxy_set_header X-Forwarded-For $proxy_protocol_addr;
proxy_set_header REMOTE-HOST $proxy_protocol_addr;

然后reload nginx:

nginx -t
systemctl reload nginx

关于Proxy Protocol补充

Proxy Protocol工作在传输层(TCP之上),在连接建立初期就发送一个包含客户端信息的头部:

  1. 客户端发起连接

  2. 负载均衡器接收连接

  3. 负载均衡器在与后端服务器建立连接前,先发送Proxy Protocol头

  4. 后端服务器解析这个头,获取真实客户端信息

  5. 服务器处理请求,记录真实IP


0