如何在 Chrome 中使用 SOCKS5 代理:扩展程序、系统设置和 SSH 隧道
Chrome 没有内置的 SOCKS5 设置。以下是让 Chrome 通过 SOCKS5 代理路由的实用方法——系统设置、命令行标志、扩展程序和 SSH 隧道——以及如何验证它并避免 DNS 和 WebRTC 泄漏。
如果你曾经打开 Chrome 的设置并搜索 SOCKS5 代理选项,你就已经知道结果:它不存在。与 Firefox 不同(Firefox 在其连接设置中有专门的 SOCKS5 主机字段),Chrome 有意省略了按浏览器配置代理的 UI。这并不意味着你无法在 Chrome 中使用 SOCKS5——只是意味着你必须在几种间接途径中选择一种。本指南涵盖了每种实用方法、权衡取舍,以及真正重要的泄漏检查。
为什么 Chrome 没有原生 SOCKS5 设置
在 Windows 和 macOS 上,Chrome 将代理配置委托给操作系统。在 Linux 上,它遵循环境变量和命令行标志。原因很简单:浏览器级别的代理设置会与企业系统策略和其他应用程序冲突。但副作用是,Windows 系统代理对话框不支持 SOCKS5,这使得 SOCKS5 在该平台上变得很别扭。
当你通过命令行标志或代理扩展程序告知 Chrome 时,Chrome 确实理解 SOCKS5。重要的区别在于 Chrome 解析什么:当你将 Chrome 指向 socks5:// 代理时,它会将主机名发送给代理进行远程 DNS 解析(相当于 curl 等工具中的 socks5h 方案)。这正是你在地理位置解锁和防止 DNS 泄漏时想要的。
方法 1:系统级 SOCKS5 代理(仅 macOS 和 Linux)
在 macOS 和 Linux 上,你可以设置系统级 SOCKS5 代理,Chrome 会遵循它。在 Windows 上,此方法不起作用,因为 Windows 代理设置只接受 HTTP 和 HTTPS。
macOS
- 打开 系统设置(较旧 macOS 上为 系统偏好设置)。
- 前往 网络 → 选择你的活动连接 → 详细信息 → 代理。
- 启用 SOCKS 代理 并输入主机和端口(例如
127.0.0.1:1080)。 - 点击 好 和 应用。
现在 Chrome 将通过 SOCKS5 代理路由所有流量。请注意,这会影响所有遵循系统代理设置的应用程序,而不仅仅是 Chrome。
Linux
Linux 上的 Chrome 会读取 all_proxy 环境变量。在启动 Chrome 之前设置它:
export all_proxy="socks5://127.0.0.1:1080"
google-chrome
如果这对所有流量都不起作用,你可以改用 --proxy-server 标志(见方法 2)。
方法 2:Chrome 命令行标志(所有平台)
无论操作系统如何,强制 Chrome 通过 SOCKS5 代理的最可靠方法是使用代理服务器标志启动它。先关闭所有 Chrome 实例,然后运行:
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="socks5://127.0.0.1:1080"
# Linux
google-chrome --proxy-server="socks5://127.0.0.1:1080"
# Windows (Command Prompt)
"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server="socks5://127.0.0.1:1080"
此标志使 Chrome 对所有请求使用 SOCKS5 代理并执行远程 DNS 解析。要确认,请访问 chrome://net-internals/#proxy 并查看生效的代理设置。
一个注意事项:这仅适用于使用该标志启动的 Chrome 实例。如果你从现有 Chrome 进程打开新窗口,它可能不会继承该设置。如果需要隔离,请使用单独的 user-data-dir。
方法 3:用于 SOCKS5 的代理扩展程序
浏览器扩展程序是在不触及系统设置的情况下向 Chrome 添加 SOCKS5 的最常见方式。SwitchyOmega(以及类似的代理管理器)等扩展程序允许你定义 SOCKS5 配置文件,并按标签页或按域名在直连和代理连接之间切换。
如何设置一个典型扩展程序:
- 从 Chrome 网上应用店安装该扩展程序。
- 创建一个新配置文件,选择 SOCKS5 作为协议。
- 输入代理主机和端口(例如
127.0.0.1:1080)。 - 如果你的代理不需要身份验证,请将身份验证留空。
- 应用该配置文件。
扩展程序仅影响 Chrome 流量,并且它们对测试来说可能很方便。但是,它们不能防止 WebRTC 泄漏,并且可能无法在所有情况下覆盖 Chrome 的内部 DNS 查询。始终使用泄漏测试进行验证。
方法 4:SSH 动态端口转发(本地 SOCKS5 隧道)
如果你对远程服务器有 SSH 访问权限,可以用一条命令创建本地 SOCKS5 代理:
ssh -D 1080 -N -f [email protected]
这会在 localhost:1080 上打开一个 SOCKS5 代理,通过你的服务器隧道传输流量。然后使用命令行标志或代理扩展程序将 Chrome 指向它。此方法很受欢迎,因为它加密你和服务器之间的流量,并且不需要第三方代理服务。
要关闭隧道,找到 SSH 进程并终止它,或者在终端中使用 ssh -D 1080 -N [email protected],完成后按 Ctrl+C。
验证你的 SOCKS5 代理正常工作(并且没有泄漏)
配置任意方法后,检查以下内容:
- 公共 IP:访问 IP 检查网站并确认它显示的是代理的 IP,而不是你的真实 IP。
- DNS 泄漏:使用 DNS 泄漏测试网站。由于 Chrome 的
socks5://执行远程 DNS,你应该看到属于代理的 DNS 服务器,而不是你的 ISP。 - WebRTC 泄漏:即使代理处于活动状态,Chrome 也可能通过 WebRTC 暴露你的本地和公共 IP。使用 WebRTC 泄漏测试进行测试。要缓解,请完全禁用 WebRTC 或使用阻止它的扩展程序。
- Chrome 内部视图:前往
chrome://net-internals/#proxy查看当前代理配置,前往chrome://net-internals/#dns查看 DNS 解析行为。
常见陷阱:SOCKS5h、身份验证和 Chrome 策略
- SOCKS5 与 SOCKS5h:在 Chrome 中,
socks5://已经执行远程 DNS。没有单独的socks5h方案。如果你习惯 curl 的socks5h://,在 Chrome 中只需使用socks5://。 - 身份验证:Chrome 通过
--proxy-server标志支持 SOCKS5 用户名/密码身份验证,格式为socks5://user:pass@host:port。一些扩展程序也支持它。 - 企业策略:如果你的 Chrome 由组织管理,代理设置可能会通过策略强制执行。检查
chrome://policy查看代理配置是否被锁定。
关键要点
Chrome 不会给你一个 SOCKS5 复选框,但你有四条可靠途径:macOS/Linux 上的系统设置、任何操作系统上的命令行标志、代理扩展程序或 SSH 隧道。对于大多数用户,代理扩展程序是在 Chrome 中测试 SOCKS5 代理的最快方式,而命令行标志对于持久使用来说最可靠。无论你选择哪种,始终验证你的 IP、DNS 和 WebRTC 状态——泄漏的代理比完全没有代理更糟。