Lebih suka koneksi masuk IPv4 melalui IPv6

11

Kami menjalankan layanan sosial / lokal yang mendapat manfaat dari geolokasi IP pengguna. Masalahnya adalah bahwa dengan IPv6, geolokasi agak sedikit lebih berbintik daripada dengan IPv4.

Apakah ada cara untuk lebih suka koneksi masuk melalui IPv6, pada host Ubuntu dengan nginx? Konfigurasi terlihat seperti ini:

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

Jawaban:

23

Preferensi IPv6 / IPv4 ditentukan oleh pemrakarsa koneksi, yaitu browser web. Aturan pemilihan alamat didefinisikan dalam RFC 6724 . Meskipun ini dapat diganti, hanya dengan pengguna mengkonfigurasi ulang sistem operasinya.

Satu-satunya cara Anda dapat memaksa seseorang untuk menggunakan IPv4 adalah dengan tidak menawarkan IPv6 sama sekali. Jelas ini bukan solusi praktis bahkan dalam jangka menengah ...

Jadi, mari kita kembali ke masalah aslinya: Geolokasi untuk IPv6 adalah "sedikit lebih berbintik daripada dengan IPv4."

Pada bagian ini sangat tergantung pada di mana Anda mendapatkan data geolokasi Anda. Maxmind misalnya hanya memberikan alamat IPv6 saya sebagai "Amerika Serikat" tanpa kota sama sekali dan satu set koordinat yang menarik , sementara Google setidaknya mengidentifikasi dengan benar area metropolitan yang masih berjarak sekitar 50 mil. Maxmind dan Google memungkinkan untuk melaporkan koreksi, dan setidaknya untuk Maxmind siapa pun dapat melakukan ini untuk alamat IP apa pun.

Saya tidak akan mengharapkan situasi ini berlangsung lama. Ketika penggunaan IPv6 terus berkembang, pengguna layanan geolokasi akan menuntut akurasi yang lebih besar untuk alamat IPv6, dan mereka harus mengirimkannya pada akhirnya, setidaknya untuk pelanggan yang membayar, agar pelanggan tersebut tidak pergi ke tempat lain.

Sementara itu, Anda harus yakin bahwa aplikasi Anda memiliki cara lain untuk menemukan pengguna. Jika mereka masuk, Anda bisa membaca akun mereka yang ada untuk petunjuk tentang lokasi mereka. Anda dapat meminta pengguna untuk memilih negara secara eksplisit. Dan seterusnya...

Satu hal lain yang dapat Anda lakukan adalah menyediakan subdomain khusus IPv4 dan satu-satunya subdomain IPv6 di situs web Anda, yang masing-masing halamannya coba muat. Anda kemudian dapat menghubungkannya dengan sisi klien dan melaporkan kembali ke server. Bukan kebetulan Maxmind sudah melakukan ini di situs web mereka sendiri.

Michael Hampton
sumber
12
Saya berharap bahwa geolokasi melalui IP untuk pergi jalan dinosaurus. Yang terbaik yang Anda harapkan adalah resolusi benua, terutama ketika perdagangan blok v4 mendapat lebih banyak daya tarik.
Jim B
4
Apa yang benar-benar akan membuat orang miskin menjadi gila adalah semua perusahaan yang mendapatkan blok IPv4 dari AFRINIC tetapi sebenarnya tidak di Afrika. Saya sudah melihat beberapa di alam liar.
Michael Hampton
1
Yup, saya pernah melihat hal yang sama. Saya melihat demo doctracking keluar dari rel karena blok diperdagangkan.
Jim B
15

Preferensi semacam itu dapat diungkapkan dengan menggunakan catatan SRV. Sayangnya itu tidak didukung untuk HTTP. Jadi Anda dibiarkan dengan situasi di mana klien sendiri yang membuat pilihan antara IPv4 dan IPv6.

Banyak klien menggunakan waktu bolak-balik SYN + SYN-ACK untuk memutuskan yang mana dari keduanya yang akan digunakan. Jadi dengan memperlambat pengiriman paket SYN-ACK pada IPv6, Anda dapat membuat sebagian besar klien lebih memilih IPv4. Tapi sengaja memperlambat situs Anda adalah pendekatan yang mengerikan.

Sebaliknya saya akan mengambil langkah mundur dan melihat masalahnya. Anda ingin data geolokasi lebih baik. Setiap kali pengunjung mengakses situs Anda, Anda segera mengenal salah satu alamat IP mereka. Apakah itu akan menjadi alamat IPv4 atau IPv6 tergantung pada browser mana yang lebih disukai untuk berkomunikasi dengan server Anda.

Di dalam halaman Anda, Anda dapat menggunakan permintaan AJAX untuk mengenal alamat IP lain. Untuk klien yang menggunakan IPv4 kirim permintaan AJAX ke domain khusus IPv6, untuk klien yang menggunakan IPv6 kirim permintaan AJAX ke domain khusus IPv4.

Segera setelah permintaan AJAX tiba di server Anda tahu alamat IPv4 dan IPv6 pengguna. Mengetahui korespondensi ini akan memungkinkan Anda untuk melakukan geolokasi lebih baik daripada Anda hanya bisa mengetahui satu dari keduanya.

Anda akan sering melihat kasus di mana permintaan AJAX tidak pernah tiba di server. Untuk pengguna tersebut Anda harus melakukan geolokasi karena Anda dapat melakukan yang terbaik berdasarkan hanya satu alamat IP. Tetapi selama jawaban untuk permintaan AJAX tidak digunakan untuk apa pun di sisi klien, pengguna bahkan tidak akan melihat permintaan AJAX yang gagal. Jadi tidak ada perlambatan yang dirasakan atau perilaku tidak menentu yang akan disebabkan oleh permintaan AJAX.

kasperd
sumber
2
Ini sepertinya solusi yang sangat cerdik dan mudah diimplementasikan.
Dan Dascalescu