如何在 Chrome 中使用带用户名和密码的 SOCKS5 代理(本地桥接方法)
Chrome 无法发送 SOCKS5 凭据,因此需要身份验证的代理开箱即用会失败。本指南使用 gost 或 Privoxy 构建一个本地桥接,由它保管你的 IPRoyal 用户名和密码,并将 Chrome 的流量通过代理路由。
概述
Chrome 和其他 Chromium 浏览器可以通过 --proxy-server 标志使用 SOCKS5 代理,但它们无法发送 SOCKS5 用户名和密码。Chrome 中没有针对 SOCKS5 的凭据对话框,常见的代理扩展仅对 HTTP 和 HTTPS 代理进行身份验证。如果你的代理需要登录,Chrome 要么失败并显示 ERR_PROXY_CONNECTION_FAILED,要么在没有凭据的情况下连接并被拒绝。
解决办法是本地桥接:一个小的转发器,监听 127.0.0.1,接受来自 Chrome 的未认证流量,并将其转发到需要认证的上游 SOCKS5 端点。Chrome 永远看不到凭据,浏览器的网络栈也从不直接与上游通信。
每种代理方式在 Chrome 中的表现
| 方法 | 处理 SOCKS5 凭据 | 备注 |
|---|---|---|
--proxy-server="socks5://..." 标志 |
否 | 在代理端解析 DNS,但当上游需要认证时会失败 |
| 操作系统或系统代理设置 | 否 | 同样的限制,而且会影响所有应用,而不是单个浏览器配置文件 |
| 代理扩展 | 否 | 大多数扩展仅支持 HTTP 和 HTTPS 认证 |
| 提供商上的 IP 允许列表 | 不需要 | 仅当你的套餐和配置支持时才有效 |
| 本地桥接(本教程) | 是 | 凭据保留在你的机器上;Chrome 与 localhost 通信 |
先决条件
- 一个可以从命令行启动的 Chrome 或 Chromium 安装
- IPRoyal SOCKS5 凭据:来自你仪表板的网关主机、端口、用户名、密码
- 一个本地转发器:
gost(推荐)或 Privoxy - 运行绑定到
127.0.0.1的监听器的权限
步骤
-
检查 IP 允许列表是否能完全消除该问题。一些提供商允许你授权一个固定 IP 地址,而不是发送凭据。打开你的 IPRoyal 仪表板,确认你使用的套餐是否存在该选项。如果存在,并且你的公网 IP 稳定,你可以跳过桥接,直接使用
--proxy-server标志。 -
安装本地转发器。
gost双向支持 SOCKS5,并以单个二进制文件形式发布,这使其成为最简单的选择。
- Windows:从官方发布页面下载
gost二进制文件,并将其添加到你的PATH - macOS:如果有可用的软件包,请使用你的包管理器安装
gost,否则下载二进制文件 - Linux:从发布页面安装二进制文件,或者如果有可用的发行版软件包,则使用它
- 启动桥接。它监听一个无需认证的环回端口,并将所有内容转发到需要认证的上游。
gost -L socks5://127.0.0.1:1080 -F 'socks5://USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT'
在 Windows PowerShell 上,为上游 URL 加引号:
gost -L socks5://127.0.0.1:1080 -F "socks5://USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT"
在浏览时,让此进程在其自己的终端窗口中保持运行。
- 在操作 Chrome 之前验证桥接。此请求会经过桥接,因此返回的地址应该是代理出口 IP,而不是你的 ISP 地址。
curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org
如果命令挂起,说明桥接没有在转发。如果返回身份验证错误,则上游凭据有误。
- 通过桥接启动 Chrome。使用专用配置文件,以便你的日常浏览不受影响,并且该标志不会泄漏到你的正常会话中。
macOS:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--proxy-server="socks5://127.0.0.1:1080" \
--user-data-dir="$HOME/.chrome-proxy-profile"
Linux:
google-chrome \
--proxy-server="socks5://127.0.0.1:1080" \
--user-data-dir="$HOME/.chrome-proxy-profile"
Windows:
& "C:\Program Files\Google\Chrome\Application\chrome.exe" `
--proxy-server="socks5://127.0.0.1:1080" `
--user-data-dir="$env:TEMP\chrome-proxy-profile"
-
在 Chrome 内确认出口 IP。在新窗口中打开一个 IP 查询页面,并将该地址与
curl返回的地址进行比较。它们应该匹配。如果 Chrome 显示你的真实 IP,请参阅故障排除部分。 -
制作一个可重复使用的启动器,这样你就不必重新输入标志。在 macOS 或 Linux 上,将命令保存到 shell 脚本或别名中。在 Windows 上,创建一个快捷方式,其目标包含这些标志和
--user-data-dir路径。 -
通过使用新的上游身份重启桥接来轮换。桥接在运行期间只保留一个上游身份,因此要更改出口 IP,或切换到仪表板中特定国家/地区的端点,就意味着停止
gost,使用新的目标字符串重新启动它,并重新加载 Chrome。
替代方案:将 Privoxy 作为前端
如果你需要在 SOCKS5 上游前面加一个 HTTP 代理,因为你使用的某个工具或扩展只能使用 HTTP 代理,Privoxy 可以完成转换。
将以下行添加到其配置文件中:
listen-address 127.0.0.1:8118
forward-socks5t / USERNAME:PASSWORD@GATEWAY_HOST:GATEWAY_PORT .
然后将 Chrome 指向本地 HTTP 监听器:
google-chrome --proxy-server="http://127.0.0.1:8118" --user-data-dir="$HOME/.chrome-privoxy-profile"
forward-socks5t 将 DNS 解析保留在代理端,这在你检查特定地区内容时很重要。
故障排除
ERR_PROXY_CONNECTION_FAILED:桥接未运行、端口错误,或者 Chrome 指向的是上游端点而不是127.0.0.1。- Chrome 忽略这些标志:现有的 Chrome 进程可能吞掉了新窗口。退出所有 Chrome 窗口和后台进程,然后重新启动。使用不同的
--user-data-dir可以防止这种情况。 - 页面加载了但显示你的真实 IP:确认你位于使用该标志启动的配置文件中。控制代理设置的扩展、企业策略和 PAC 脚本可能会覆盖命令行代理。
- 凭据被上游拒绝:对密码中的特殊字符进行百分号编码(
@变为%40,:变为%3A),或者如果你的转发器支持,将上游作为单独选项传入。 - 某些网站在首次加载时卡住:SOCKS5 转发覆盖 TCP,但不覆盖 UDP,而 Chrome 可能会尝试基于 UDP 的 QUIC。如果网站在渲染前超时,请使用
--disable-quic启动。 - WebRTC 暴露本地地址:SOCKS5 代理不覆盖 WebRTC。通过企业策略将 WebRTC IP 处理设置为
disable_non_proxied_udp,或者使用浏览器策略或扩展来管理它。 - 桥接可从你的网络访问:始终绑定到
127.0.0.1,绝不要绑定到0.0.0.0。任何能访问该监听器的人都可以使用你的代理账户。
总结
Chrome 无法发送 SOCKS5 凭据,因此实际可行的答案是本地桥接:gost 或 Privoxy 监听环回地址,保存 IPRoyal 用户名和密码,并将 Chrome 的流量转发到需要认证的 SOCKS5 上游。在启动浏览器之前,使用 curl 验证出口 IP,使用单独的 --user-data-dir,并在需要新 IP 或不同国家/地区时重启桥接。