博客 / 产品更新 / 开发者必读:让 git、npm、pip、…
开发者gitnpmDockerTUN模式代理

开发者必读:
让 git、npm、pip、Docker 全走代理

系统代理只管浏览器。git clone 超时、npm install 卡住、Docker 拉不了镜像——这些问题有统一的解法。

打开了代理,浏览器访问 GitHub 没问题,但终端里 git clone 还是超时。这是系统代理的局限:它只处理支持 HTTP 代理协议的应用层请求,命令行工具默认不走它。

解决这个问题有两条路:让所有工具走 TUN 模式,或者逐个给工具配置代理。

01 为什么系统代理不够用

macOS 和 Windows 的”系统代理”设置,本质上是一个约定:告诉支持这个约定的应用,HTTP/HTTPS 请求应该发给代理端口。

浏览器、Electron 应用(VS Code、Figma)默认会读这个设置。但大多数命令行工具不会——它们直接发起 TCP 连接,不查系统代理配置。

结果就是:代理客户端开着,终端工具仍然直连。

02 TUN 模式:一劳永逸

TUN 模式在网络层拦截所有流量,包括 UDP 和绕过系统代理的 TCP 连接。开启之后,git、npm、pip、curl、Docker——所有工具的网络请求都经过代理,不需要任何额外配置。

这是最简洁的方案。如果你经常在终端做开发工作,TUN 模式应该是默认开启的状态,而不是偶尔需要时再想起来打开。

Terraka 在 macOS 和 Windows 上都支持 TUN 模式。具体开启步骤参见TUN 模式配置指南

开启 TUN 模式需要管理员权限,首次启动时会弹权限请求。这是正常行为——TUN 模式需要在系统网络层安装虚拟网卡驱动。

03 手动配置各工具代理

如果你不想用 TUN 模式,或者在 Linux 上(暂不支持 TUN),可以逐个给工具配置代理。

Terraka 默认监听:

(可在 Terraka 设置里确认或修改端口号)

04 git

临时设置(仅当前终端会话):

export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890

永久设置 git 全局代理:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

只对 GitHub 生效:

git config --global http.https://github.com.proxy http://127.0.0.1:7890

取消代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

如果你用 SSH 协议克隆(git@github.com:...),需要额外配置 ~/.ssh/config

Host github.com
    ProxyCommand nc -x 127.0.0.1:7891 %h %p

nc 需要支持 SOCKS,macOS 自带版本支持,Linux 需要 netcat-openbsd

05 npm / yarn / pnpm

# npm
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

# yarn
yarn config set proxy http://127.0.0.1:7890
yarn config set https-proxy http://127.0.0.1:7890

# pnpm
pnpm config set proxy http://127.0.0.1:7890
pnpm config set https-proxy http://127.0.0.1:7890

取消:

npm config delete proxy
npm config delete https-proxy

如果你在用 nrm 管理镜像源,切换到 npmjs 官方源时记得同时设置代理,避免直连超时。国内开发一个常见的最佳实践是:访问 npm 官方源时走代理,访问 taobao/cnpm 镜像时直连。

06 pip

pip install package-name --proxy http://127.0.0.1:7890

永久配置,编辑(或创建)~/.config/pip/pip.conf(macOS/Linux)或 %APPDATA%\pip\pip.ini(Windows):

[global]
proxy = http://127.0.0.1:7890

07 Docker

Docker 的代理配置分两部分:拉取镜像(Docker daemon 的网络请求)和容器内的网络请求

拉取镜像(daemon 代理):

编辑(或创建)~/.docker/config.json

{
  "proxies": {
    "default": {
      "httpProxy": "http://127.0.0.1:7890",
      "httpsProxy": "http://127.0.0.1:7890",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}

或者在 Docker Desktop 里:Settings → Resources → Proxies,手动填入。

容器内代理:

docker run -e http_proxy=http://host.docker.internal:7890 \
           -e https_proxy=http://host.docker.internal:7890 \
           image-name

注意:容器内用 host.docker.internal 访问宿主机(macOS/Windows Docker Desktop 支持),Linux 上需要用 --network=host 或宿主机的实际内网 IP。

08 环境变量方式

很多命令行工具都遵循 http_proxy / https_proxy 环境变量,可以在 shell 配置文件里统一设置:

# 在 ~/.zshrc 或 ~/.bashrc 里添加
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export no_proxy=localhost,127.0.0.1,::1

重新打开终端后生效。这个方式覆盖面广,curl、wget、go get 等工具基本都支持。

最省事的方案是 TUN 模式。但如果你在 CI 环境或远程服务器上,手动配置环境变量是更通用的方案。


命令行工具不走系统代理是一个高频痛点,特别是在网络受限的环境里做开发。TUN 模式是桌面端最简洁的解法;如果需要精细控制,逐工具配置也不复杂,几条命令的事。

下载 Terraka →

JL
江流
FOUNDING ENGINEER · 内核维护

负责 Terraka 内核与协议层。前 Tower 工程师。喜欢把规则引擎写到极致,也喜欢清晨的咖啡。

把 2.7 装上吧。

Hysteria2、新测速、更稳的节点抖动指标——所有平台同步推送,旧版本也会自动提示更新。

下载 Terraka 2.7 v2.7.0 · BUILD 11240 · 18.4 MB