Chuyển đến nội dung
Tất cả bài viết
Blog & hướng dẫn/Kiến thức Proxy
Kiến thức Proxy

Happy Eyeballs là gì? Hiểu IPv4 và IPv6 khi kết nối qua proxy

Happy Eyeballs giảm chờ khi một đường IPv4 hoặc IPv6 gặp vấn đề. Khi có proxy, cần tách IP kết nối đến proxy khỏi IP proxy dùng để đến website.

Happy Eyeballs là gì? Hiểu IPv4 và IPv6 khi kết nối qua proxy
NỘI DUNG BÀI VIẾTHướng dẫn chi tiết từ ProxySmart

Một hostname có cả IPv4 và IPv6, nhưng một đường mạng phản hồi chậm. Happy Eyeballs giúp giảm chờ khi thiết lập kết nối. Khi có proxy, cần phân biệt việc chọn địa chỉ proxy và địa chỉ website đích: chúng không luôn diễn ra cùng nơi.

Happy Eyeballs chọn kết nối như thế nào?

RFC 8305 về Happy Eyeballs phiên bản 2 mô tả xử lý kết quả DNS, sắp xếp địa chỉ và thử kết nối có độ lệch thời gian. Khi một kết nối được thiết lập, các nỗ lực còn lại được hủy. Mục tiêu là giảm chờ, không phải gửi cùng một yêu cầu ứng dụng hai lần để tăng tốc tải.

Thời gian thử và cách sắp xếp tùy triển khai. Không giả định mọi trình duyệt, thư viện hoặc proxy dùng chung thuật toán và khoảng chờ.

Thuật toán không tạo ra khả năng IPv6

Happy Eyeballs cần các địa chỉ và đường kết nối khả dụng để lựa chọn. Nó không tự cấp IPv6 cho thiết bị, thêm bản ghi AAAA hoặc làm proxy vốn chỉ hỗ trợ IPv4 bỗng có đầu ra IPv6. Nếu dịch vụ đích chỉ có một họ địa chỉ, không có hai đường tương ứng để so sánh.

Ví dụ giả định: proxy có hostname dual-stack nhưng chỉ dùng đầu ra IPv4. Máy khách kết nối tới proxy bằng IPv6 vẫn có thể ra website bằng IPv4. Hai chặng không bắt buộc cùng họ địa chỉ.

Tách chặng máy khách đến proxy và proxy đến đích

Ở proxy chuyển tiếp TCP thông thường, chặng đầu dùng địa chỉ proxy, chặng sau dùng địa chỉ đích. Máy khách có thể chọn họ địa chỉ cho kết nối đến proxy. Việc proxy chọn đường ra phụ thuộc DNS, cấu hình và hỗ trợ của chính proxy; phía máy khách không mặc nhiên điều khiển được.

Với HTTP CONNECT gửi tên đích, proxy thường kết nối tới tên ấy; truyền địa chỉ cụ thể là tình huống khác. Khi đọc log, phân biệt “peer tại máy khách” và “đầu ra do máy chủ đích quan sát”, không gọi chung là IP proxy.

Nơi phân giải DNS thay đổi ý nghĩa phép thử

Trong curl, socks5:// phân giải tên đích ở máy khách, còn socks5h:// gửi tên đích để proxy phân giải. Tài liệu SOCKS của curl chỉ rõ khác biệt này. Máy khách vẫn cần biết địa chỉ để kết nối tới chính proxy nếu proxy được khai báo bằng hostname.

DNS trên máy tính không chứng minh proxy thấy cùng tập địa chỉ đích. Khi đổi chế độ kiểm thử, ghi cả vị trí DNS để tránh quy nhầm khác biệt đường đi thành khác biệt chất lượng proxy.

Hiểu đúng curl -4 và -6

Theo hướng dẫn tùy chọn IPv4 và IPv6 của curl, -4 và -6 giới hạn họ địa chỉ khi curl phân giải hostname. Khi curl kết nối đến một HTTP proxy được khai báo bằng tên, chúng ảnh hưởng việc phân giải proxy. Chúng không buộc proxy phân giải website thành IPv4 hoặc IPv6.

Với SOCKS5 phân giải cục bộ, việc curl chọn địa chỉ đích cũng có liên quan. Với SOCKS5h, proxy thực hiện bước ấy. Chi tiết còn phụ thuộc loại proxy và phiên bản thư viện; không dùng một lệnh để khẳng định mọi đường ra đều đã chuyển họ địa chỉ.

Thử nghiệm an toàn trên endpoint được phép

Dùng endpoint bạn quản lý, có cả IPv4 và IPv6, trả về địa chỉ peer mà nó quan sát. Chạy riêng từng lệnh mẫu, không tạo nhiều kết nối đồng thời. Thay các hostname mẫu và cấu hình xác thực bằng cách lưu an toàn của ứng dụng.

curl -4 --proxy http://proxy.example:8080 --connect-timeout 5 --max-time 20 https://kiemthu.example/ip
curl -6 --proxy http://proxy.example:8080 --connect-timeout 5 --max-time 20 https://kiemthu.example/ip

Ghi phiên bản curl, DNS của proxy, lỗi kết nối và IP do endpoint trả về. Một lệnh thất bại không chứng minh dịch vụ đích thiếu IPv6: có thể hostname proxy không có AAAA hoặc máy khách thiếu tuyến IPv6. Nếu đầu ra hai lệnh giống nhau, cũng không chứng minh chặng đầu dùng cùng họ địa chỉ.

Chọn cấu hình theo nhu cầu thực tế

Giữ cấu hình tự động nếu ổn định; chỉ giới hạn họ địa chỉ khi có phép đo xác nhận. Kiểm tra lại sau khi đổi mạng. Không tắt IPv6 toàn hệ thống để che lỗi chưa khoanh vùng. Xem kiến thức proxy IPv4 và IPv6 và dùng proxy với curl và Python để chuẩn bị phép thử.

Câu hỏi thường gặp

Happy Eyeballs có cân bằng tải không?

Không phải mục tiêu chính. Nó lựa chọn kết nối khả dụng khi thiết lập, không bảo đảm chia đều lưu lượng giữa IPv4 và IPv6.

HTTP chạy được có chứng minh IPv6 chạy tốt không?

Không. Kết nối có thể đã dùng IPv4. Cần quan sát họ địa chỉ trên đúng chặng đang kiểm tra.

Trước khi đổi cấu hình, ghi rõ chặng đang kiểm tra, nơi phân giải DNS và địa chỉ đầu ra để đọc đúng kết quả.