Bạn đã cấu hình proxy trong cài đặt Windows, khởi động lại chương trình - nhưng nó vẫn sử dụng IP tại nhà. Hoặc ngược lại: trình duyệt đã đi qua proxy, nhưng ứng dụng máy tính để bàn bên cạnh vẫn hiển thị địa chỉ thực. Đây không phải là lỗi của proxy hay thông tin đăng nhập sai. Đây là đặc tính cơ bản của cách mà các hệ điều hành xử lý "proxy hệ thống": nó không ép buộc, mà chỉ đề xuất.
Dưới đây là bốn cách làm việc để buộc một ứng dụng cụ thể sử dụng SOCKS5, với những hạn chế và cạm bẫy mà cấu hình thường gặp phải.
Tại sao proxy hệ thống không hoạt động: sự thật kỹ thuật ngắn gọn
Trong Windows không có một "proxy hệ thống" duy nhất. Ít nhất có hai bộ cài đặt độc lập. Đầu tiên - WinINET: những gì bạn chỉnh sửa trong "Cài đặt → Mạng và Internet → Máy chủ proxy". Nó được đọc bởi Internet Explorer/Edge, một số ứng dụng trên .NET và tất cả những gì sử dụng ngăn xếp HTTP người dùng tiêu chuẩn. Thứ hai - WinHTTP, được sử dụng bởi các dịch vụ hệ thống và các quy trình nền. Và đây là điểm quan trọng: WinHTTP không sử dụng cài đặt WinINET, trừ khi bạn nhập chúng một cách rõ ràng. Điều này được thực hiện bằng lệnh netsh winhttp import proxy source=ie, và - một chi tiết quan trọng từ tài liệu của Microsoft - lệnh này lấy ảnh chụp cài đặt hiện tại. Bạn đã thay đổi proxy trong cài đặt sau đó? Ảnh chụp sẽ không tự động cập nhật, bạn cần thực hiện lại lệnh.
Nhưng ngay cả việc nhập cũng không cứu vãn được loại vấn đề chính. Rất nhiều chương trình hoàn toàn không hỏi hệ thống: chúng sử dụng ngăn xếp mạng riêng và mở các socket TCP trực tiếp. Nhiều ứng dụng máy tính để bàn của mạng xã hội và ứng dụng nhắn tin, các launcher game, torrent, một số ứng dụng Electron với cấu hình được nhúng, các tiện ích được biên dịch bằng Go và Rust. Đối với chúng, dòng "proxy" trong cài đặt hệ điều hành đơn giản là không tồn tại như một khái niệm.
Từ đó có quy tắc: nếu ứng dụng không có trường riêng cho proxy, cách duy nhất đáng tin cậy là chặn lưu lượng của nó dưới mức ứng dụng. Có bốn loại phương pháp, và chúng khác nhau về giá cả, độ tin cậy và quyền hạn yêu cầu.
Bước 0: đảm bảo rằng vấn đề chính là ở đây
- Khởi động ứng dụng và xem nó hiển thị IP nào (hồ sơ tài khoản, trang dịch vụ, bất kỳ chỉ báo tích hợp nào).
- Song song, mở trình duyệt qua cùng một proxy và kiểm tra địa chỉ. IP khác nhau = ứng dụng bỏ qua cài đặt hệ thống.
- Kiểm tra xem chương trình có cài đặt proxy riêng không - thường chúng được ẩn trong "Mạng", "Kết nối" hoặc trong tệp cấu hình. Hỗ trợ bản địa luôn tốt hơn việc chặn bên ngoài: ít lớp hơn, ít lỗi hơn.
- Kiểm tra riêng DNS. Nếu ứng dụng phân giải tên cục bộ, và lưu lượng đi qua proxy, nhà cung cấp thực của bạn vẫn thấy bạn đang truy cập đâu.
Cách 1. Proxifier - tiêu chuẩn thương mại cho Windows và macOS
Proxifier chặn các kết nối của ứng dụng và chuyển hướng chúng đến proxy đã chỉ định theo quy tắc: bạn có thể chỉ định "exe này - qua proxy A, cái kia - qua proxy B, phần còn lại - trực tiếp", phân chia theo cổng và địa chỉ đích, xây dựng chuỗi từ nhiều proxy.
Các phiên bản hiện tại tại thời điểm viết: 4.14 cho Windows (phát hành ngày 23 tháng 4 năm 2025) và 3.15 cho macOS (18 tháng 9 năm 2025). Giấy phép - $39.95 cho một bản sao, mua một lần, vĩnh viễn, với các bản cập nhật nhỏ miễn phí; có bản dùng thử đầy đủ chức năng trong 31 ngày, giảm giá cho số lượng từ hai bản sao và hoàn tiền trong vòng 30 ngày.
Thực hành cấu hình:
- Proxy Servers → Thêm: chỉ định địa chỉ, cổng, giao thức SOCKS5 và thông tin đăng nhập. Nhấn Kiểm tra - bài kiểm tra phải thành công trước khi tạo quy tắc, nếu không bạn sẽ phải khắc phục hai vấn đề cùng một lúc.
- Quy tắc Proxification → Thêm: trong Ứng dụng chọn tệp thực thi cụ thể, trong Hành động - proxy của bạn.
- Quy tắc Mặc định để Trực tiếp, nếu bạn không muốn chuyển toàn bộ máy. Đây là lỗi phổ biến nhất của người mới: Mặc định → Proxy đưa vào đường hầm cả trình cập nhật hệ điều hành, cả phần mềm diệt virus và lưu lượng không cần thiết mà bạn phải trả tiền theo gigabyte.
- Xem tab Kết nối trong thời gian thực: ở đó bạn có thể thấy kết nối nào đã đi qua proxy, và kết nối nào - trực tiếp.
Điểm mạnh - độ trưởng thành, quy tắc ổn định và chẩn đoán dễ hiểu. Điểm yếu - tính phí và việc chặn bằng driver có thể bị phát hiện trong các hệ thống chống gian lận mạnh mẽ.
Cách 2. ProxiFyre - lựa chọn miễn phí cho Windows với hỗ trợ UDP
Nếu ngân sách bằng không và nền tảng là Windows, có một dự án mở ProxiFyre (giấy phép AGPL-3.0). Nó được xây dựng trên NDISAPI/Windows Packet Filter - tức là hoạt động ở mức driver lọc gói và có khả năng mà thường thiếu: chuyển hướng không chỉ TCP mà còn UDP cho mỗi ứng dụng riêng biệt. Điều này rất quan trọng cho mọi thứ sống trên UDP và QUIC - các kênh thoại, khách hàng game, một phần kết nối trình duyệt hiện đại.
Từ những điều hữu ích trong các phiên bản mới: hỗ trợ IPv6 đã xuất hiện trong v2.3.0, SOCKS5-over-TLS - trong v2.4.0, có quy tắc ngoại lệ cho các ứng dụng và catch-all cho tất cả các ứng dụng khác. Yêu cầu: Windows Packet Filter đã cài đặt, thư viện runtime Visual Studio và quyền quản trị.
Cấu hình được thực hiện thông qua tệp cấu hình với danh sách các ứng dụng và các điểm cuối SOCKS5 liên kết với chúng. Ngưỡng đầu vào cao hơn so với Proxifier, nhưng bạn không phải trả tiền và có UDP.
Cách 3. proxychains-ng - lựa chọn nhanh cho Linux, với điều kiện
Huyền thoại cho các hệ thống Unix: proxychains4 curl https://example.com. Cơ chế - LD_PRELOAD: thư viện thay thế các lệnh gọi socket trong chương trình được liên kết động và chuyển hướng chúng đến SOCKS.
Các hạn chế mà bạn cần biết trước khi xây dựng quy trình làm việc:
- Chỉ TCP. UDP và ICMP không được chuyển hướng - ping qua proxychains không kiểm tra được gì có ý nghĩa.
- Chỉ các nhị phân được liên kết động. Các tiện ích được biên dịch tĩnh (tình huống điển hình cho Go) sẽ bị LD_PRELOAD bỏ qua một cách im lặng - lưu lượng sẽ đi trực tiếp, và bạn sẽ không nhận ra điều đó.
- Trên macOS gặp phải SIP. Bảo vệ tính toàn vẹn hệ thống chặn việc tải thư viện vào các nhị phân hệ thống:
proxychains4 ssh user@hostsẽ không hoạt động. Cách giải quyết là sao chép nhị phân vào thư mục của bạn (cp /usr/bin/ssh ~/.local/bin/) và khởi động bản sao. Tôi không khuyên bạn nên tắt SIP vì sự tiện lợi: bạn làm yếu đi bảo mật của toàn bộ hệ thống chỉ vì một tiện ích.
Đối với các tác vụ cụ thể (curl, python-script, tiện ích dòng lệnh) proxychains vẫn là cách nhanh nhất - cài đặt bằng một lệnh và không yêu cầu quyền root.
Cách 4. Chế độ TUN: chặn ở mức giao diện ảo
Lớp giải pháp đa năng nhất. Một giao diện mạng ảo được tạo ra, các tuyến đường của hệ thống được chuyển hướng vào đó, và ngăn xếp TCP/IP của người dùng phân tích các gói và phát hành chúng ra ngoài qua SOCKS5. tun2socks (sử dụng ngăn xếp gVisor, hỗ trợ TCP và UDP, có trên tất cả các nền tảng) và sing-box hoạt động trong chế độ TUN.
Ưu điểm chính so với LD_PRELOAD: mọi thứ đều được chặn, bao gồm cả nhị phân tĩnh và ứng dụng với ngăn xếp riêng. Sing-box còn có định tuyến theo quy trình - các trường process_name, process_path và process_path_regex, điều này cho phép quy tắc per-app thực sự; theo tài liệu, điều này được hỗ trợ trên Linux, Windows và macOS (trên các nền tảng di động, quy tắc được đặt theo tên gói hoặc ID gói).
Hai cạm bẫy mà hầu hết mọi người đều vấp phải:
- Vòng lặp tuyến đường. Nếu toàn bộ lưu lượng đi vào TUN, thì kết nối đến chính máy chủ SOCKS5 cũng cố gắng đi vào TUN - đường hầm bắt đầu quay lại chính nó. Điều này được khắc phục bằng cách chỉ định một tuyến đường loại trừ rõ ràng đến IP của proxy qua giao diện vật lý. Đây là một vấn đề nổi tiếng và thường xuất hiện trong cấu hình của sing-box.
- Quyền. Việc tạo giao diện TUN và chỉnh sửa bảng định tuyến yêu cầu quyền root/quản trị. Trên máy tính doanh nghiệp với các chính sách, điều này có thể không khả dụng.
Trên Linux còn có hai phương pháp liên quan khác: redsocks - chặn thông qua quy tắc iptables với chuyển hướng đến cổng cục bộ (chỉ Linux, cần quyền root), và sshuttle, nâng cao định tuyến giống như VPN trên nền tảng SSH thông thường, vượt qua vấn đề cổ điển "TCP trên TCP".
Những gì thường bị hỏng nhất
- Rò rỉ DNS. Ngay cả khi SOCKS5 được cấu hình chính xác, ứng dụng vẫn có thể phân giải tên miền cục bộ. Kiểm tra xem việc phân giải có đi qua proxy hay không, chứ không phải nhà cung cấp của bạn.
- SOCKS4 được chọn thay vì SOCKS5. SOCKS4 không hỗ trợ UDP về cơ bản và không thể truyền tên miền trong một số triển khai. Để chặn lưu lượng tùy ý, chỉ nên sử dụng SOCKS5 - lý do tại sao được giải thích chi tiết trong tài liệu về nguyên tắc hoạt động của SOCKS5.
- HTTP-proxy thay vì SOCKS. HTTP-proxy có thể proxy HTTP và thông qua CONNECT - các kết nối TLS. Lưu lượng TCP tùy ý từ khách hàng game hoặc ứng dụng nhắn tin sẽ không được chuyển hướng.
- Quy tắc Mặc định cho toàn bộ lưu lượng. Khi chuyển hướng toàn bộ máy, bạn sẽ tiêu tốn lưu lượng của pool cư trú cho các bản cập nhật và telemetry.
- Thiếu kiểm tra sau khi cấu hình. Luôn kiểm tra lại IP đầu ra thực tế từ chính ứng dụng, chứ không phải từ trình duyệt bên cạnh.
Loại proxy nào nên chọn để chặn
Về mặt kỹ thuật, việc chặn hoạt động với bất kỳ điểm cuối SOCKS5 nào, nhưng việc chọn loại xác định xem kịch bản của bạn có đạt được kết quả hay không.
- Proxy cư trú - khi ứng dụng làm việc với dịch vụ đánh giá uy tín IP: mạng xã hội, chợ trực tuyến, bảng quảng cáo, biểu mẫu thanh toán. Địa chỉ trung tâm dữ liệu sẽ được nhận diện gần như ngay lập tức. Các proxy cư trú với hỗ trợ SOCKS5 và phiên sticky là rất quan trọng, vì việc thay đổi IP giữa phiên hoạt động sẽ gây ra vấn đề lớn hơn cho chống gian lận hơn là IP "ngoại lai" ngay từ đầu.
- Proxy trung tâm dữ liệu - cho các nhiệm vụ kỹ thuật không có chống gian lận nghiêm ngặt: truy cập API, dịch vụ nội bộ, môi trường thử nghiệm, mọi thứ mà tốc độ và độ ổn định của kênh quan trọng hơn là "diện mạo cư trú" của địa chỉ. Tại đây, proxy trung tâm dữ liệu cung cấp ping tốt hơn và tính dự đoán.
- Proxy di động - khi ứng dụng mang tính di động (trình giả lập, khách hàng mạng xã hội) và cần sự tin cậy tối đa từ nền tảng.
Riêng biệt: việc chặn ở mức ứng dụng không phải là VPN, và không nên thay thế cái này bằng cái khác. Nếu bạn cần một kênh bảo mật duy nhất cho toàn bộ máy, chứ không phải các IP khác nhau cho các chương trình khác nhau, có một so sánh về các phương pháp trong bài viết WireGuard so với proxy.
Cách chọn phương pháp trong một phút
- Ứng dụng có cài đặt proxy riêng → sử dụng chúng, không chặn gì cả.
- Windows, cần kết quả hôm nay, có ngân sách → Proxifier.
- Windows, cần UDP và miễn phí → ProxiFyre.
- Linux, nhiệm vụ một lần với tiện ích dòng lệnh → proxychains-ng.
- Cần chặn một nhị phân tĩnh, game hoặc tất cả cùng một lúc với quy tắc per-app → chế độ TUN (sing-box, tun2socks), đừng quên về tuyến đường loại trừ đến proxy.
Kết luận chính rất đơn giản: "proxy không hoạt động" trong chín trường hợp trên mười có nghĩa là "proxy được cấu hình không đúng mức". Cài đặt hệ thống là một yêu cầu lịch sự với ứng dụng, trong khi việc chặn ở mức driver, LD_PRELOAD hoặc giao diện TUN - là sự ép buộc. Hãy chọn lớp đúng, kiểm tra IP đầu ra thực tế từ chính ứng dụng và đừng quên về DNS - và vấn đề sẽ được giải quyết một lần, chứ không phải xuất hiện sau mỗi lần cập nhật chương trình.
```