终端与开发工具不走代理怎么办:环境变量与 TUN
终端与开发工具大多不读取系统代理,而是读取 HTTP_PROXY 等环境变量或各自的配置文件。解决办法有两条:少量工具用环境变量或工具内设置指向客户端本地端口;工具多、场景杂时开启 TUN 在网络层统一接管。
先判断工具读什么,再决定用环境变量还是 TUN
终端里的程序不走代理,几乎都是因为它们不读取系统代理设置,而是读取环境变量或自己的配置。需要代理的工具只有几个时,把环境变量或工具内代理指向客户端的本地混合端口,影响范围小、便于控制;工具很多、还涉及 SSH、容器或 UDP 时,开启 TUN 让内核在网络层统一接管更省事,但要留意它会一并接管后台流量。
本文聚焦开发场景,不涉及任何机场品牌。系统代理与 TUN 的原理对比见 Windows 系统代理与 TUN 模式有什么区别,桌面端其他问题从 桌面端客户端专题页 进入。
准备:找到客户端的本地端口
无论哪种做法,都需要知道客户端在本机监听的端口。Clash 系客户端通常在设置页显示一个“混合端口”,同一个端口同时接受 HTTP 和 SOCKS5 请求;v2rayN 在主界面或设置中显示本地监听端口。下文命令里的 PORT 请替换为你看到的数字。
方案一:环境变量
各类终端的写法
Windows PowerShell 中,仅对当前窗口生效:
$env:HTTP_PROXY = "http://127.0.0.1:PORT"
$env:HTTPS_PROXY = "http://127.0.0.1:PORT"
$env:NO_PROXY = "localhost,127.0.0.1"
Windows 命令提示符中:
set HTTP_PROXY=http://127.0.0.1:PORT
set HTTPS_PROXY=http://127.0.0.1:PORT
macOS 或 Linux 的 zsh、bash 中:
export http_proxy=http://127.0.0.1:PORT
export https_proxy=http://127.0.0.1:PORT
export all_proxy=socks5://127.0.0.1:PORT
export no_proxy=localhost,127.0.0.1
几个细节
- 大小写:有的程序只认小写变量,有的大小写都认。不确定时两种都设置。
- 例外列表:一定要设置不走代理的地址,否则本地开发服务器、内网接口也会被送进代理,出现莫名其妙的连接失败。
- 作用范围:在当前窗口设置只影响当前窗口,关闭即失效,适合临时使用;写进启动配置文件则长期生效,但关闭代理客户端后这些变量仍在,工具会因为连不上本地端口而报错,需要记得注释掉。
验证是否生效
用命令行发起一次带详细输出的请求,例如 curl -v 访问一个海外网站。输出中如果出现连接本机地址和端口的记录,说明请求已经交给了代理客户端;同时在客户端的连接页面也能看到这条请求。
方案二:工具自身的代理设置
有些工具不看环境变量,或者你只想让单个工具走代理,这时在工具内配置更精确:
| 工具 | 默认读取 | 常见做法 |
|---|---|---|
| git(HTTPS 地址) | 自身配置,也读环境变量 | 设置 http.proxy |
| git(SSH 地址) | SSH 配置 | 在 SSH 配置中为对应主机指定代理命令 |
| npm 等包管理器 | 自身配置与环境变量 | 设置 proxy 与 https-proxy |
| pip | 环境变量 | 也可在命令中临时指定代理参数 |
| 容器引擎拉取镜像 | 守护进程自身配置 | 在容器引擎的设置或守护进程配置中填写代理 |
| 编辑器与 IDE | 自身设置 | 在设置中填写 HTTP 代理地址 |
两类情况最容易被忽略。一是 SSH 形式的仓库地址:它与 HTTPS 代理设置无关,需要在 SSH 配置中通过代理命令转发,或者干脆改用 HTTPS 地址。二是容器:在终端里设置的环境变量不会传给容器引擎的后台进程,拉取镜像需要在引擎自己的配置里填写代理;容器内部访问宿主机代理时,地址也不是本机回环地址,而是引擎提供的宿主机地址。
Windows 子系统的特殊情况
在 Windows 的 Linux 子系统里,本机回环地址指向的是子系统自身,而不是 Windows 主机,直接填写回环地址会连不上。常见做法有两种:开启子系统的镜像网络模式,使其与主机共享网络;或者在客户端中允许局域网连接,再在子系统里填写主机的地址。后一种做法会让同一局域网内的其他设备也能使用你的代理端口,用完应关闭。
方案三:TUN 模式统一接管
当你同时使用多种语言的包管理器、SSH、容器和需要 UDP 的调试工具时,逐个配置会非常琐碎。开启 TUN 后,这些程序无需任何设置即可按规则分流。
代价也很明确:
- 需要管理员权限,可能与公司 VPN 或虚拟机网络冲突;
- 后台的系统更新、云同步也会被接管,若规则判为走代理,会消耗套餐流量;
- 虚拟地址类的 DNS 模式下,个别依赖真实解析结果的开发工具可能表现异常,需要把相关域名加入例外。
TUN 对速度和流量的影响属于网络专题的讨论范围,可参考 TUN 模式与系统代理对速度和流量的影响。
终端里常见报错的含义
- 连接被拒绝:工具确实在找代理,但本地端口上没有程序在监听,通常是代理客户端没有运行,或端口填错了。
- 连接超时:请求没有交给代理,仍在直连海外地址,说明环境变量没有生效或工具不读取它。
- 证书校验失败:多见于公司网络中的安全网关,或者把 HTTPS 代理地址误写成了需要证书的形式,先检查代理地址是否以 http 开头。
- 本地服务也访问不了:例外列表缺失,本机地址被转发给了代理客户端。
选择方案的简易判断
- 只有一两个工具需要代理:用工具自身设置。
- 偶尔在某个终端窗口里需要:用临时环境变量。
- 长期大量使用、工具种类多:开启 TUN,并用规则让国内源与后台服务直连。
- 公司电脑或装有其他 VPN:优先方案一或二,避免 TUN 冲突。
注意事项
- 不要把包含代理地址的配置文件提交到代码仓库或团队共享目录;
- 在团队或公司网络中使用代理前,先了解所在单位的网络管理规定;
- 排错时如果出现“设置了代理反而更慢”,先确认国内镜像源是否被误判为走代理,排查方法见 规则分流与故障排查。
使用任何代理工具,都请遵守所在地法律法规与相关平台的服务条款。
常见问题
为什么浏览器能访问,终端里的包管理器却一直超时?
浏览器读取的是系统代理设置,而多数命令行程序读取的是环境变量,或者只看自己的配置文件。系统代理开着并不会影响它们,需要单独设置环境变量、在工具内配置代理,或改用 TUN 模式。
环境变量写大写还是小写?
不同程序的习惯不同,有的只认小写,有的两种都认。较稳妥的做法是大写和小写各设一份,并同时设置不走代理的例外列表,避免本地服务也被转发。
git 设置了 http.proxy,为什么 git clone 仍然超时?
http.proxy 只对 HTTPS 方式的仓库地址生效。如果仓库地址是 SSH 形式,流量走的是 SSH 连接,需要在 SSH 配置中单独指定代理命令,或者开启 TUN 模式统一接管。
来源与更新
品牌字段来自本站品牌数据文件(整理自 2026-09-04 品牌清单,Vendor Data,官网待核实);测速截图为 2026-10-18 复核后发布的单次 Measured Data;AI 与流媒体均为 Not Tested。发布 2026-10-18,最近更新 2026-10-18。本页不承诺任何平台的收录、排名或引用。