IPv6 üzerinden IPv4 gelen bağlantılarını tercih et


11

Kullanıcıların IP'sinin coğrafi konumlarının belirlenmesinden yararlanan bir sosyal / yerel hizmet yürütüyoruz. Sorun IPv6 ile coğrafi konum belirleme işleminin IPv4 ile olduğundan biraz daha dikkat çekici olmasıdır.

Nginx'li bir Ubuntu ana bilgisayarında IPv6 üzerinden gelen bağlantıları tercih etmenin bir yolu var mı? Yapılandırma şöyle görünür:

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

Yanıtlar:


23

IPv6 / IPv4 tercihi bir bağlantının başlatıcısı, yani web tarayıcısı tarafından belirlenir. Adres seçim kuralları RFC 6724'te tanımlanmıştır . Bunlar geçersiz kılsa da, yalnızca kullanıcı işletim sistemini yeniden yapılandırabilir.

Birini IPv4 kullanmaya zorlamanın tek yolu IPv6'yı hiç vermemektir. Açıkçası bu orta vadede bile pratik bir çözüm değil ...

Şimdi, orijinal soruna geri dönelim: IPv6 için coğrafi konum "IPv4'e göre biraz daha belirgindir."

Kısmen bu, coğrafi konum verilerinizi nereden alacağınıza çok bağlıdır. Örneğin Maxmind, IPv6 adresimi yalnızca hiçbir şehir ve ilginç bir koordinat kümesi olmadan "ABD" olarak verirken, Google en azından yaklaşık 50 mil uzakta oldukları metropol alanını doğru bir şekilde tanımlar. Hem Maxmind hem de Google düzeltmelerin bildirilmesine izin verir ve en azından Maxmind için herkes bunu herhangi bir IP adresi için yapabilir .

Bu durumun çok uzun sürmesini beklemem. IPv6 kullanımı genişlemeye devam ettikçe, bu tür coğrafi konum hizmetlerinin kullanıcıları IPv6 adresleri için daha fazla doğruluk talep edecek ve en azından ödeme yapan müşteriler için bu müşterileri başka bir yere gitmeleri için eninde sonunda teslim etmeleri gerekecektir.

Bu arada, uygulamanızın kullanıcıları bulmak için başka yolları olduğundan emin olmalısınız. Giriş yapmışlarsa, bulundukları yere ilişkin ipuçları için mevcut hesaplarını okuyabilirsiniz. Kullanıcıdan açıkça bir ülke seçmesini isteyebilirsiniz. Ve bunun gibi...

Yapabileceğiniz başka bir şey, web sitenizin her biri sayfalarınızın yüklenmeye çalıştığı yalnızca IPv4 için yalnızca bir alt etki alanı ve yalnızca IPv6 için yalnızca bir alt etki alanı sağlamaktır. Daha sonra, bunları istemci tarafı ile ilişkilendirebilir ve sunucuya geri rapor edebilirsiniz. Tesadüfen değil Maxmind zaten kendi web sitesinde yapıyor.


12
IP üzerinden coğrafi konum belirleme işleminin dinozor yoluna girmesini bekliyorum. Ummanız gereken en iyi şey, özellikle v4 blok ticareti daha fazla çekiş elde ettiğinde bir kıta çözünürlüğüdür.
Jim B

4
Zavallı adamı çıldırtacak olan şey, AFRINIC'ten IPv4 blokları alan ancak aslında Afrika'da olmayan tüm şirketler. Zaten bunlardan birkaçını vahşi doğada gördüm.
Michael Hampton

1
Evet, aynısını gördüm. Bir tüccar bloğu nedeniyle işlem gören bir demonun raydan çıktığını gördüm.
Jim B

15

Bu tür tercihler SRV kayıtları kullanılarak ifade edilebilir. Maalesef bunlar HTTP için desteklenmiyor. Yani istemcinin IPv4 ve IPv6 arasında tek başına seçim yaptığı bir durumla karşı karşıya kalırsınız.

Birçok müşteri, hangisinin kullanılacağına karar vermek için SYN + SYN-ACK gidiş-dönüş süresini kullanır. Bu nedenle, IPv6'da bir SYN-ACK paketinin gönderilmesini yavaşlatarak, çoğu istemcinin IPv4'ü tercih etmesini sağlayabilirsiniz. Ancak sitenizi kasten yavaşlatmak korkunç bir yaklaşımdır.

Bunun yerine bir adım geriye gidip soruna bakardım. Daha iyi coğrafi konum verileri istiyorsunuz. Bir ziyaretçi sitenize her eriştiğinde, IP adreslerinden birini hemen öğrenirsiniz. Bunun bir IPv4 veya IPv6 adresi olup olmayacağı, tarayıcılarının sunucunuzla iletişim kurmak için hangisini tercih ettiğine bağlıdır.

Sayfanızın içinde başka bir IP adresi tanımak için bir AJAX isteğinden yararlanabilirsiniz. IPv4 kullanan istemciler için AJAX isteğini yalnızca IPv6 etki alanına, IPv6 kullanan istemciler AJAX isteğini yalnızca IPv4 etki alanına gönderir.

AJAX isteği sunucuya ulaşır ulaşmaz kullanıcının IPv4 ve IPv6 adreslerini bilirsiniz. Bu yazışmayı bilmek, coğrafi konumlandırmayı ikisinden yalnızca birini tanımaktan daha iyi yapmanıza izin verecektir.

Genellikle AJAX isteğinin sunucuya hiç ulaşmadığı durumları görürsünüz. Bu kullanıcılar için en iyi şekilde yalnızca bir IP adresine dayalı olarak coğrafi konumlandırma yapmanız gerekir. Ancak bu AJAX isteğinin yanıtı istemci tarafında hiçbir şey için kullanılmadığı sürece, kullanıcı bu başarısız AJAX isteklerini bile fark etmez. Dolayısıyla, AJAX isteklerinden algılanan herhangi bir yavaşlama veya düzensiz davranış oluşmayacaktır.


2
Bu çok ustaca ve uygulanması kolay bir çözüm gibi görünüyor.
Dan Dascalescu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.