macOS 上使用 Shadowsocks 时shell的配置

在 macOS 上使用 Shadowsocks 时,浏览器能访问而 Shell(终端)无法访问网站,通常是因为代理设置未正确应用于终端环境。以下是逐步排查和解决方案:


1. ​确认 Shadowsocks 的代理类型和端口

  • Shadowsocks 默认使用 ​SOCKS5 代理,通常监听在 127.0.0.1:1080 或 1086(具体端口以客户端设置为准)。
  • 打开 Shadowsocks 客户端,检查 ​本地端口​(Local Port)配置。

2. ​为终端配置代理

Shell 默认不会继承系统或浏览器的代理设置,需手动配置:

方法 1:临时通过环境变量设置

bash
 
export http_proxy="socks5://127.0.0.1:1086"   # HTTP 流量
export https_proxy="socks5://127.0.0.1:1086"  # HTTPS 流量
export all_proxy="socks5://127.0.0.1:1086"    # 所有流量
  • 测试是否生效:
    bash
     
    curl -v https://www.google.com
  • 缺点:关闭终端后失效,需每次重新设置。

方法 2:写入 Shell 配置文件(持久化)​

将环境变量添加到 ~/.zshrc(Zsh)或 ~/.bash_profile(Bash):

bash
 
echo 'export all_proxy="socks5://127.0.0.1:1080"' >> ~/.zshrc
source ~/.zshrc

3. ​检查代理是否生效

  • 执行以下命令,查看返回的 IP 是否与代理服务器一致:
    bash
     
    curl -x socks5://127.0.0.1:1080 https://api.ipify.org?format=json
  • 如果失败,可能是代理端口错误或 Shadowsocks 未正常运行。

4. ​其他可能原因

  • DNS 污染:终端可能直接使用系统 DNS,绕过代理。尝试以下方法:

    bash
     
    curl --socks5-hostname 127.0.0.1:1080 https://www.google.com

    --socks5-hostname 会通过代理解析 DNS)

  • 工具不支持代理:如 ping 等底层工具不走代理,需改用 curl 或 wget 测试。

  • Shadowsocks 配置问题

    • 确认客户端已开启 ​全局模式 或 ​PAC 规则正确
    • 重启 Shadowsocks 客户端。

有话要说