Thích kết nối đến IPv4 hơn IPv6


11

Chúng tôi điều hành một dịch vụ xã hội / địa phương có lợi từ việc định vị địa lý IP của người dùng. Vấn đề là với IPv6, định vị địa lý khá phức tạp hơn so với IPv4.

Có cách nào để thích các kết nối đến hơn IPv6, trên máy chủ Ubuntu có nginx không? Cấu hình trông như thế này:

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

Câu trả lời:


23

Tùy chọn IPv6 / IPv4 được xác định bởi người khởi tạo kết nối, tức là trình duyệt web. Các quy tắc lựa chọn địa chỉ được xác định trong RFC 6724 . Mặc dù những thứ này có thể bị ghi đè, nhưng chỉ người dùng cấu hình lại hệ điều hành của họ.

Cách duy nhất bạn có thể buộc ai đó sử dụng IPv4 là không cung cấp IPv6. Rõ ràng đây không phải là một giải pháp thiết thực ngay cả trong trung hạn ...

Vì vậy, chúng ta hãy quay trở lại vấn đề ban đầu: Định vị địa lý cho IPv6 "khá hơn một chút so với IPv4."

Một phần điều này phụ thuộc rất nhiều vào việc bạn lấy dữ liệu định vị địa lý ở đâu. MaxMind ví dụ chỉ cho địa chỉ IPv6 của tôi là "Hoa Kỳ" không có thành phố ở tất cả và một bộ thú vị tọa độ , trong khi Google ít nhất xác định một cách chính xác các khu vực đô thị họ vẫn còn khoảng 50 dặm ngoài khơi. Cả Maxmind và Google đều cho phép báo cáo chỉnh sửa và ít nhất là đối với Maxmind, bất kỳ ai cũng có thể thực hiện việc này cho bất kỳ địa chỉ IP nào.

Tôi không mong đợi tình trạng này sẽ kéo dài rất lâu. Khi việc sử dụng IPv6 tiếp tục mở rộng, người dùng các dịch vụ định vị địa lý này sẽ yêu cầu độ chính xác cao hơn cho các địa chỉ IPv6 và cuối cùng họ sẽ phải cung cấp nó, ít nhất là cho khách hàng trả tiền, kẻo những khách hàng đó đi nơi khác.

Trong khi đó, bạn nên chắc chắn rằng ứng dụng của bạn có những cách khác để định vị người dùng. Nếu họ đăng nhập, bạn có thể đọc tài khoản hiện tại của họ để tìm manh mối về vị trí của họ. Bạn có thể yêu cầu người dùng chọn một quốc gia rõ ràng. Và như thế...

Một điều khác bạn có thể làm là cung cấp một tên miền phụ chỉ có IPv4 và một tên miền phụ chỉ IPv6 của trang web của bạn, mỗi trang mà bạn cố gắng tải. Sau đó, bạn có thể tương quan phía khách hàng của họ và báo cáo lại cho máy chủ. Không phải ngẫu nhiên Maxmind đã làm điều này trên trang web của riêng họ.


12
Tôi hy vọng rằng việc định vị địa lý thông qua IP sẽ đi theo con đường của khủng long. Điều tốt nhất bạn nên hy vọng là một độ phân giải lục địa, đặc biệt là khi giao dịch khối v4 có thêm lực kéo.
Jim B

4
Điều thực sự sẽ khiến chàng trai nghèo phát điên là tất cả các công ty đang nhận được các khối IPv4 từ AFRINIC nhưng thực tế không phải ở Châu Phi. Tôi đã phát hiện ra một vài trong số này trong tự nhiên.
Michael Hampton

1
Yup, tôi đã thấy như vậy. Tôi thấy một bản demo học thuyết đi ra khỏi đường ray do một khối giao dịch.
Jim B

15

Sở thích như vậy có thể được thể hiện bằng cách sử dụng hồ sơ SRV. Thật không may, những người không được hỗ trợ cho HTTP. Vì vậy, bạn sẽ gặp phải tình huống một mình khách hàng đang lựa chọn giữa IPv4 và IPv6.

Nhiều khách hàng sử dụng thời gian khứ hồi của SYN + SYN-ACK để quyết định sử dụng cái nào trong hai. Vì vậy, bằng cách làm chậm việc gửi gói SYN-ACK trên IPv6, bạn có thể khiến hầu hết các máy khách thích IPv4. Nhưng cố tình làm chậm trang web của bạn là một cách tiếp cận khủng khiếp.

Thay vào đó tôi sẽ lùi lại một bước và xem xét vấn đề. Bạn muốn dữ liệu định vị địa lý tốt hơn. Mỗi khi khách truy cập truy cập trang web của bạn, bạn sẽ ngay lập tức biết một trong những địa chỉ IP của họ. Việc đó sẽ là địa chỉ IPv4 hay IPv6 tùy thuộc vào trình duyệt của họ thích giao tiếp với máy chủ của bạn.

Trong trang của bạn, bạn có thể sử dụng yêu cầu AJAX để tìm hiểu địa chỉ IP khác. Đối với các máy khách sử dụng IPv4, hãy gửi yêu cầu AJAX đến một miền chỉ có IPv6, đối với các máy khách sử dụng IPv6, hãy gửi yêu cầu AJAX đến một miền chỉ có IPv4.

Ngay khi yêu cầu AJAX đến trên máy chủ, bạn sẽ biết cả địa chỉ IPv4 và IPv6 của người dùng. Biết được sự tương ứng này sẽ cho phép bạn thực hiện định vị địa lý tốt hơn bạn chỉ có thể biết một trong hai.

Bạn sẽ thường thấy các trường hợp yêu cầu AJAX không bao giờ đến trên máy chủ. Đối với những người dùng đó, bạn sẽ phải thực hiện định vị địa lý vì bạn có thể làm tốt nhất chỉ dựa trên một địa chỉ IP. Nhưng miễn là câu trả lời cho yêu cầu AJAX đó không được sử dụng cho bất kỳ điều gì ở phía máy khách, người dùng thậm chí sẽ không nhận thấy những yêu cầu AJAX không thành công đó. Vì vậy, không có hành vi chậm hoặc nhận thức thất thường sẽ được gây ra bởi các yêu cầu AJAX.


2
Đây có vẻ là một giải pháp rất khéo léo và dễ thực hiện.
Dan Dascalescu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.