前言:为什么开发者需要专门的代理工作流
对软件开发者来说,代理并不只是“打开网页更快”。日常工作中的 GitHub 仓库拉取、GitLab 协作、npm 或 PyPI 依赖下载、Docker Hub 镜像获取、远程服务器 SSH 登录,以及 AI 编程工具的模型请求,往往由不同程序、不同协议和不同域名共同完成。只开启浏览器系统代理,通常只能解决其中一部分问题,终端、IDE 插件和后台服务仍可能出现超时。
常见现象包括:git clone 长时间停在某个百分比、npm install 反复显示网络错误、SSH 握手失败、容器构建时无法拉取基础镜像,或者编辑器中的 AI 助手一直处于连接状态。这些问题未必来自节点本身,也可能是系统代理没有接管命令行、DNS 解析走了错误路径、规则把开发服务分到了直连,或不同工具使用了不同的代理变量。
本文以 Clash Verge Rev 与 Mihomo 内核为例,建立一套适合开发者的全链路方案:先用 TUN 模式接管系统流量,再通过策略组和规则区分代码托管、包管理器、容器仓库、SSH 与国内服务,最后为 Git、终端和常见包管理器补充显式代理。这样既能提高访问稳定性,也能避免所有流量无差别经过代理。
本文目标
让浏览器、终端、IDE、Git、包管理器和 Docker 在同一套可控的 Clash 分流逻辑下工作,并保留国内站点与局域网服务的直连能力。
1先理解代理链路:TUN、系统代理与终端变量
Clash 在开发场景中通常有三种接管方式。第一种是系统代理,它通过 HTTP 或 SOCKS 端口为支持系统代理的应用提供服务,配置简单,但并不能保证所有命令行程序都遵循。第二种是终端环境变量,例如 HTTP_PROXY、HTTPS_PROXY 和 ALL_PROXY,适合 Git、curl、npm 等明确支持代理的工具。第三种是TUN 模式,它创建虚拟网卡,从系统网络层接管连接,对不读取代理变量的程序更有效。
推荐的开发者组合是“TUN 作为兜底,环境变量作为显式控制,规则模式作为流量决策”。TUN 可以覆盖 IDE 子进程、Docker 辅助程序和部分不支持代理的应用;环境变量则让 Git 或包管理器的行为更容易诊断;Rule 模式可以避免访问公司内网、局域网 NAS 和国内镜像时产生不必要的延迟。
策略组应该如何划分
不要把所有海外服务都简单放进一个模糊的“国外流量”组。开发工作流更适合按照用途建立策略组,并为重要服务保留手动切换能力:
- Developer-Code:用于 GitHub、GitLab、Bitbucket、代码搜索和发布平台,优先选择稳定、延迟低的节点。
- Package-Registry:用于 npm、PyPI、RubyGems、Maven Central 等包仓库,重点关注持续下载能力和连接成功率。
- Container:用于 Docker Hub、ghcr.io 和相关镜像服务,最好选择带宽稳定、连接数限制较少的节点。
- AI-Tools:用于 AI 编程工具所依赖的 API 域名,建议固定地区和节点,避免短时间内频繁切换出口。
- LAN:公司内网、家庭局域网、打印机和开发板等地址始终使用
DIRECT。
专业建议
开发环境最怕“代理偶尔通、偶尔不通”。为代码托管和 AI 工具设置独立策略组,出现故障时可以快速判断是节点问题、规则问题还是应用自身问题。
2Clash 核心配置:开启 TUN 与开发者分流
打开 Clash Verge Rev 的配置页面,先确认当前配置使用的是 Mihomo 内核,并在设置中启用 TUN。不同客户端的字段名称可能略有差异,但配置思路基本一致。TUN 模式通常需要管理员权限或系统扩展授权,首次启用时请按照系统提示完成授权,然后重新连接一次配置。
上面的示例用于说明结构,实际 DNS 地址应根据所在网络和服务商情况调整。企业网络、校园网或需要访问内部域名的环境,不要盲目替换所有 DNS;可以将内部解析服务器加入 nameserver 或使用 nameserver-policy。若启用 fake-ip 后某个开发工具无法连接,可先查看该域名是否需要加入 fake-ip-filter,再决定是否切换 redir-host。
规则顺序比规则数量更重要
Clash 按从上到下的顺序匹配规则。开发域名规则应放在通用规则之前,否则可能先被某个 GEOIP 或 FINAL 规则处理。以下是适合放入自定义规则或 Merge 配置中的参考内容:
注意规则格式
策略组名称必须与配置中的 proxy-groups 完全一致。域名规则只覆盖基于域名的连接,若程序直接连接 IP,仍可能需要 TUN、进程规则或额外的 IP-CIDR 配置。
3动手操作:打通 Git、SSH、包管理器与 Docker
完成 Clash 基础配置后,不要立即修改所有工具。建议按照“端口确认—终端变量—单项测试—持久化”的顺序操作。假设 Clash 的 HTTP 代理端口为 7890,SOCKS5 端口为 7891;请先在客户端设置页面确认实际端口,再替换下面命令中的数值。
设置终端代理并进行快速测试
在 macOS、Linux 或使用 Bash 的 Windows 环境中,可以临时设置当前终端会话的代理:
如果返回 HTTP 响应头,说明当前终端可以通过代理访问目标。测试完成后,可以将变量写入 ~/.zshrc 或 ~/.bashrc,但不建议在公共服务器或共享 Shell 配置中无条件写死代理。更稳妥的方式是创建别名,只有需要时执行:
Git:优先使用独立配置
Git 可以通过 HTTP 代理访问 HTTPS 仓库。配置前请确认代理端口可用:
如果公司内网仓库或局域网 Git 服务不应经过代理,可以为特定域名设置直连,或者删除全局代理而改用环境变量。排查结束后,使用以下命令恢复默认:
SSH:不要把 HTTP 代理写进 SSH
SSH 使用独立协议,不能简单套用 http.proxy。如果代码托管平台提供 HTTPS 地址,开发者可以直接改用 HTTPS;如果必须使用 SSH,则可以在 Clash TUN 已正常工作的前提下直接测试:
若所在网络无法建立 SSH 的 22 端口,可查看目标平台是否提供备用 SSH 端口,并在 ~/.ssh/config 中配置对应的 HostName 和 Port。不要随意使用来源不明的 SSH 跳板或脚本,以免泄露私钥和仓库凭据。
npm、Python 与 Docker 的代理边界
npm 可以单独设置代理,但长期配置前应考虑是否会影响公司私有 Registry:
如果使用 pnpm、Yarn、pip 或 Poetry,优先参考它们各自的官方代理配置,或者通过当前终端的 HTTP_PROXY 与 HTTPS_PROXY 继承代理。Docker CLI 与 Docker daemon 不是同一个进程:命令行能访问不代表后台 daemon 一定能访问。Linux 上应根据发行版文档为 Docker 服务配置代理并重启服务,之后再执行:
- 在 Clash 面板确认 TUN 已启用,并观察连接是否命中正确策略组。
- 使用
curl -I测试 GitHub、npm Registry 和容器仓库。 - 分别执行
git ls-remote、npm view和docker pull。 - 打开 IDE 或 AI 编程工具,确认其请求域名在 Clash 日志中出现。
- 最后测试公司内网、局域网设备和国内镜像,确保它们仍然走直连。
4故障排查、性能优化与安全边界
当某个工具仍然失败时,先不要同时更换节点、DNS 和规则。打开 Clash 的连接日志,记录目标域名、命中的规则、使用的策略组以及连接错误类型,再逐项排查。若日志中完全没有请求,说明应用可能绕过了 Clash,优先检查 TUN 权限、系统防火墙和应用自身的网络设置;若日志显示命中了错误策略组,则调整规则顺序;若命中正确但连接超时,再比较节点质量。
- GitHub 页面能打开但 clone 失败:分别测试 HTTPS 与 SSH,检查 22 端口、凭据和远程地址,不要把浏览器成功误认为 SSH 已成功。
- npm 仍然很慢:确认 npm 实际使用的 Registry,检查是否存在旧的代理配置,并避免代理变量与 npm 独立配置互相覆盖。
- Docker pull 超时:确认代理配置写入的是 Docker daemon,而不是只有当前用户的终端;同时检查镜像仓库域名是否被分到 Container 组。
- AI 工具频繁验证:固定一个稳定出口,避免多个地区节点快速切换;检查系统时间、DNS 和浏览器 WebSocket 是否正常。
- 局域网服务无法访问:确认
192.168.0.0/16、10.0.0.0/8等私有地址使用DIRECT,并检查系统是否存在重复 VPN 网卡。
安全方面,不建议把订阅链接、代理认证信息或 SSH 私钥提交到 Git 仓库。共享电脑上使用环境变量时,要留意命令历史、进程列表和 CI 日志可能记录代理凭据。CI/CD 环境应使用平台提供的 Secret 管理,并为构建任务设置最小权限。代理的用途是改善合法的软件开发访问,不应绕过组织的安全策略或访问没有授权的资源。
常见问题解答
开启 TUN 后,还需要设置 HTTP_PROXY 吗?
不一定。TUN 能覆盖许多不读取代理变量的程序,但显式变量更便于 Git、curl 和包管理器诊断,也能在关闭 TUN 时继续使用。建议先用 TUN 作为系统级兜底,再为需要明确代理行为的工具单独设置。
Git 的 HTTPS 代理和终端代理应该同时配置吗?
通常不需要。两者同时存在时,Git 的独立配置可能覆盖环境变量,容易造成排查混乱。个人电脑可以使用 Git 独立配置,临时环境或项目切换较多时则更适合用终端变量,并定期检查当前生效值。
为什么浏览器正常,Docker 还是无法拉取镜像?
浏览器使用的是当前用户的系统代理,而 Docker daemon 可能作为独立后台服务运行,拥有不同的环境变量和网络权限。需要分别配置 daemon 的代理,并重启服务后通过 docker info 与实际拉取测试确认。
规则越多是不是越稳定?
不是。规则过多会增加维护成本,还可能因为顺序冲突导致误分流。建议从域名后缀、策略组和局域网直连三类基础规则开始,依据 Clash 日志补充确实需要的域名,定期删除失效条目。