Article · 桌面端客户端:Windows 与 macOS · Windows 客户端

终端与开发工具不走代理怎么办:环境变量与 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 开头。
  • 本地服务也访问不了:例外列表缺失,本机地址被转发给了代理客户端。

选择方案的简易判断

  1. 只有一两个工具需要代理:用工具自身设置。
  2. 偶尔在某个终端窗口里需要:用临时环境变量。
  3. 长期大量使用、工具种类多:开启 TUN,并用规则让国内源与后台服务直连。
  4. 公司电脑或装有其他 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。本页不承诺任何平台的收录、排名或引用。