Skip to content
文章 / 2 分钟阅读

如何在 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 泄漏

  1. 在启用和禁用代理的情况下检查你的公共 IP。
  2. 确认国家和 ASN 符合你的预期。
  3. 运行 DNS 泄漏测试。如果在你预期远程解析时 DNS 却在本地解析,请使用 socks5h 或在应用中启用远程 DNS。
  4. 在你实际关心的浏览器或应用中进行测试,而不仅仅是用 curl。
  5. 如果你需要向页面脚本隐藏公共 IP 地址,请检查浏览器中的 WebRTC 行为。

常见的 Windows SOCKS5 错误

  • 期望 Windows 设置中的代理框提供系统级 SOCKS5。
  • 混用 socks5:// 和 socks5h://,导致 DNS 行为不同。
  • 忘记每个应用都有自己的代理支持。
  • 使用免费 SOCKS5 代理进行登录、支付或处理敏感数据。
  • 测试后让代理保持启用,从而破坏本地服务。

要点

Windows 并不提供单一的 SOCKS5 开关。实用的方法是选择代理应应用于何处:单个应用、浏览器、命令行会话,还是一组被包装的应用程序。直接配置该层,在远程 DNS 很重要时使用 socks5h,并验证结果,而不是假设它能正常工作。