macos不自动选优,而是严格按服务顺序决定默认出口,拖动接口至“设定服务顺序”顶部即可生效;需用route get default验证interface和gateway,精细分流则须添加静态路由或配置pfctl策略路由。

macOS 不靠“自动选优”决定走哪条网,而是靠服务顺序和路由表规则来明确控制流量出口。改顺序只影响默认路由,想精细分流就得加静态路由或策略路由。
用服务顺序设定默认出口
这是最常用、也最直接的优先级控制方式——谁排第一,所有没特别指定的流量就走谁。
- 打开「系统设置」→「网络」→ 右上角⋯ →「设定服务顺序」
- 在列表中拖动 Wi-Fi、以太网或其他接口,把想要的默认出口放到最顶部
- 点「完成」后,系统立即更新路由表,无需重启
- 注意:已建立的长连接(如远程桌面、视频会议)不会立刻切换,可能需等连接重建或手动刷新 DNS:
sudo killall -HUP mDNSResponder
验证当前默认路由是否生效
别只信图形界面,终端里一句话就能确认:
利用 macOS 原生能力实现本地语音识别与合成。通过 yap (Apple Speech.framework) 进行语音转文字,通过 say + ffmpeg 进行文字转语音。完全离线,无需 API 密钥。具备音质检测与智能选声功能。
- 运行
route get default - 看 interface 字段:en0 不一定是 Wi-Fi(M 系列 Mac 上 en0 常是 USB-C 有线口),要结合
ifconfig en0查 IP 和网关 - 同时核对 gateway 是否匹配你期望的网络(比如 192.168.1.1 是 Wi-Fi 网关,10.10.254.254 是内网网关)
用静态路由实现内外网分流
如果既要 Wi-Fi 上公网,又要以太网访问内网(如 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 匹配,就绕过服务顺序,互不干扰
高级场景:策略路由与接口隔离
当需要按源地址、端口或应用指定出口时(比如 Docker 容器固定走有线口),就得用 pfctl:
- 先启用 IP 转发:
sudo sysctl -w net.inet.ip.forwarding=1 - 编辑
/etc/pf.agg.conf,写规则如:pass out on en2 from 192.168.2.0/24 to any - 加载规则:
sudo pfctl -f /etc/pf.agg.conf,再用sudo pfctl -s rules确认生效 - 注意:这和网络服务顺序完全无关,是一套独立的流量导向机制










