Skip to content
文章 / 1 分钟阅读

macOS SOCKS5 代理设置:系统级、终端和按应用配置

macOS 确实有系统 SOCKS 代理设置,但并非所有应用都会遵循它。以下介绍如何在系统设置和 networksetup 中设置它、让终端和开发者工具走代理,并验证 DNS 和泄漏。

macOS 确实有 SOCKS 代理设置,这让人感觉它像一个系统级开关。实际上,Safari 和部分应用会遵循它,而终端、Homebrew 和许多开发者工具会忽略它。本指南介绍如何在 macOS 上通过系统设置和 networksetup 设置 SOCKS5 代理,然后如何让你实际使用的工具遵循它而不会发生 DNS 泄漏。

macOS 将 SOCKS 代理设置保存在哪里

打开系统设置 > 网络。选择 Wi-Fi 或以太网,点击详细信息,然后点击代理。你会看到 Web 代理 (HTTP)、安全 Web 代理 (HTTPS)、SOCKS 代理等复选框。SOCKS 代理部分要求填写服务器和端口。它不提供协议版本下拉菜单。如需严格控制,请在应用支持时,用 socks5h 配置各个应用。

从系统设置设置 macOS SOCKS 代理

  1. 打开系统设置 > 网络。
  2. 选择当前活跃的网络服务,例如 Wi-Fi。
  3. 点击详细信息 > 代理。
  4. 启用 SOCKS 代理。
  5. 输入服务器地址和端口。
  6. 添加你需要的任何绕过域名,例如本地资源。
  7. 点击好并应用。

请记住,此设置会影响遵循 macOS 系统代理的应用。它并不保证每个应用的每个连接都通过代理。

使用 networksetup 从终端设置

networksetup 对脚本、远程支持和快速更改很有用。

# 列出网络服务
networksetup -listallnetworkservices

# 为 Wi-Fi 设置 SOCKS 代理
networksetup -setsocksfirewallproxy 'Wi-Fi' 127.0.0.1 1080

# 开启
networksetup -setsocksfirewallproxystate 'Wi-Fi' on

# 检查当前设置
networksetup -getsocksfirewallproxy 'Wi-Fi'

# 关闭
networksetup -setsocksfirewallproxystate 'Wi-Fi' off

你也可以设置绕过域名:

networksetup -setproxybypassdomains 'Wi-Fi' '*.local' '169.254/16' 'localhost'

在网络服务名称两侧使用引号,尤其是名称包含空格时。

让终端和开发者工具使用 SOCKS5

终端会话通常不会继承 macOS SOCKS 代理设置。为当前 shell 设置环境变量:

export ALL_PROXY=socks5h://127.0.0.1:1080
export all_proxy=socks5h://127.0.0.1:1080

一些工具使用 HTTP_PROXY 和 HTTPS_PROXY。注意:并非每个工具都能理解这些变量中的 socks5h:// 值。如果某个工具有专用的 SOCKS 标志,请改用该标志。

curl

curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org

git

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

# 稍后移除
git config --global --unset http.proxy
git config --global --unset https.proxy

Python

import requests

proxies = {
    'http': 'socks5h://127.0.0.1:1080',
    'https': 'socks5h://127.0.0.1:1080',
}

print(requests.get('https://api.ipify.org?format=json', proxies=proxies, timeout=10).json())

浏览器说明:Safari、Chrome 和 Firefox

  • Safari 通常会遵循 macOS 系统代理。
  • macOS 上的 Chrome 通常使用系统代理设置,除非启动时带有明确的代理标志。
  • Firefox 有自己的网络设置。如果它设置为使用系统代理设置,它应该会遵循 macOS。如果你需要远程 DNS,请将 Firefox 设置为手动代理配置,并启用使用 SOCKS v5 时代理 DNS。

更改浏览器设置后,请在隐私窗口中测试,以免缓存的连接误导你。

验证代理并发现 DNS 泄漏

检查系统代理配置:

scutil --proxy

检查出口 IP:

curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org

然后与 DNS 泄漏测试进行对比。关键区别在于 socks5 与 socks5h:socks5 可能在本地解析 DNS,而 socks5h 会将主机名发送给代理解析。如果地理定位很重要,远程 DNS 通常是你需要的。

关闭它并避免常见陷阱

  • 不再需要时禁用代理;否则强制门户和本地设备可能会失败。
  • 检查与 VPN 客户端和其他网络扩展的冲突。
  • 请记住,系统代理设置并不覆盖所有应用。
  • 如果代理运行在另一台机器上,不要使用 127.0.0.1。
  • 验证你真正关心的应用,而不仅仅是终端。

总结

macOS 为你提供了一个真正的系统 SOCKS 代理复选框,但它并非通用解决方案。对于遵循系统代理的应用,使用系统设置或 networksetup,然后直接用 socks5h 配置终端和开发者工具,并验证 DNS 行为。