代理配置

快连如何在Ubuntu终端单独设置代理?

Ubuntu终端单独走快连代理,用env变量+alias三行搞定,全局不动GUI。

作者:快连官方团队
快连 Ubuntu 终端代理 如何设置, Ubuntu 仅终端走代理 怎么配置, 终端代理与全局代理 区别, 终端无法连接代理 如何排查, 无桌面 Ubuntu 代理 配置方法, export http_proxy 使用步骤, apt 走代理 设置技巧, ProxyCommand 在 SSH 中的应用

为什么要在终端里“单独”挂代理

在 Ubuntu 桌面里启动快连(QuickConnect privacy tool)后,默认会接管整台机器的路由,浏览器、IM、甚至 Snap 更新全部走隧道。但开发场景里常出现两种尴尬:CI 脚本要拉海外依赖,却不想把 500 MB 的 Docker 镜像也挤到隧道;或者公司内网 GitLab 必须走直连,而 Homebrew 又要访问 GitHub。此时“只让终端流量穿隧道”成了刚需。

单独设置的核心思路是环境变量级代理:仅对当前 Shell 会话生效,系统路由表、NetworkManager、其他应用完全无感。好处有三:一,可随时开关,无需 root;二,与快连的 TUN 模式互不干扰,随时回退;三,同一窗口内可精细化拆分,curl 走隧道,ssh 走直连,全凭 alias 一键切换。

为什么要在终端里“单独”挂代理
为什么要在终端里“单独”挂代理

先确认快连本地监听地址

截至当前的最新版本,快连 Linux 客户端默认会在 127.0.0.1:7890 开放 HTTP/SOCKS5 混合端口(可在客户端「设置-本地代理」页签看到,若被占用会顺延 7891、7892……)。这个端口就是终端流量的“入口”。

验证命令:ss -ltnp | grep 789,若返回 users:(("QuickConnect",pid=xxx,fd=xx)) 即表示端口已就绪。

三行配置:临时生效法

打开新终端,直接粘贴以下三行即可让当前会话走隧道:

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export all_proxy="socks5://127.0.0.1:7890"

解释:http_proxy / https_proxy 覆盖 80/443 明文请求;all_proxy 让支持 SOCKS 的工具(curl、wget、git、pip、npm、brew)自动回落。经验性观察,同时给出两种协议地址可兼容 95% 以上 CLI 软件,无需再区分。

一键开关:用 alias 写进 .bashrc

把下面函数追加到 ~/.bashrc~/.zshrc,以后输入 qcon 即走隧道,qcoff 立即恢复直连:

alias qcon='export http_proxy=http://127.0.0.1:7890 https_proxy=$http_proxy all_proxy=socks5://127.0.0.1:7890'
alias qcoff='unset http_proxy https_proxy all_proxy'

加载后立即验证:qcon && curl -s ipinfo.io/country 应显示海外出口;qcoff && curl -s ipinfo.io/country 应回到本地 ISP。此法对同一窗口内的子进程递归生效,新窗口默认不继承,天然隔离。

持久会话:byobu/tmux 里常驻

如果你习惯在服务器里开 tmux,担心窗口意外断开,可在 ~/.tmux.conf 写:

set -g update-environment 'http_proxy https_proxy all_proxy'

这样即使重新 attach,环境变量仍在;想彻底清掉,只需在对应 pane 里执行 qcoff

常见工具的特殊写法

Git

Git 默认不继承 all_proxy,需单独指定:

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

回退:git config --global --unset http.proxy

APT

APT 不走环境变量,需创建 /etc/apt/apt.conf.d/95proxies,写入:

Acquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";

用完即删即可恢复直连。

Docker

Docker build 阶段继承客户端环境,只需在 Dockerfile 同目录建 .dockerignore 同级文件 docker-compose.yml 里加:

build:
  args:
    http_proxy:  http://127.0.0.1:7890
    https_proxy: http://127.0.0.1:7890

镜像构建完即失效,不污染运行时。

排查:为什么变量不生效

  1. 端口未监听:先确认快连客户端已启动且「本地代理」开关打开。
  2. 变量被覆盖:部分 CLI 工具(如 npm)会强制把 https_proxy 转成 HTTPS_PROXY 大写,可两个都 export。
  3. SOCKS 版本不一致:curl 7.86+ 默认 SOCKS5h(远程解析),若公司 DNS 污染严重,可改用 socks5h:// 强制远程解析。
  4. 防火墙:ufw 可能把 7890 当“本地回环”放行,但若你改了监听地址为 0.0.0.0,需额外放行。

何时不该用环境变量法

1. 需要 UDP 转发:环境变量只影响 TCP/HTTP 层,游戏语音、QUIC 测速等 UDP 流量仍会走本地路由表,此时应切回 TUN 模式。2. 多用户共享服务器:export 对同一 UID 的所有子进程生效,若多人共用 screen,可能互相污染。3. 合规审计:部分企业要求“所有出口流量可回溯”,而 SOCKS 隧道里 URL 日志不完整,需提前确认安全团队是否允许。

何时不该用环境变量法
何时不该用环境变量法

与系统代理并存:Gsettings 不动

Ubuntu GNOME 的「设置-网络-网络代理」对应 gsettings 键值,仅影响 GTK/Flatpak 应用,与 Shell 环境变量互不干扰。经验性观察,把终端代理和系统代理分开后,VS Code、Chrome 继续走 GUI 代理,而终端里 npm install 走 SOCKS,两者可同时在线,零冲突。

验证与观测方法

命令预期输出说明
curl -x socks5://127.0.0.1:7890 ipinfo.io/countryUS / SG / JP …确认出口国变化
wget -O- --method=CONNECT ipinfo.io 2>&1 | grep -i connectedHTTP 200测试 CONNECT 隧道
time git clone https://github.com/tensorflow/tensorflow --depth=1耗时对比qcon 前后差值应缩短 30–60 %

适用/不适用场景清单

  • ✅ 个人开发机,需临时拉取 GitHub、PyPI、npm、Go Module。
  • ✅ 公司内网服务器,只允许 22 端口入站,通过隧道更新证书。
  • ✅ CI 容器阶段构建,构建缓存走海外,运行时镜像推回本地 Harbor。
  • ❌ 需要完整 UDP 转发的外服游戏(Valorant、PUBG),请改用 TUN。
  • ❌ 多人共享的跳板机,export 易互相覆盖,建议用 systemd-nspawn 或 Docker 隔离。

最佳实践 5 条

  1. 永远先 qcoff 再关客户端,避免残留变量导致下一次 curl 连不上。
  2. 把 7890 写进 .bashrc 时加端口存在判断:[[ -S /tmp/qc.sock ]] && alias qcon=...,防止客户端未启时报错。
  3. proxychains-ng 做“单命令级”代理,可临时让 proxychains4 apt update 不走全局。
  4. 脚本里 set -e 时,先 export 再执行,失败即退出,避免半代理状态。
  5. 审计需求强时,把 export | grep -i proxy 写进 CI 日志,方便回溯。

FAQ(结构化数据)

环境变量和 TUN 模式能否同时开?

可以。TUN 改的是系统路由表,环境变量只影响当前 Shell 的子进程,两者层级不同,互不抢占。但注意 DNS 解析仍走 TUN,若需纯 SOCKS 远程解析,把 curl 升级为 7.86+ 并使用 socks5h://。

端口被占用如何修改?

在快连客户端「设置-本地代理」里把 7890 改成任意空闲端口,再把本文所有 7890 同步替换即可,无需重启系统。

为什么 git push 还是超时?

Git 默认不走 all_proxy,必须单独 git config --global http.proxy;若仓库使用 SSH 协议([email protected]),需改 ~/.ssh/config 的 ProxyCommand 用 nc 转 SOCKS,或改用 HTTPS 地址。

WSL2 里能用吗?

可以。把 127.0.0.1 换成 Windows 主机在 WSL2 里的虚拟网卡地址(cat /etc/resolv.conf 的 nameserver,通常是 172.x.x.1),其余步骤完全一致。

如何彻底关闭终端代理?

在当前 Shell 执行 qcoff 或手动 unset http_proxy https_proxy all_proxy;若已写入 .bashrc,需注释对应行并 source ~/.bashrc。全局路由不受影响。

收尾:下一步行动

至此,你已能在 Ubuntu 终端里用三行命令让流量单独走快连隧道,而系统其余部分保持原路由。建议先把 alias 方案写进 .bashrc,再用 curl 验证出口,确认无误后推广到 CI 脚本。若后续需要 UDP 或全流量转发,再平滑切换到 TUN 模式即可。记住:变量级代理最小侵入,随时 qcoff,回退成本为零。

终端代理环境变量Ubuntu配置排查