macos 仅支持同类型有线以太网接口(如 en0、en2)的链路聚合,wi-fi 或混合接口不支持;主备切换依赖服务顺序与路由表被动更新,无热备机制;lacp需交换机配合,策略路由需pfctl手动配置。

macOS 原生支持链路聚合,但仅限有线以太网接口之间
macOS 确实能做多网口负载均衡,但不是你想的“Wi-Fi + 以太网”或“USB网卡 + 内建网口”随意混搭——它只允许把多个 enX 类型的有线以太网接口(比如 en0、en2、en3)绑成一个逻辑接口,且必须是同类型物理介质。Wi-Fi 接口(如 en1)根本不能加入聚合组,系统会直接忽略勾选。
- 运行
networksetup -listallhardwareports确认哪些是真实有线接口(看 “Device: en*” 后是否带 “Ethernet” 描述) - 若用 USB-C 转接器或雷电扩展坞,确保其芯片被 macOS 识别为独立以太网设备(常见支持型号:ASIX AX88179、Realtek RTL8153),否则可能只显示为单一接口
- 聚合模式选
802.3ad(LACP)时,交换机端口必须开启 LACP 并配置为相同聚合组;选负载平衡(无 LACP)则无需交换机配合,但不提供链路状态同步,单边断连可能引发短暂黑洞
主备切换靠服务顺序,不是靠“自动故障转移”功能
macOS 没有传统意义上的“热备接口”机制。所谓冗余切换,本质是路由表默认网关的被动迁移:当首选接口(如“以太网”)的链路层检测失败(carrier loss),内核约 10–30 秒后删掉对应默认路由,再启用次优接口的默认路由。这不是协议级切换,也没有心跳或快速收敛。
- 进
系统设置 > 网络 > 详细信息 > 服务顺序,拖拽调整顺序——顶部优先级最高,底部最低 - 每个接口必须单独配置有效 IP(DHCP 或静态),且不能全设为 DHCP 后又依赖“自动切换”,那会干扰判断
- 拔线测试时,用
netstat -rn | grep '^default'观察默认网关变化,别只看图标是否变灰;ping -c 5 1.1.1.1的丢包集中在前 2–3 包,属正常行为 - Wi-Fi 助理、iCloud 隧道等后台服务可能干扰接口状态判断,建议关闭
pfctl 策略路由可绕过服务顺序,但需手动维护规则
如果你需要让某类流量(比如 SSH 连接、Docker 容器出口)固定走某个网口,而不是跟着默认路由跑,就得用 pfctl 做源地址/端口导向的策略路由。这和聚合、服务顺序完全无关,属于另一套控制平面。
- 先启用转发:
sudo sysctl -w net.inet.ip.forwarding=1 - 写一条简单规则到
/etc/pf.agg.conf:pass out on en2 from 192.168.2.0/24 to any
(假设你希望该子网流量强制走en2) - 加载规则:
sudo pfctl -f /etc/pf.agg.conf,并确认生效:sudo pfctl -s rules - 注意:规则不持久,重启后失效;要开机加载需配合 launchd,且与系统网络服务存在竞态风险
别踩这些坑:速率、双工、驱动兼容性
聚合或主备切换的前提,是每个成员接口都稳定工作在千兆全双工。很多问题其实卡在物理层协商失败,而不是上层配置。
- 检查接口实际协商结果:
ifconfig en0 | grep "media:"—— 若显示100baseTX/Half,说明没跑通千兆,聚合吞吐不会叠加 - 强制设速命令:
sudo ifconfig en0 media 1000baseT/Full,但必须确保对端交换机端口也设为强制千兆全双工,否则 link up 不了 - Realtek RTL8111/RTL8168 等常见 USB 网卡,在 macOS 上默认禁用高级协商特性,需手动补驱动参数,否则易出现间歇性 link drop
- Apple Silicon Mac 对 Thunderbolt 网络桥接(如 Thunderbolt Bridge)的支持有限,该接口无法参与 LAG,仅可用于虚拟机或容器桥接场景










