MacOS双网卡实现内外网丝滑路由
前期准备
软件
- Surge MacOS
- 科学上网通道:shadowsocks协议,如果没有也没关系,后期可以加策略
硬件
- 有线网typeC转换器
- 网线
原理简述
MacOS双网卡路由的核心思路是基于域名分流,让不同的网络流量通过不同的网卡出口:
-
双网卡配置
- 有线网卡(en0/USB以太网): 连接内网,访问公司内部资源
- 无线网卡(Wi-Fi): 连接外网,访问互联网资源
-
路由决策机制
- 通过Surge建立基于域名的路由规则
- 匹配内网域名的流量 → 走有线网卡
- 匹配外网域名或默认流量 → 走无线网卡
- 特殊需求(如科学上网)的流量 → 走代理通道
-
流量分流优先级
网卡优先级(系统层面)
- Wi-Fi优先级 > 有线网卡优先级
- 系统默认使用Wi-Fi访问外网,保证大部分流量正常访问互联网
Surge配置优先级(应用层面)
- 通过域名匹配规则进行路由选择
- DIRECT策略: 走系统网卡优先级(默认Wi-Fi)
- 代理策略: 匹配到内网域名或特定规则时,使用指定的代理服务器
- 内网代理: 绑定有线网卡,访问内网资源
- 科学上网代理: 绑定特定网卡(通常是Wi-Fi),访问受限资源
- 代理服务器可在配置中绑定指定网卡,实现精确的流量控制
如何设置
1. 系统网络配置
1.1 设置网卡优先级
将Wi-Fi优先级设置在有线网络之前,确保系统默认走外网:
- 打开 系统设置(System Settings)
- 进入 网络(Network)
- 点击右下角的 设置服务顺序...(Set Service Order...)
- 拖动网络服务调整顺序:
- Wi-Fi (放在最上面)
- USB以太网/有线网络 (放在Wi-Fi下方)
- 点击 好(OK) → 应用(Apply) 保存设置
1.2 连接网络
- Wi-Fi: 连接外网(公司访客网络/家庭网络等)
- 有线网络: 插入网线,连接内网
1.3 查看并确认网卡名称
打开终端,执行以下命令列出所有网络接口:
ifconfig | grep -E "^(en|bridge)" | cut -d: -f1
执行后会看到类似输出:
en0 # 可能是Wi-Fi或有线网卡
en1 # 可能是Wi-Fi或有线网卡
en2 # USB以太网转接器
...
查看具体网卡的详细信息和IP地址:
ifconfig en0
ifconfig en1
# 或其他网卡编号
配置示例图:

上图展示了一个典型的双网卡配置:
-
en0 (WiFi网卡)
- 状态:
active(已激活) - IP地址:
192.168.45.107 - 子网掩码:
255.255.255.0 - 广播地址:
192.168.45.255 - 用途: 连接外网,访问互联网资源
- 状态:
-
en7 (有线网卡)
- 状态:
active(已激活) - IP地址:
10.38.40.11 - 子网掩码:
255.255.254.0 - 广播地址:
10.38.40.255 - 连接类型:
100baseTX <full-duplex>(百兆全双工) - 用途: 连接内网,访问公司内部资源
- 状态:
确认两个网卡都已获取IP地址,并记下各自的网卡名称(后续Surge配置会用到)。在本例中,需要在Surge配置中使用 en0 和 en7 作为接口名称。
2. Surge基础配置
本配置基于 Surge 6 for Mac。
2.1 配置示例说明
本文档提供了一个完整的Surge配置示例: ![[surge.example.conf.md]]
该配置包含:
- 代理配置: 科学上网代理(绑定en0网卡) + 开发内网代理(绑定en7网卡)
- 规则配置: 内网域名、科学上网域名、进程规则等
- DNS配置: 跟随网卡接口的DNS设置
2.2 使用配置文件
根据Surge官方文档,Surge配置文件采用INI格式。
编辑配置文件:
- 启动Surge应用
- 在Surge主界面左下角点击"更多" → 选择"配置" → "导入配置文件"
- 选择 surge.example.conf.md 文件导入,或者手动编辑现有配置
- 根据实际情况修改以下参数:
- 网卡名称(interface): 将
en0和en7改为实际的网卡名称(在步骤1.3中确认的网卡) - 内网域名: 修改
*.innernet.com等为实际的内网域名 - 代理服务器信息: 修改Shadowsocks的服务器地址、端口、密码
- 网卡名称(interface): 将
- 保存配置并启用
💡 注意: 以上步骤为常规操作流程,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
关键参数:
interface: 指定网卡接口dns-follow-interface=true: DNS查询跟随该网卡的DNS服务器test-url: 健康检查URL,用于测试代理可用性