Trỏ một ứng dụng vào cổng SOCKS hoạt động với trình duyệt và thất bại với trò chơi, và nguyên nhân không phải cấu hình. SOCKS5 định nghĩa nhiều lệnh, và một bản triển khai có thể chỉ hỗ trợ một số lệnh trong đó; giao diện của Tor nhận kết nối luồng và phân giải tên, không nhận chuyển tiếp datagram tùy tiện. Một máy khách gửi UDP và mong proxy chuyển tiếp nó đang yêu cầu một lệnh mà máy chủ không triển khai. Hướng dẫn dưới đây kiểm tra điều đó trong vài phút rồi chọn một phương thức vận chuyển thực sự có thể hoạt động.

Kiểm tra ứng dụng thực sự gửi gì

Hãy bắt đầu bằng việc xác định phương thức vận chuyển chứ không phải tên giao thức. Một máy khách thoại có thể đăng nhập qua HTTPS rồi mang phương tiện qua UDP; một trò chơi có thể xác thực qua TCP và chơi qua UDP; một lần truyền tệp có thể dùng TCP cho điều khiển và UDP cho khám phá. Hai hành vi đầu trông giống nhau cho đến khi đăng nhập thành công mà cuộc gọi vẫn thất bại, vì thế “đã kết nối” không phải bằng chứng rằng toàn bộ ứng dụng hoạt động. Một số máy khách còn tự quay lại từ UDP sang TCP, khiến một phiên hoạt động một phần trông giống mạng không ổn định hơn là phương thức vận chuyển bị chặn.

Ghi lại cổng đích và phương thức vận chuyển cho phần thất bại. Chính dòng đó quyết định liệu proxy có giúp được gì không.

Giao diện SOCKS của Tor sẽ nhận gì

Tor triển khai lệnh SOCKS5 CONNECT cho kết nối luồng và các lệnh mở rộng để phân giải tên, vì thế trình duyệt hoạt động qua nó mà không cần thay đổi. UDP ASSOCIATE, lệnh cho phép máy khách giao datagram cho proxy để chuyển tiếp, không thuộc phần mà Tor cung cấp. Tài liệu về các phần mở rộng nằm trong đặc tả phần mở rộng SOCKS của dự án, và nó ngắn. Việc không có lệnh cho datagram là có chủ đích: chuyển tiếp UDP tùy tiện sẽ trao cho mạng một vai trò chuyển tiếp mà nó chưa từng được thiết kế.

Đây cũng là câu trả lời cho WireGuard, vốn theo thiết kế là UDP và không có đường dự phòng TCP. Không có đường được hỗ trợ nào trỏ WireGuard vào cổng SOCKS, và bất cứ điều gì khẳng định ngược lại là một lớp bọc với câu chuyện tin cậy và bảo trì riêng, không phải tính năng của một trong hai công cụ.

OpenVPN là ngoại lệ một phần, vì nó có thể được cấu hình để tạo đường hầm qua TCP và nó hiểu tùy chọn proxy SOCKS. Điều đó vẫn cần một máy chủ được cấu hình cho TCP và một quyết định có ý thức về hệ quả hiệu năng và dấu vân tay, nên đó là lựa chọn thiết kế chứ không phải bản vá tương thích.

Chạy kiểm tra theo thứ tự

Trước hết xác nhận proxy hoạt động với luồng, để thất bại về sau không bị quy cho một cổng không thể tới. Sau đó xác nhận lưu lượng của chính ứng dụng, và quan sát nó thực sự mở những socket nào.

curl --socks5-hostname 127.0.0.1:9050 -sS https://check.torproject.org/api/ip
ss -tupn | grep 9050
ss -aun | grep -E ':(3478|5060|27015)\b'

Một lệnh đầu thành công và một luồng được thiết lập ở dòng thứ hai cho thấy đường proxy hoạt động đúng thiết kế. Lệnh thứ ba tìm các socket datagram cục bộ thuộc về ứng dụng; nếu máy khách mở một cái và gửi trực tiếp tới một địa chỉ từ xa, nó chưa từng hỏi proxy và không cài đặt proxy nào thay đổi được điều đó. Nếu nó thất bại ngay ở bước đầu, hãy dừng lại và sửa đường proxy trước khi điều tra ứng dụng, vì hai lỗi cùng lúc tạo ra một báo cáo mà không ai có thể xử lý.

Quay lại và chọn đúng công cụ

Hãy xóa mọi biến môi trường proxy hoặc cài đặt proxy theo từng ứng dụng đã trỏ máy khách UDP vào cổng SOCKS; để nguyên chúng khiến các thử nghiệm sau trở nên mơ hồ. Khôi phục cấu hình trước đó từ một bản sao, khởi động lại ứng dụng và xác nhận hành vi ban đầu trở lại để so sánh được sạch. Một lần hoàn nguyên không được kiểm chứng chỉ là hy vọng rằng trạng thái đã thay đổi.

Với một phương thức vận chuyển phải giữ UDP, VPN thường phù hợp hơn: nó mang gói của ứng dụng mà không đòi ứng dụng nói giao thức proxy, đổi lại là các thuộc tính ẩn danh hoàn toàn khác. Hãy dùng mỗi công cụ cho đúng điều nó ghi trong tài liệu, và coi bất kỳ cầu nối nào giữa chúng là một hệ thống riêng cần được xem xét riêng. Ghi vào báo cáo cuối lớp nào mang phương thức vận chuyển nào, để người tiếp theo không phát hiện lại cùng ranh giới đó với một ứng dụng khác.

Bài viết liên quan