在AWS VPC中获取客户端ip not load balancer ip

时间:2015-03-24 03:52:54

标签: amazon-web-services amazon-vpc

我正在尝试在Amazon Virtual Private Cloud上的链接中设置系统。 https://docs.google.com/presentation/d/1H3s9O2GnM52cfKWiyt2oK92SSCEU-K1Srz5sw2uuRhU/edit?usp=sharing

我的问题是“是否有可能让TCP服务器知道真正的TCP客户端的IP?” 我总是从负载均衡器获得ip,并且不知道如何从真实客户端获取ip。

非常感谢。

1 个答案:

答案 0 :(得分:4)

根据documentation

  

代理协议

     

使用为TCP / SSL连接配置的负载平衡器时,代理协议标头可帮助您识别客户端的IP地址。由于负载均衡器拦截客户端与后端实例之间的流量,因此后端实例的访问日志包含负载均衡器的IP地址,而不是原始客户端的IP地址。启用代理协议后,负载均衡器会添加一个人类可读的格式标头,其中包含连接信息,例如客户端的源IP地址,目标IP地址和端口号。然后,标头作为请求的一部分发送到后端实例。您可以解析请求的第一行以检索客户端的IP地址和端口号。

     

代理协议行是一行,以回车符和换行符(“\ r \ n”)结尾。它采用以下形式:

     

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 198.51.100.22 203.0.113.7 35646 80\r\n

     

IPv6的代理协议行采用相同的格式,但它以TCP6开头,地址为IPv6格式。

     

以下是IPv6代理协议的示例。

     

PROXY TCP6 2001:DB8::21f:5bff:febf:ce22:8a2e 2001:DB8::12f:8baa:eafc:ce29:6b2e 35646 80\r\n

     

如果客户端使用IPv6连接,则标头中代理的地址将是负载均衡器的公共IPv6地址。此IPv6地址与从负载均衡器的DNS名称解析的IP地址匹配,该DNS名称以ipv6或dualstack为前缀。如果客户端使用IPv4连接,则标头中代理的地址是负载均衡器的私有IPv4地址,该地址无法通过EC2-Classic网络外部的DNS查找进行解析。

     

有关启用代理协议标头的信息,请参阅Enable or Disable Proxy Protocol Support