如何在 Windows 10 和 11 上使用 SOCKS5 代理:系统、浏览器和应用专属设置
Windows 设置中有一个代理框,但它并不是真正的 SOCKS5 开关。以下才是真正能让 Windows 流量通过 SOCKS5 的方法——按应用设置、SSH 动态转发、WSL 和包装工具——以及如何验证 DNS 和泄漏。
Windows 用户搜索如何使用 SOCKS5 代理时,常常从“设置”开始,然后就卡住了。手动代理框看起来应该能接受任何代理,但它并不提供 SOCKS5 协议开关。本指南介绍在 Windows 10 和 11 上真正有效的方法,从按应用设置到 SSH 隧道和应用程序包装工具,以及如何验证 DNS 和 WebRTC 没有泄漏。
简短回答:Windows 没有内置的系统级 SOCKS5 开关
- Windows 设置包含手动代理设置,但它是围绕 HTTP/HTTPS 代理设计的。
netsh winhttp set proxy为某些系统组件配置 WinHTTP;它不是通用的 SOCKS5 开关。- 许多 Windows 应用完全忽略系统代理,除非它们明确支持。
- 要获得可靠的 SOCKS5,请配置每个应用、使用特定于应用的代理工具,或者用 SSH 创建本地 SOCKS5 代理并让应用指向它。
Windows 10 和 11 的代理设置实际上做什么
在“设置”中,转到“网络和 Internet”>“代理”>“手动代理设置”。你会看到“地址”和“端口”字段,以及一个绕过列表。没有 SOCKS4 或 SOCKS5 下拉菜单。此设置通常用于 HTTP 代理,而且行为因应用而异。Chrome 和 Edge 可能会遵循系统代理设置,而 Firefox 有自己的代理配置。原生 Windows 应用和命令行工具通常需要单独配置。
选项 1:按应用配置 SOCKS5
对于浏览器,如果你想直接控制 SOCKS5,请使用 Firefox。在 Firefox 中,打开“设置”,搜索 proxy,选择“手动代理配置”,输入 SOCKS 主机和端口,选择 SOCKS v5,并如果你想进行远程 DNS 解析,请启用“使用 SOCKS v5 时代理 DNS”。
对于命令行工具,请使用该工具支持的标志或环境变量。
curl
# 在代理端解析 DNS(推荐用于地理位置检查)
curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org
# 在本地解析 DNS
curl --socks5 127.0.0.1:1080 https://api.ipify.org
--socks5-hostname 等效于在许多工具中使用 socks5h:// 代理 URL。h 表示主机名解析在代理端进行,这对地理定位和 DNS 泄漏检查很重要。
git
git config --global http.proxy socks5h://127.0.0.1:1080
git config --global https.proxy socks5h://127.0.0.1:1080
# 稍后移除
git config --global --unset http.proxy
git config --global --unset https.proxy
使用 requests 的 Python
python -m pip install 'requests[socks]'
import requests
proxies = {
'http': 'socks5h://127.0.0.1:1080',
'https': 'socks5h://127.0.0.1:1080',
}
response = requests.get('https://api.ipify.org?format=json', proxies=proxies, timeout=10)
print(response.json())
选项 2:使用 SSH 创建本地 SOCKS5 代理
如果你有一台信任的 SSH 服务器,动态转发会把它变成本地 SOCKS5 代理。
ssh -D 1080 -N -C [email protected]
在工作时保持该终端打开。然后将应用指向 127.0.0.1:1080。当你只需要为浏览器、脚本或特定工具使用代理时,这很有用。它不会自动重新路由每个 Windows 应用程序。
选项 3:使用 Proxifier 风格的工具路由特定应用
有些应用程序完全没有代理设置。Proxifier 风格的工具可以拦截所选 Windows 程序的连接,并通过 SOCKS5 代理发送它们。在评估这类工具时,请检查:
- 它是否支持带远程 DNS 的 SOCKS5。
- 它如何处理已代理和未代理应用的 DNS。
- 规则是基于应用名称、目标主机、端口,还是混合条件。
- 当代理失败时它的行为如何。
- 它是否会记录敏感的连接数据。
选项 4:WSL、Windows Terminal 和 Linux 工具
WSL2 运行在独立的虚拟网络中。如果 SOCKS5 代理运行在 Windows 上,WSL 内部的 127.0.0.1 可能无法访问它。在这种情况下,请使用 Windows 主机 IP 或 WSL 用于访问主机的地址,然后设置环境变量:
export ALL_PROXY=socks5h://WINDOWS_HOST_IP:1080
export all_proxy=socks5h://WINDOWS_HOST_IP:1080
并非每个 Linux 工具都遵循 ALL_PROXY。对于支持 SOCKS5 标志的工具,请直接使用该标志。
如何验证代理并检查 DNS 泄漏
- 在启用和禁用代理的情况下检查你的公共 IP。
- 确认国家和 ASN 符合你的预期。
- 运行 DNS 泄漏测试。如果在你预期远程解析时 DNS 却在本地解析,请使用
socks5h或在应用中启用远程 DNS。 - 在你实际关心的浏览器或应用中进行测试,而不仅仅是用
curl。 - 如果你需要向页面脚本隐藏公共 IP 地址,请检查浏览器中的 WebRTC 行为。
常见的 Windows SOCKS5 错误
- 期望 Windows 设置中的代理框提供系统级 SOCKS5。
- 混用
socks5://和socks5h://,导致 DNS 行为不同。 - 忘记每个应用都有自己的代理支持。
- 使用免费 SOCKS5 代理进行登录、支付或处理敏感数据。
- 测试后让代理保持启用,从而破坏本地服务。
要点
Windows 并不提供单一的 SOCKS5 开关。实用的方法是选择代理应应用于何处:单个应用、浏览器、命令行会话,还是一组被包装的应用程序。直接配置该层,在远程 DNS 很重要时使用 socks5h,并验证结果,而不是假设它能正常工作。