配置优化 中级

macOS网络代理配置

2025年06月19日
15 分钟阅读

详细介绍在macOS系统上配置网络代理的各种方法,包括系统级代理、应用级代理和高级配置技巧。

在 macOS 系统中,有多种方式可以配置网络代理。本教程将详细介绍各种代理配置方法,帮助您根据不同需求选择最适合的方案。

代理配置概述

代理类型说明

  1. HTTP代理

    • 用于网页浏览和HTTP流量
    • 端口通常为8080、8888等
  2. HTTPS代理

    • 用于加密的HTTPS流量
    • 通常与HTTP代理端口相同
  3. SOCKS代理

    • 支持更多协议和应用
    • 端口通常为1080、1081等
  4. FTP代理

    • 专用于FTP文件传输
    • 现在使用相对较少

系统级代理配置

通过系统偏好设置配置

  1. 打开网络设置

    • 点击Apple菜单 → “系统偏好设置”
    • 选择"网络"图标
  2. 选择网络接口

    • 在左侧列表中选择当前使用的网络接口
    • WiFi: 选择"Wi-Fi"
    • 有线: 选择"以太网"
  3. 进入代理设置

    • 点击"高级…“按钮
    • 选择"代理"选项卡
  4. 配置代理类型

    HTTP代理配置:

    HTTP代理: ✓ 启用
    代理服务器: 127.0.0.1
    端口: 7890
    

    HTTPS代理配置:

    HTTPS代理: ✓ 启用  
    代理服务器: 127.0.0.1
    端口: 7890
    

    SOCKS代理配置:

    SOCKS代理: ✓ 启用
    代理服务器: 127.0.0.1
    端口: 7891
    
  5. 设置绕过规则

    在"忽略这些主机与域的代理设置"中添加:

    *.local
    169.254/16
    127.0.0.1
    localhost
    *.cn
    10.0.0.0/8
    172.16.0.0/12
    192.168.0.0/16
    
  6. 保存设置

    • 点击"好"保存代理设置
    • 点击"应用"使设置生效

通过命令行配置

对于高级用户,可以使用命令行快速配置:

  1. 设置HTTP代理

    # 设置HTTP代理
    sudo networksetup -setwebproxy "Wi-Fi" 127.0.0.1 7890
    
    # 设置HTTPS代理
    sudo networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 7890
    
    # 设置SOCKS代理
    sudo networksetup -setsocksfirewallproxy "Wi-Fi" 127.0.0.1 7891
    
  2. 启用代理

    # 启用所有代理
    sudo networksetup -setwebproxystate "Wi-Fi" on
    sudo networksetup -setsecurewebproxystate "Wi-Fi" on
    sudo networksetup -setsocksfirewallproxystate "Wi-Fi" on
    
  3. 查看当前代理设置

    # 查看所有网络服务
    networksetup -listallnetworkservices
    
    # 查看代理配置
    networksetup -getwebproxy "Wi-Fi"
    networksetup -getsecurewebproxy "Wi-Fi"
    networksetup -getsocksfirewallproxy "Wi-Fi"
    
  4. 关闭代理

    # 关闭所有代理
    sudo networksetup -setwebproxystate "Wi-Fi" off
    sudo networksetup -setsecurewebproxystate "Wi-Fi" off
    sudo networksetup -setsocksfirewallproxystate "Wi-Fi" off
    

应用级代理配置

浏览器代理设置

Safari

Safari 使用系统代理设置,无需单独配置。

Chrome

  1. 使用系统代理(默认)

    • Chrome 默认使用系统代理设置
  2. 使用命令行参数

    # 启动时指定代理
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
    --proxy-server="socks5://127.0.0.1:7891"
    
  3. 使用扩展程序

    • 安装 Proxy SwitchyOmega 等扩展
    • 可以更灵活地管理代理规则

Firefox

  1. 打开代理设置

    • Firefox → 偏好设置 → 常规
    • 向下滚动到"网络设置”
  2. 配置代理

    • 选择"手动配置代理"
    • 填入代理服务器信息

终端代理设置

  1. 临时设置

    # 设置HTTP代理
    export http_proxy=http://127.0.0.1:7890
    export https_proxy=http://127.0.0.1:7890
    
    # 设置SOCKS代理
    export ALL_PROXY=socks5://127.0.0.1:7891
    
  2. 永久设置

    编辑 ~/.zshrc~/.bash_profile:

    # 添加以下内容
    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:7891
    export no_proxy=localhost,127.0.0.1,*.local
    
  3. 条件性设置

    创建代理开关函数:

    # 在 ~/.zshrc 中添加
    function proxy_on() {
        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:7891
        echo "代理已开启"
    }
    
    function proxy_off() {
        unset http_proxy
        unset https_proxy
        unset ALL_PROXY
        echo "代理已关闭"
    }
    
    function proxy_status() {
        if [ -n "$http_proxy" ]; then
            echo "代理状态: 已开启"
            echo "HTTP代理: $http_proxy"
            echo "HTTPS代理: $https_proxy"
            echo "SOCKS代理: $ALL_PROXY"
        else
            echo "代理状态: 已关闭"
        fi
    }
    

Git代理配置

  1. HTTP(S) 仓库代理

    # 设置全局代理
    git config --global http.proxy http://127.0.0.1:7890
    git config --global https.proxy http://127.0.0.1:7890
    
    # 仅为特定域名设置代理
    git config --global http.https://github.com.proxy socks5://127.0.0.1:7891
    
  2. SSH 仓库代理

    编辑 ~/.ssh/config:

    Host github.com
        HostName github.com
        User git
        ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
    
  3. 取消代理设置

    git config --global --unset http.proxy
    git config --global --unset https.proxy
    

高级代理配置

PAC文件配置

  1. 什么是PAC文件

    • PAC (Proxy Auto-Configuration) 文件
    • 使用JavaScript编写的代理规则
    • 可以实现智能代理切换
  2. 创建PAC文件

    创建 proxy.pac 文件:

    function FindProxyForURL(url, host) {
        // 本地地址直连
        if (isInNet(host, "127.0.0.0", "255.0.0.0") ||
            isInNet(host, "10.0.0.0", "255.0.0.0") ||
            isInNet(host, "172.16.0.0", "255.240.0.0") ||
            isInNet(host, "192.168.0.0", "255.255.0.0") ||
            isPlainHostName(host)) {
            return "DIRECT";
        }
    
        // 特定域名走代理
        if (shExpMatch(host, "*.google.com") ||
            shExpMatch(host, "*.youtube.com") ||
            shExpMatch(host, "*.github.com")) {
            return "SOCKS5 127.0.0.1:7891";
        }
    
        // 默认直连
        return "DIRECT";
    }
    
  3. 使用PAC文件

    • 在系统代理设置中选择"自动代理配置"
    • 填入PAC文件的URL或文件路径

代理链配置

  1. 什么是代理链

    • 多级代理连接
    • 增强隐私保护
    • 绕过复杂网络限制
  2. 配置示例

    # Clash配置示例
    proxies:
      - name: "第一级代理"
        type: socks5
        server: first-proxy.com
        port: 1080
    
      - name: "第二级代理"
        type: http
        server: second-proxy.com
        port: 8080
    
    proxy-groups:
      - name: "代理链"
        type: relay
        proxies:
          - "第一级代理"
          - "第二级代理"
    

代理测试与验证

连接测试

  1. 检查IP地址

    # 检查外网IP
    curl -4 ip.sb
    curl -6 ip.sb
    
    # 检查IP归属地
    curl cip.cc
    
  2. 测试特定网站

    # 测试Google连接
    curl -I https://www.google.com
    
    # 测试延迟
    curl -o /dev/null -s -w "%{time_total}\n" https://www.google.com
    
  3. DNS解析测试

    # 检查DNS解析
    nslookup google.com
    dig google.com
    

代理性能测试

  1. 延迟测试

    # 使用ping测试(注意:SOCKS代理不支持ping)
    ping proxy-server.com
    
    # 使用curl测试HTTP延迟
    curl -o /dev/null -s -w "连接时间: %{time_connect}s\n总时间: %{time_total}s\n" https://www.google.com
    
  2. 带宽测试

    # 下载测试文件
    curl -o /dev/null https://speed.cloudflare.com/__down?bytes=100000000
    

常见问题解决

代理设置不生效

  1. 检查代理服务状态

    # 检查端口是否被监听
    lsof -i :7890
    netstat -an | grep 7890
    
  2. 验证代理配置

    • 确认代理地址和端口正确
    • 检查是否需要用户名密码验证
  3. 清除DNS缓存

    sudo dscacheutil -flushcache
    sudo killall -HUP mDNSResponder
    

某些应用不走代理

  1. 检查应用代理设置

    • 有些应用有独立的代理设置
    • 需要单独配置
  2. 使用强制代理工具

    • 使用 Proxifier 等工具
    • 强制指定应用走代理

代理速度慢

  1. 选择合适的代理协议

    • SOCKS5 通常比HTTP代理效率更高
    • 选择地理位置较近的代理服务器
  2. 优化系统设置

    • 调整TCP缓冲区大小
    • 优化网络参数

自动化脚本

代理切换脚本

创建便捷的代理切换脚本:

#!/bin/bash
# 保存为 proxy_switch.sh

NETWORK_SERVICE="Wi-Fi"
PROXY_HOST="127.0.0.1"
HTTP_PORT="7890"
SOCKS_PORT="7891"

case "$1" in
    "on")
        echo "开启系统代理..."
        sudo networksetup -setwebproxy "$NETWORK_SERVICE" $PROXY_HOST $HTTP_PORT
        sudo networksetup -setsecurewebproxy "$NETWORK_SERVICE" $PROXY_HOST $HTTP_PORT
        sudo networksetup -setsocksfirewallproxy "$NETWORK_SERVICE" $PROXY_HOST $SOCKS_PORT
        
        sudo networksetup -setwebproxystate "$NETWORK_SERVICE" on
        sudo networksetup -setsecurewebproxystate "$NETWORK_SERVICE" on
        sudo networksetup -setsocksfirewallproxystate "$NETWORK_SERVICE" on
        echo "系统代理已开启"
        ;;
    "off")
        echo "关闭系统代理..."
        sudo networksetup -setwebproxystate "$NETWORK_SERVICE" off
        sudo networksetup -setsecurewebproxystate "$NETWORK_SERVICE" off
        sudo networksetup -setsocksfirewallproxystate "$NETWORK_SERVICE" off
        echo "系统代理已关闭"
        ;;
    "status")
        echo "当前代理状态:"
        networksetup -getwebproxy "$NETWORK_SERVICE"
        networksetup -getsecurewebproxy "$NETWORK_SERVICE"
        networksetup -getsocksfirewallproxy "$NETWORK_SERVICE"
        ;;
    *)
        echo "用法: $0 {on|off|status}"
        echo "  on     - 开启系统代理"
        echo "  off    - 关闭系统代理"
        echo "  status - 查看代理状态"
        exit 1
        ;;
esac

使用方法:

# 赋予执行权限
chmod +x proxy_switch.sh

# 开启代理
./proxy_switch.sh on

# 关闭代理
./proxy_switch.sh off

# 查看状态
./proxy_switch.sh status

总结

macOS 提供了多种灵活的代理配置方式:

  1. 系统级配置: 影响所有应用,配置简单
  2. 应用级配置: 更精细的控制,适合特定需求
  3. 命令行配置: 适合开发者和高级用户
  4. PAC文件: 实现智能代理规则

选择合适的配置方式取决于您的具体需求。对于一般用户,建议使用 ClashX 等专业工具来管理代理设置,这样更加方便和安全。

通过本教程的学习,您应该能够在 macOS 上熟练配置和管理网络代理了。如果遇到问题,建议查看相关软件的官方文档或寻求技术支持。