X-Forwarded-使用IPv6时为127.0.0.6

时间:2016-08-30 22:13:29

标签: curl http-headers ipv6 apache2.4

我使用mod_remoteip和Apache 2.4将X-Forwarded-For标头分配给客户端ip字段,以正确记录客户端IP,同时我在负载均衡器后面。负载均衡器为每个请求添加X-Forwaded-For标头,并始终通过IPv6访问Web服务器。

正如您在以下测试中所看到的,当从外部通过IPv6时,IPv6请求仅显示127.0.0.6作为客户端IP而不是真实客户端IP。使用IPv4,这很好用。

loadbancers IP为2a02:2e0:40c:102::5

网络服务器IP为2a02:2e0:40c:102:1::10

我的客户地址为5.199.135.102 + 2001:4ba0:ffff:ea::5

IPv6请求

curl -6 http://foo.bar/ -I

网络服务器上网络级别的请求/响应

####
T 2a02:2e0:40c:102::5:41974 -> 2a02:2e0:40c:102:1::10:80 [AP]
HEAD / HTTP/1.1.
User-Agent: curl/7.29.0.
Host: foo.bar.
Accept: */*.
X-Forwarded-For: 127.0.0.6.
Via: 1.1 [2a02:2e0:40c:ffff::3]:80.
X-Forwarded-For-Port: 57252.
.
##
T 2a02:2e0:40c:102:1::10:80 -> 2a02:2e0:40c:102::5:41974 [AP]
HTTP/1.1 302 Found.
Date: Tue, 30 Aug 2016 21:44:13 GMT.
Server: Apache.
Location: https://foo.bar/.
Content-Type: text/html; charset=iso-8859-1.
.

Apache日志输出IPv6

"127.0.0.6" 2a02:2e0:40c:102::5 - - [31/Aug/2016:00:07:15 +0200] "HEAD / HTTP/1.1" 302 - "-" "curl/7.29.0"

IPv4请求

curl -4 http://foo.bar/ -I

网络服务器上网络级别的请求/响应

####
T 2a02:2e0:40c:102::5:21050 -> 2a02:2e0:40c:102:1::10:80 [AP]
HEAD / HTTP/1.1.
User-Agent: curl/7.29.0.
Host: foo.bar.
Accept: */*.
Via: 1.1 1.2.3.4:80.
X-Forwarded-For: 5.199.135.102.
X-Forwarded-For-Port: 56352.
.

##
T 2a02:2e0:40c:102:1::10:80 -> 2a02:2e0:40c:102::5:21050 [AP]
HTTP/1.1 302 Found.
Date: Tue, 30 Aug 2016 22:06:08 GMT.
Server: Apache.
Location: https://foo.bar/.
Content-Type: text/html; charset=iso-8859-1.
.
.

Apache日志输出IPv4

"5.199.135.102" 2a02:2e0:40c:102::5 - - [31/Aug/2016:00:06:08 +0200] "HEAD / HTTP/1.1" 302 - "-" "curl/7.29.0"

以前有人有这个问题吗?如果您需要更多信息,请与我们联系。

THX提前 - mat1010

1 个答案:

答案 0 :(得分:0)

就我而言,问题是mod_remoteip

负载均衡器伪装在via头中的带有这样的括号的IPv6地址 Via: 1.1 [2a02:2e0:40c:ffff::3]:80

这是RFC7239 IPv6地址表示法的一部分,因为有时需要指定一个也用冒号分隔的端口。

mod_remoteip无法解释此类地址。在Lee Maguire的apache devel版本中,mod_remoteip documentation下面也提到了这一点。

  

我假设mod_remoteip当前不支持RFC 7239语法   http://tools.ietf.org/html/rfc7239

     

X-Forwarded-For:192.0.2.43,2001:db8:cafe :: 17

     

变为:

     

转发:for = 192.0.2.43,for =“[2001:db8:cafe :: 17]”