Prefere conexões de entrada IPv4 por IPv6

10

Nós administramos um serviço social / local que beneficia de geolocalização do IP dos usuários. O problema é que, com o IPv6, a geolocalização é um pouco mais espinhosa do que com o IPv4.

Existe uma maneira de preferir conexões de entrada via IPv6, em um host Ubuntu com nginx? A configuração é assim:

server {
    listen 80 default_server;
    listen [::]:80 ipv6only=off default_server;
}
    
por Dan Dascalescu 15.07.2015 / 04:22

2 respostas

23

A preferência IPv6 / IPv4 é determinada pelo iniciador de uma conexão, ou seja, o navegador da web. As regras de seleção de endereço são definidas em RFC 6724 . Embora possam ser substituídos, é apenas pelo usuário que reconfigura o sistema operacional.

A única maneira que você pode forçar alguém a usar o IPv4 é não oferecer IPv6. Obviamente, esta não é uma solução prática nem a médio prazo ...

Então, vamos voltar ao problema original: a geolocalização para o IPv6 é "um pouco mais spottier do que com o IPv4".

Em parte, isso depende muito de onde você obtém seus dados de geolocalização. O Maxmind, por exemplo, apenas fornece meu endereço IPv6 como "Estados Unidos" sem nenhuma cidade e um interessante conjunto de coordenadas , enquanto Google, pelo menos, identifica corretamente a área metropolitana que ainda estão a cerca de 50 milhas de distância. Tanto a Maxmind quanto o Google permitem o relato de correções, e pelo menos para o Maxmind qualquer um pode fazer isso para qualquer endereço IP.

Eu não esperaria que esta situação durasse muito tempo. À medida que o uso de IPv6 continua a se expandir, os usuários desses serviços de geolocalização demandarão maior precisão nos endereços IPv6, e eles terão que entregá-los eventualmente, pelo menos para clientes pagantes, para que esses clientes não venham para outro lugar.

Nesse meio tempo, você deve ter certeza de que seu aplicativo tem outras maneiras de localizar usuários. Se eles tivessem feito login, você poderia ler a conta existente em busca de pistas sobre sua localização. Você pode pedir ao usuário para selecionar explicitamente um país. E assim por diante ...

Uma outra coisa que você pode fazer é fornecer um subdomínio somente IPv4 e um subdomínio somente IPv6 do seu site, cada um dos quais suas páginas tentam carregar. Você pode correlacioná-los ao lado do cliente e reportar de volta ao servidor. Não coincidentemente, a Maxmind já está fazendo isso em seu próprio site.

    
por 15.07.2015 / 04:35
15

Tais preferências podem ser expressas usando registros SRV. Infelizmente, esses não são suportados por HTTP. Então você fica com uma situação em que o cliente sozinho está fazendo a escolha entre IPv4 e IPv6.

Muitos clientes usam o tempo de ida e volta do SYN + SYN-ACK para decidir qual dos dois usar. Portanto, diminuindo o envio de um pacote SYN-ACK no IPv6, você pode fazer com que a maioria dos clientes prefira o IPv4. Mas deliberadamente retardar seu site é uma abordagem terrível.

Em vez disso, dou um passo para trás e olho para o problema. Você quer melhores dados de geolocalização. Cada vez que um visitante acessa seu site, você conhece imediatamente um dos seus endereços IP. Se isso será um endereço IPv4 ou IPv6, depende de qual navegador prefere se comunicar com seu servidor.

Dentro da sua página, você pode usar uma solicitação AJAX para conhecer outro endereço IP. Para clientes que usam IPv4, envie a solicitação AJAX para um domínio somente IPv6, para clientes que usam IPv6, envie a solicitação AJAX para um domínio somente IPv4.

Assim que o pedido AJAX chegar ao servidor, você conhece os endereços IPv4 e IPv6 do usuário. Conhecer essa correspondência permitirá que você faça a geolocalização melhor do que você poderia saber, conhecendo apenas uma das duas.

Você frequentemente verá casos em que a solicitação AJAX nunca chega ao servidor. Para esses usuários, você terá que fazer a geolocalização, como pode fazer melhor, com base em apenas um endereço IP. Mas, desde que a resposta a essa requisição AJAX não seja usada para nada do lado do cliente, o usuário nem notará essas solicitações AJAX em falha. Portanto, nenhuma lentidão percebida ou comportamento errático será causado pelas solicitações do AJAX.

    
por 15.07.2015 / 09:32

Tags