Kết nối chỉ IPv6, dịch vụ IPv4: hãy để proxy SOCKS bắc cầu
Proxy SOCKS nhận một kết nối và mở một kết nối khác, nhờ đó máy khách chỉ có IPv6 vẫn đến được dịch vụ IPv4. Đó là chuyển tiếp, không phải truy cập IPv4 bản địa.
Bạn không cần địa chỉ thuộc họ địa chỉ đích để đến được nó, miễn là có thứ gì đó trên đường sẵn sàng chuyển tiếp. Ứng dụng kết nối đến proxy, và proxy mở kết nối thứ hai đến đích. Đó là hai socket với các họ địa chỉ độc lập, và không có gì trong cả hai giao thức yêu cầu chúng phải khớp nhau. Đây là chuyển tiếp ở tầng ứng dụng, không phải đường IPv4 bản địa, và chính sự khác biệt này quyết định cái gì sẽ hoạt động và cái gì không. Nhầm lẫn hai thứ này là cách một máy tính xách tay bị mô tả là có kết nối IPv4 trong khi tất cả những gì nó có chỉ là một proxy.
Hai socket, hai họ địa chỉ
Yêu cầu SOCKS5 nêu tên đích theo một trong ba dạng: địa chỉ v4 nguyên văn, địa chỉ v6 nguyên văn, hoặc một tên để proxy phân giải. Yêu cầu mô tả nơi proxy phải kết nối, không phải kết nối từ máy khách đến proxy trông như thế nào.
Hãy đọc các loại địa chỉ này như ba lựa chọn độc lập trong một thông điệp. Một proxy tiếp cận được qua IPv6 có thể mở socket đích IPv4 bất cứ khi nào nó có đầu ra IPv4 hoạt động và chính sách của nó cho phép yêu cầu. Đặc tả SOCKS5 định nghĩa chúng mà không hề tham chiếu đến phương thức vận chuyển của máy khách.
Ví dụ SSH có kiểm soát
Hãy lấy một máy chủ SSH mà bạn được phép sử dụng, trả lời trên IPv6 và bản thân nó có thể đến một dịch vụ HTTPS chỉ tồn tại trên v4. Chuyển tiếp động của OpenSSH đặt một trình lắng nghe SOCKS cục bộ trên máy của bạn trong khi phiên đăng nhập chạy qua v6.
ssh -6 -N -D 127.0.0.1:1081 -o ExitOnForwardFailure=yes [email protected]Máy chủ và tài khoản ở trên chỉ là ví dụ, và việc gắn vào loopback giữ trình lắng nghe trên máy tính này. Đừng thay nó bằng gắn ký tự đại diện để một văn phòng có thể chia sẻ proxy không xác thực. ExitOnForwardFailure=yes tồn tại để một lần chuyển tiếp thất bại kết thúc phiên thay vì để một lệnh im lặng chạy nền.
Khi phiên đang chạy, yêu cầu trông như sau:
curl --proxy socks5h://127.0.0.1:1081 https://v4-only.example/Kết nối loopback không phải là đường internet IPv4. Thứ rời khỏi máy của bạn là phiên đăng nhập qua v6, và phía xa mới là bên mở socket đích. Dạng socks5h cũng giao việc phân giải tên cho phía đó, điều này quan trọng khi máy khách không có đường phân giải IPv4 riêng.
Đích thực sự nhìn thấy gì
Đích nhìn thấy địa chỉ đầu ra của bộ chuyển tiếp. Không có địa chỉ nào thuộc máy tính xách tay của bạn xuất hiện ở đó. Danh sách nguồn được phép trên dịch vụ đó phải nêu tên bộ chuyển tiếp. Nhật ký của nó cũng sẽ quy lưu lượng cho bộ chuyển tiếp. Hãy ghi điều này vào hồ sơ thay đổi trước khi kiểm toán, vì danh sách cho phép xây quanh địa chỉ máy khách sẽ thất bại ngay ở yêu cầu đầu tiên.
Bộ chuyển tiếp cũng là nơi nhìn thấy hai nửa của cuộc trò chuyện, đây là thuộc tính hữu ích khi chẩn đoán và là gánh nặng nếu bộ chuyển tiếp được chia sẻ mà không có chính sách.
Đây không phải DNS64 hay NAT64
DNS64 trả lời bằng các bản ghi tổng hợp thay thế cho đích v4, và NAT64 ghi lại gói tin dọc theo một đường đã cấu hình. Không cái nào mô tả điều xảy ra ở đây, nơi một cuộc trò chuyện vận chuyển kết thúc và một cuộc khác bắt đầu và không địa chỉ tổng hợp nào giải thích kết quả. Vì vậy một yêu cầu thành công không nói gì về việc nhà cung cấp của bạn vận hành dịch vụ dịch địa chỉ nào, và proxy có thể chạy NAT thông thường trên đầu ra của chính nó.
Cả hai cơ chế đều có thể tồn tại trong cùng một mạng, vì vậy hãy mô tả cái bạn thực sự đã kiểm chứng thay vì cái nghe có vẻ gần nhất.
Biết phạm vi trước khi hứa
Chuyển tiếp động của OpenSSH mang các kết nối TCP, không phải lưu lượng IP tùy ý, nên UDP, ICMP và bất kỳ giao thức nào bỏ qua proxy đều cần một thiết kế được hỗ trợ khác. Hãy giữ kiểm tra khóa máy chủ SSH, các hạn chế chuyển tiếp của máy chủ và xác thực chứng chỉ HTTPS, vì proxy là một bên tham gia đáng tin cậy bổ sung, không phải lý do để làm yếu các kiểm tra danh tính. Nếu mục tiêu là mang phương thức vận chuyển bên ngoài của VPN qua proxy, hãy kiểm chứng rằng cả hai đầu đều hỗ trợ phương thức đó thay vì giả định bất kỳ trình lắng nghe SOCKS nào cũng có thể chuyển tiếp nó.
Không điều nào trong số này làm máy khách trở thành hai ngăn xếp, và cũng không cần như vậy. Nó giúp một ứng dụng đến được một dịch vụ qua một bộ chuyển tiếp, đây là một tuyên bố nhỏ hơn và dễ kiểm chứng hơn nhiều.