macos不原生支持多级代理,但可通过proxychains-ng构建代理链实现a→b→c串联;需配置strict_chain模式、分层代理列表,并配合cli别名与浏览器上游设置协同使用。
macos 本身不原生支持多级代理(即代理链,如 a → b → c)的图形界面配置,但可通过组合工具与环境控制,在开发、测试或生产环境中实现稳定、可复用的多级代理访问。关键不是“系统内置支持”,而是构建一套分层可控的代理调度机制。
明确多级代理的实际需求场景
所谓“多级代理”,常见于以下真实用例:
- 本地调试链路:本地 Charles/mitmproxy(监听 8888)→ 企业出口代理(10.10.1.5:8080)→ 目标测试环境(如 staging.example.com)
- 跨区域穿透:本机 socks5(127.0.0.1:1080)→ 中转云服务器 http 代理(192.168.100.2:3128)→ 海外 SaaS 接口
- 安全合规测试:命令行工具(curl/git)必须经审计代理(proxy-a:8000),再由该代理统一转发至风控网关(proxy-b:9000)
核心实现方式:proxychains-ng + 分层配置文件
这是目前 macOS 上最可靠、兼容性最强的多级代理方案。它不依赖应用是否支持代理,而是通过 LD_PRELOAD(或 DYLD_INSERT_LIBRARIES)劫持 socket 调用,强制所有 TCP 连接按指定顺序走代理链。
- 安装:
brew install proxychains-ng - 配置文件路径:
/usr/local/etc/proxychains.conf(Apple Silicon)或/usr/local/Cellar/proxychains-ng/4.18/etc/proxychains.conf(Intel) - 关键配置段示例(支持 3 级串联):
strict_chain proxy_dns tcp_read_time_out 15000 tcp_connect_time_out 8000 <p>[ProxyList]</p><h1>第一级:本地 SOCKS5(如 ClashX / Surge)</h1><p>socks5 127.0.0.1 1080</p><h1>第二级:中转 HTTP 代理(需支持 CONNECT 方法)</h1><p>http 192.168.100.2 3128</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7189" title="macOS Automator Services"><img src="https://img.php.cn/upload/skill/000/000/081/179135282164609.jpg" alt="macOS Automator Services" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill7189" title="macOS Automator Services" class="overflowclass">macOS Automator Services</a> <p class="overflowclass">部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...</p> </div> <a rel="nofollow" href="/xiazai/skill7189" title="macOS Automator Services" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h1>第三级:目标环境前置代理(带基础认证)</h1><p>http 10.20.30.40 8000 user pass myuser:mypass</p>
⚠️ 注意:strict_chain 表示严格顺序串联;若某一级失败则整条链中断。dynamic_chain 可跳过失效节点,适合高可用测试。
终端命令与脚本化集成(生产就绪)
避免每次敲长命令,把多级代理封装为可复用的环境:
- 创建别名:
alias pc='proxychains4 -f /usr/local/etc/proxychains.conf',加到~/.zshrc - 测试连通性:
pc curl -v https://staging-api.internal - Git over multi-proxy:
pc git clone https://gitlab.company.com/internal/repo.git - Node.js 工具链:
pc npm install --registry https://npm.company-registry.com
对需要长期运行的测试服务(如 Cypress E2E、Postman CLI),可直接在启动脚本前加 proxychains4 -f ...,确保整个进程树走链路。
浏览器与 GUI 应用的协同策略
图形应用无法被 proxychains 拦截(SIP 保护 + GUI 沙盒限制),需单独适配:
- Chrome / Edge:启动时指定第一级代理(通常是本地 socks5),再让该代理自身配置上游链路(如 Clash 的 Proxy Group 或 Surge 的 Policy Rule)
- Safari:仅支持单层系统代理,建议搭配 CocoaHTTPServer 类轻量本地代理做桥接,或改用 Chrome 测试
- Charles / mitmproxy:本身支持 upstream proxy 设置(Settings → Proxies → Upstream Proxy Settings),填入第二级地址即可形成两级
这样,GUI 流量走「浏览器 → 本地代理(含上链)」,CLI 流量走「proxychains → 多级链」,两者逻辑一致、行为可比,适合端到端生产验证。










