优先于IPv6的IPv4传入连接


11

我们运行一项社会/本地服务,该服务得益于对用户IP进行地理位置定位。问题在于,与IPv4相比,使用IPv6进行地理位置定位要重要得多。

在使用nginx的Ubuntu主机上,是否有办法优先使用传入连接而不是IPv6?配置看起来像这样:

server {
    listen 80 default_server;
    listen [::]:80 ipv6only=off default_server;
}

Answers:


23

IPv6 / IPv4首选项由连接的发起者(即Web浏览器)确定。地址选择规则在RFC 6724中定义。尽管可以覆盖这些内容,但这仅是由用户重新配置其操作系统来完成的。

强迫某人使用IPv4 的唯一方法是完全不提供IPv6。显然,即使从中期来看,这也不是一个切实可行的解决方案。

因此,让我们回到最初的问题:IPv6的地理位置“比IPv4的定位更重要”。

在某种程度上,这很大程度上取决于您从何处获取地理位置数据。例如,Maxmind仅给出了我的IPv6地址为“美国”,根本没有城市,并且显示了一组有趣的坐标,而Google至少正确地识别了距该城市大约50英里的大都市区。Maxmind和Google都允许报告更正,至少对于Maxmind,任何人都可以针对任何IP地址执行此操作

我不希望这种情况持续很长时间。随着IPv6使用的不断扩展,此类地理定位服务的用户将要求对IPv6地址具有更高的准确性,并且最终将必须交付这些结果(至少对于付费客户而言),以免这些客户转到其他地方。

同时,您应该确保您的应用程序还有其他方式可以找到用户。如果他们登录,则可以阅读其现有帐户以获取有关其位置的线索。您可以要求用户明确选择一个国家。等等...

您可以做的另一件事是提供网站的仅IPv4子域和仅IPv6子域,您的页面将尝试加载其中的每个子域。然后,您可以将它们与客户端相关联,并向服务器报告。并非偶然,Maxmind已经在自己的网站上进行了此操作。


12
我希望通过IP进行地理定位能够像恐龙一样。您最好期望的是大陆分辨率,尤其是当v4大宗交易受到更多关注时。
Jim B

4
真正使穷人疯狂的是,所有从AFRINIC获得IPv4区块但实际上不在非洲的公司。我已经在野外发现了其中一些。
迈克尔·汉普顿

1
是的,我见过一样。我看到一个文档跟踪演示由于交易量大而脱轨。
Jim B

15

可以使用SRV记录来表达这种偏好。不幸的是,HTTP不支持这些功能。因此,您会遇到这样的情况:仅客户端在IPv4和IPv6之间进行选择。

许多客户端使用SYN + SYN-ACK的往返时间来决定使用两者中的哪一个。因此,通过减慢IPv6上SYN-ACK数据包的发送速度,可以使大多数客户端喜欢IPv4。但是,故意放慢网站速度是一种糟糕的方法。

相反,我会退后一步来看看问题。您想要更好的地理位置数据。每次访客访问您的站点时,您都​​会立即知道他们的IP地址之一。这将是IPv4还是IPv6地址,取决于其浏览器首选与您的服务器进行通信。

在页面内部,您可以利用AJAX请求来了解另一个IP地址。对于使用IPv4的客户端,将AJAX请求发送到仅IPv6的域,对于使用IPv6的客户端,将AJAX请求发送到仅IPv4的域。

一旦AJAX请求到达服务器,您就知道用户的IPv4和IPv6地址。知道这种对应关系将比只知道两者之一更好地进行地理定位。

您经常会看到AJAX请求永远不会到达服务器的情况。对于那些用户,您将不得不做地理定位,因为您最好仅基于一个IP地址。但是,只要客户端不使用对AJAX请求的答复,用户甚至都不会注意到那些失败的AJAX请求。因此,AJAX请求不会导致任何可察觉的速度下降或行为异常。


2
这似乎是一个非常巧妙且易于实现的解决方案。
Dan Dascalescu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.