MacOS双网卡实现内外网丝滑路由

前期准备

软件

  1. Surge MacOS
  2. 科学上网通道:shadowsocks协议,如果没有也没关系,后期可以加策略

硬件

  1. 有线网typeC转换器
  2. 网线

原理简述

MacOS双网卡路由的核心思路是基于域名分流,让不同的网络流量通过不同的网卡出口:

  1. 双网卡配置

    • 有线网卡(en0/USB以太网): 连接内网,访问公司内部资源
    • 无线网卡(Wi-Fi): 连接外网,访问互联网资源
  2. 路由决策机制

    • 通过Surge建立基于域名的路由规则
    • 匹配内网域名的流量 → 走有线网卡
    • 匹配外网域名或默认流量 → 走无线网卡
    • 特殊需求(如科学上网)的流量 → 走代理通道
  3. 流量分流优先级

    网卡优先级(系统层面)

    • Wi-Fi优先级 > 有线网卡优先级
    • 系统默认使用Wi-Fi访问外网,保证大部分流量正常访问互联网

    Surge配置优先级(应用层面)

    • 通过域名匹配规则进行路由选择
    • DIRECT策略: 走系统网卡优先级(默认Wi-Fi)
    • 代理策略: 匹配到内网域名或特定规则时,使用指定的代理服务器
      • 内网代理: 绑定有线网卡,访问内网资源
      • 科学上网代理: 绑定特定网卡(通常是Wi-Fi),访问受限资源
    • 代理服务器可在配置中绑定指定网卡,实现精确的流量控制

如何设置

1. 系统网络配置

1.1 设置网卡优先级

将Wi-Fi优先级设置在有线网络之前,确保系统默认走外网:

  1. 打开 系统设置(System Settings)
  2. 进入 网络(Network)
  3. 点击右下角的 设置服务顺序...(Set Service Order...)
  4. 拖动网络服务调整顺序:
    • Wi-Fi (放在最上面)
    • USB以太网/有线网络 (放在Wi-Fi下方)
  5. 点击 好(OK)应用(Apply) 保存设置

1.2 连接网络

1.3 查看并确认网卡名称

打开终端,执行以下命令列出所有网络接口:

ifconfig | grep -E "^(en|bridge)" | cut -d: -f1

执行后会看到类似输出:

en0    # 可能是Wi-Fi或有线网卡
en1    # 可能是Wi-Fi或有线网卡
en2    # USB以太网转接器
...

查看具体网卡的详细信息和IP地址:

ifconfig en0
ifconfig en1
# 或其他网卡编号

配置示例图:

网卡配置示例

上图展示了一个典型的双网卡配置:

确认两个网卡都已获取IP地址,并记下各自的网卡名称(后续Surge配置会用到)。在本例中,需要在Surge配置中使用 en0en7 作为接口名称。

2. Surge基础配置

本配置基于 Surge 6 for Mac

2.1 配置示例说明

本文档提供了一个完整的Surge配置示例: ![[surge.example.conf.md]]

该配置包含:

2.2 使用配置文件

根据Surge官方文档,Surge配置文件采用INI格式。

编辑配置文件:

  1. 启动Surge应用
  2. 在Surge主界面左下角点击"更多" → 选择"配置" → "导入配置文件"
  3. 选择 surge.example.conf.md 文件导入,或者手动编辑现有配置
  4. 根据实际情况修改以下参数:
    • 网卡名称(interface): 将en0en7改为实际的网卡名称(在步骤1.3中确认的网卡)
    • 内网域名: 修改*.innernet.com等为实际的内网域名
    • 代理服务器信息: 修改Shadowsocks的服务器地址、端口、密码
  5. 保存配置并启用

💡 注意: 以上步骤为常规操作流程,Surge的UI可能因版本而异。详细操作请参考Surge应用内的帮助或官方手册

2.3 核心配置说明

代理配置 (Proxy Section):

[Proxy]
# 科学上网代理 - 绑定en0网卡(Wi-Fi)
科学上网 = ss, proxy.example.com, 8388, encrypt-method=aes-256-gcm, password=your_password_here, interface=en0, test-url=http://www.google.com, ip-version=v4-only

# 开发内网代理 - 绑定en7网卡(有线)
开发内网 = direct, interface=en7, dns-follow-interface=true, test-url=http://code.innernet.com

关键参数: