在Amazon Web Services上,我有一个运行Apache和mod_remoteip的EC2实例。 该实例位于托pipeElastic Load Balancer(ELB)的虚拟私有云(VPC)之后。
在mod_remoteipconfiguration文件中,我有:
RemoteIPTrustedProxy 172.22.64.0/20
RemoteIPTrustedProxy 172.22.80.0/20
这是ELB可以驻留的美国西部1a和美国西部1c子网。
在Amazon Route 53中,对于MyDomain.com和www.MyDomain.com,我都有指向ELB的A-IPv4别名logging(例如:dualstack.my-load-balancer-1-251757805.us-west-1。 elb.amazonaws.com。)Hosted Zone没有AAAA-IPv6logging。
这个设置很好,让我的代码很容易访问用户的IP地址。
但是,偶尔mod_remoteip会填充一个IPv6地址作为用户的IP地址。 此IPv6地址在我的设置中会导致问题,因为我使用的某些外部服务将不接受IPv6地址。 我必须保持限制在IPv4的IP地址。
我的印象是,因为我的域名在Hosted Zone中没有AAAA-IPv6 Aliaslogging,而且由于VPC中的ELB只使用IPv4地址( http://docs.aws.amazon.com/ElasticLoadBalancing/latest/ DeveloperGuide / elb-internet-facing-load-balancers.html )mod_remoteip永远不应该传递我的代码一个IPv6地址。 显然情况并非总是如此。
我的问题是:使用标准的amazon web services基础设施,或Apache / mod_remoteipconfiguration,有什么办法只允许访问者连接到使用IPv4的ELB?
dualstack.my-load-balancer-1-251757805.us-west-1.elb.amazonaws.com
这是一个混合logging,能够返回A和AAAA响应, 不pipe(afaik)如何在你的托pipe区域configuration它,但是testing表明它只会返回别名匹配的RRtypes的logging,如果你使用它作为别名目标。 作为一个CNAME ,当然,这将导致返回的任何一类logging。
我以前build议删除dualstack. 前缀,但正如你所说,与别名logging,你不能删除它 – 但进一步的testing表明,它不会造成任何伤害。
使用CNAME ,您可以select忽略它,或者如果由于某种原因,您希望仅使用ipv6,则可以添加ipv6. 前缀而不是dualstack. 。 但是,我会停止暗示这有什么区别,因为当指向dualstack.时,别名的行为是正确的dualstack. 进入,只返回A而不是AAAA ,即使你问。
如果如您所示,并且指向此ELB的域名没有configurationAAAA别名,并且Route 53未响应您的主机名称的AAAA请求的任何logging,则似乎最有可能是请求进入与IPv6的X-Forwarded-For:必须进来没有很好的理由 – 他们是蜘蛛,机器人等,并可能在此基础上被阻止。
我通常会在Host:头中使用ELB的IP地址(而不是来自我的某个域的正确主机名)或者在主机头中使用ELB主机名来查看传入的请求。 这些不是合法的请求,我用503 Service Unavailable (在HAProxy中有规则,我通常在ELB之后运行,以实现更细粒度的http路由控制)来阻止它们。
如果您有使用IPv6的合法网站访问者,这需要调查和解释,但是我的怀疑是您看到的stream量不是“真实”的stream量。
我还没有find一种方法来实际阻止“ELB内”。