MacOS 同时连接以太网和Wi-Fi时,默认出口由“设定服务顺序”严格决定:谁在列表顶部,谁即为默认路由。该设置影响所有协议,需用route get default验证interface和gateway是否匹配预期,跃点数在macOS中无效。

通过“设定服务顺序”图形界面调整默认出口
MacOS 同时连接以太网和 Wi-Fi 时,系统不会自动“智能选优”,而是严格按网络服务列表顺序决定哪个接口作为默认路由(即所有未明确指定的流量走哪条路)。这个顺序就是实际生效的优先级。
- 打开「系统设置」→「网络」
- 点击右上角
⋯→「设定服务顺序」 - 在弹出窗口中,拖动
Wi-Fi或以太网到列表最顶部(谁在顶,谁当默认) - 点击「完成」后,系统会立即重载路由表,无需重启
注意:该设置影响所有协议(TCP/UDP/DNS),且对已建立的长连接(如 SSH、视频会议)可能不会立刻切换,需等待连接重建或手动刷新(如 killall -HUP mDNSResponder)。
用 route get default 验证当前默认接口
改完服务顺序后,别只信界面——终端里跑一句命令才能确认是否真的生效:
- 打开终端,执行:
route get default - 查看输出中的
interface字段:- 若为
en0,大概率是 Wi-Fi(但非绝对,取决于硬件型号) - 若为
en4、en5等,通常是雷电/USB-C 转接的有线网口
- 若为
- 同时检查
gateway是否匹配你期望的网络网关(比如192.168.1.1是 Wi-Fi 网关,192.168.204.254是内网网关)
常见误判点:某些 Mac(尤其是 M 系列)的 en0 可能是 USB-C 有线口,en1 才是 Wi-Fi。所以不能光看设备名,要结合 ifconfig en0 看是否有 inet 192.168.x.x 和无线网关一致。
添加静态路由实现双网并行(不抢默认)
如果你既想让日常上网走 Wi-Fi(比如连公司公网),又想让内网访问(如 10.10.0.0/16)强制走以太网,就别动服务顺序——直接加静态路由:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 先确认以太网接口的网关(比如
10.10.254.254)和目标子网(比如10.10.0.0/16) - 执行:
sudo route -n add -net 10.10.0.0/16 10.10.254.254 - 验证:
netstat -rn | grep 10.10应该看到新增条目 - 该路由永久生效需写入启动脚本(如
/Library/Scripts/setroutes.sh并配置 launchd),否则重启丢失
关键点:静态路由优先级高于默认路由,只要目标 IP 匹配,就绕过默认出口,不干扰其他流量。这是企业/开发场景最稳妥的做法。
跃点数(Metric)不是 macOS 的控制方式
Windows 用户常提“调低跃点数提升优先级”,但在 macOS 中,跃点(Interface Metric)字段被忽略。系统根本不读取或应用它。所有基于修改 IPv4 → 高级 → 跃点数 的操作都是无效的。
- 网络偏好设置里即使手动填了数字,也仅作显示用途
- 真正起效的只有服务顺序 + 手动
route命令 - 第三方工具(如
networksetup)也不能改跃点逻辑,只能调顺序
这点容易被教程误导,务必以 route get default 输出为准,而不是看图形界面里某个灰掉的数字框。
复杂点在于:服务顺序改动是全局的,而静态路由需要你清楚知道内网网段和对应网关——漏掉一个子网,就可能连不上某台测试机;多加一条错的,反而导致路由环路。建议先用 traceroute 和 ping -I en4 example.com 分别验证各接口连通性,再动手改。










