Ubuntu代理设置全解

🧩 一、Linux 上的“系统代理”其实是 GUI 层代理

当你在 Ubuntu 的图形界面中设置了:

Settings → Network → Network Proxy 例如 SOCKS: 127.0.0.1:1080 或 HTTP: 127.0.0.1:1080

这实际上只影响:

  • GNOME 桌面程序(比如 Firefox、Snap 应用、系统更新等);
  • 它通过 gsettingsdconf 传递配置;
  • 命令行程序(git、curl、wget 等)不会自动使用

👉 换句话说:

你设置的“系统代理”,git 默认不会理会。

🧭 二、要让 git 走代理,你必须单独配置它

✅ 如果你的代理是 HTTP/HTTPS 代理(如 v2ray http 入站)

例如你的 V2Ray 监听:

127.0.0.1:10802 (protocol: http)

则执行:

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

确认:

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

✅ 如果你的代理是 SOCKS5(例如 127.0.0.1:1080 或 10801)

可以这样:

git config --global http.proxy socks5h://127.0.0.1:10801
git config --global https.proxy socks5h://127.0.0.1:10801

注意:

  • socks5h:// 中的 h 表示由代理解析域名(防止 DNS 泄露);
  • 如果你写 socks5://,git 会在本地解析域名,导致可能被污染。

✅ 取消代理(恢复直连)

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

🧠 三、通用环境变量法(影响所有命令行程序)

你也可以在终端中导出代理变量,这样不仅 gitcurlwgetapt 等也能自动使用代理。

HTTP 代理:

export http_proxy="http://127.0.0.1:10802"
export https_proxy="http://127.0.0.1:10802"

SOCKS5 代理:

export ALL_PROXY="socks5h://127.0.0.1:10801"

生效验证

echo $http_proxy
curl https://www.google.com

如果能打开,就说明走代理成功。

要让这些变量永久生效,可以加到:

~/.bashrc

~/.bash_profile

🧪 四、验证代理是否真的生效

1️⃣ 使用 curl 测试

curl -I https://google.com

如果能返回 HTTP/2 200 或重定向,说明代理生效。 若提示 “Connection timed out” 则未使用代理。

2️⃣ 使用 ip 检查

curl -s https://ipinfo.io

查看 ip 字段是否为你的代理出口 IP。

✅ 总结表格

方式 适用于 是否影响 git 是否影响终端
Ubuntu GUI 系统代理 桌面程序 (GNOME) ❌ 否 ❌ 否
git config --global http.proxy 仅 git ✅ 是 ❌ 否
export http_proxy=... 所有命令行程序 ✅ 是 ✅ 是

💡 推荐实践(给你当前的情况)

你使用 V2Ray core 本地监听:

  • SOCKS5: 127.0.0.1:10801
  • HTTP: 127.0.0.1:10802

那你可以直接在 Ubuntu 终端执行:

git config --global https.proxy socks5h://127.0.0.1:10801
git config --global http.proxy socks5h://127.0.0.1:10801

或者让所有终端命令都通过代理:

export ALL_PROXY="socks5h://127.0.0.1:10801"