SOCKS5代理设置方法:Windows、Git、命令行、浏览器和Telegram怎么填
SOCKS5代理设置只需要两样东西:代理地址和端口。用本机的代理客户端时,地址就是 127.0.0.1,端口看客户端设置(Clash Verge Rev 默认 7897,v2rayN 的 SOCKS5 端口默认 10808)。麻烦在于每个软件填的地方和写法都不一样,而且很多软件根本不读系统代理。
这篇把常用的几类软件放在一起:Windows 系统、浏览器、命令行、Git、开发工具和 Telegram。所有命令都在本机实测过,最后纠正两个流传很广的写法错误。
先弄清三件事
1. 端口是 HTTP 还是 SOCKS5
有的客户端分开提供两个端口(比如 v2rayN:10808 是 SOCKS5,10809 是 HTTP),有的只给一个「混合端口」,同一个端口 HTTP 和 SOCKS5 都能用(比如 Clash Verge Rev 的 7897)。软件只支持 HTTP 代理时,要填 HTTP 那个端口,或者直接填混合端口。
2. socks5 和 socks5h 的区别
| 写法 | 域名在哪解析 | 什么时候用 |
|---|---|---|
socks5:// | 在你本机解析,再把 IP 交给代理 | 一般不推荐 |
socks5h:// | 把域名原样交给代理,由代理那边解析 | 推荐,本地 DNS 被污染时也能正常访问,也不会把访问的域名泄漏给本地 DNS |
http:// | 由代理那边解析 | 软件只支持 HTTP 代理时用 |
3. 哪些软件读系统代理
浏览器和大部分图形界面软件会读 Windows 的系统代理;命令行工具、Git、pip、npm 这类大多不读,要单独设置。不想一个个设,可以开客户端的 TUN 模式,原理和区别见 TUN模式是什么。
下面的例子都用 127.0.0.1:7890 代表你的本地代理地址,换成你客户端的实际端口即可。
Windows 系统代理(Win10 / Win11)
设置 → 网络和 Internet → 代理 → 手动设置代理 → 打开「使用代理服务器」,地址填 127.0.0.1,端口填客户端的 HTTP 或混合端口,保存。
Windows 这个界面是按 HTTP 代理设计的,填 HTTP 端口最稳。大多数代理客户端开启「系统代理」开关时,会自动帮你填好这里,一般不用手动改。
浏览器
Chrome、Edge 默认跟随系统代理,系统代理设好就行。想让浏览器单独走 SOCKS5、不影响系统,可以用启动参数:
chrome.exe --proxy-server="socks5://127.0.0.1:7890"
Firefox 有自己独立的代理设置:设置 → 网络设置 → 手动配置代理,填 SOCKS 主机和端口,选 SOCKS v5,并勾选「使用 SOCKS v5 时代理 DNS 查询」,效果等同 socks5h。
命令行(cmd、PowerShell、Linux / macOS 终端)
命令行工具认的是环境变量,只在当前窗口有效,关掉窗口就失效:
# Windows cmd
set http_proxy=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890
# Windows PowerShell
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
# Linux / macOS 终端
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5h://127.0.0.1:7890
设好之后用 curl 验证一下,返回 200 就说明走通了:
curl -s -o /dev/null -w "%{http_code}\n" https://www.google.com
也可以不设环境变量,直接在单条命令里指定:curl -x socks5h://127.0.0.1:7890 https://www.google.com。
Git
# 设置(对 https:// 开头的仓库地址生效)
git config --global http.proxy socks5h://127.0.0.1:7890
# 只给 GitHub 走代理
git config --global http.https://github.com.proxy socks5h://127.0.0.1:7890
# 取消
git config --global --unset http.proxy
只有 http.proxy,没有 https.proxy,见下面的误区。另外这个设置只对 https:// 开头的仓库地址有效,[email protected]: 这种 SSH 地址不走它,要么改用 HTTPS 地址,要么在 SSH 配置里单独设代理。
开发工具和其它软件
| 软件 | 在哪设置 | 填什么 |
|---|---|---|
| VS Code | 设置里搜索 http.proxy | http://127.0.0.1:7890 |
| pip | 读命令行环境变量;或单条命令加 --proxy | pip install xxx --proxy http://127.0.0.1:7890 |
| npm | npm config set proxy 和 npm config set https-proxy | 两个都填 http://127.0.0.1:7890 |
| Telegram 桌面版 | 设置 → 高级 → 连接类型 → 使用自定义代理 | 类型选 SOCKS5,服务器 127.0.0.1,端口填 SOCKS5 或混合端口 |
npm 和 Git 不一样,它确实有 https-proxy 这一项,两个都要设。
两个流传很广的写法错误
「Git 要同时设 http.proxy 和 https.proxy」
Git 的官方文档里只有 http.proxy 这一个配置项,它同时管 http 和 https 两种仓库地址,https.proxy 这个名字 Git 根本不认。我们实测过:给 https.proxy 填一个不存在的地址,Git 照常工作,完全不受影响。多设一行没有害处,但出问题时容易误以为是它在起作用。
「写 socks5:// 就等于用了 SOCKS5 代理的全部好处」
socks5:// 会先在本机解析域名,本地 DNS 被污染时拿到的就是错误的 IP,交给代理也连不上;访问了哪些域名也会留在本地 DNS 记录里。命令行和 Git 里用 socks5h://,让代理那边去解析。DNS 泄漏的检查方法见 IP泄漏性能测试。
用我们的电脑端时填什么
我们的电脑端在本机监听 127.0.0.1:2080,这是一个混合端口,HTTP 和 SOCKS5 共用,上面所有例子里的 7890 换成 2080 即可。默认的系统代理模式会自动设好 Windows 系统代理;要让所有程序都走代理、不想一个个设置,可以勾选「代理所有应用」,也就是 TUN 模式。
说一句对我们不利的实话:这个端口只监听本机,局域网里的其他设备连不上。想让同一个 Wi-Fi 下的手机或另一台电脑借用这台电脑的代理,我们的客户端目前做不到,那些设备需要各自安装客户端或导入订阅。
另外,SOCKS5 本身支持转发 UDP,但很多软件只用它转发 TCP。游戏、语音这类 UDP 流量有没有真的走代理,测法见 节点UDP测试怎么做。
常见问题
Windows 怎么设置 SOCKS5 代理?
在 设置 → 网络和 Internet → 代理 里手动设置,地址填 127.0.0.1,端口填客户端的 HTTP 或混合端口。多数代理客户端打开「系统代理」开关时会自动完成这一步。
Git 怎么设置 SOCKS5 代理?
执行 git config --global http.proxy socks5h://127.0.0.1:端口。只需要这一条,不需要 https.proxy;仓库地址要用 https:// 开头的形式。
cmd 怎么设置 SOCKS5 代理?
cmd 里执行 set http_proxy=http://127.0.0.1:端口 和 set https_proxy=http://127.0.0.1:端口,只对当前窗口有效。curl 这类工具也可以直接在命令里加 -x socks5h://127.0.0.1:端口。
Telegram 怎么设置 SOCKS5 代理?
桌面版在 设置 → 高级 → 连接类型 → 使用自定义代理,类型选 SOCKS5,服务器填 127.0.0.1,端口填本地代理客户端的 SOCKS5 或混合端口。
HTTP 代理和 SOCKS5 代理有什么区别?
HTTP 代理主要转发网页类的请求,几乎所有软件都支持;SOCKS5 更底层,能转发任意 TCP 连接,也支持 UDP。本地用的话两者效果差不多,软件支持哪个就填哪个。