macOS添加静态路由需区分临时与永久:临时用sudo route -n add即时生效但重启丢失,永久用sudo networksetup -setadditionalroutes "服务名" 目标 掩码 网关写入配置随服务启用自动加载,多路由表则需先sudo ifconfig en0 rdid 100绑定再sudo route -n -T 100 add。

macOS 中添加静态路由,核心在于区分“临时生效”和“永久生效”两种场景。临时路由用 route 命令直接写入内核路由表,重启即丢;永久路由则需绑定到具体网络服务(如 Wi-Fi、以太网),由系统在接口启用时自动加载。
先看清当前路由状态
动手前务必确认现状,避免误操作:
- 运行
netstat -rn查看完整 IPv4 路由表,重点关注 Destination(目标)、Gateway(下一跳)和 Netif(出接口)三列 - 执行
networksetup -listallnetworkservices获取所有网络服务名称(如 Wi-Fi、USB 10/100/1000 LAN),注意名称含空格时必须用英文双引号包裹 - 用
ifconfig | grep "inet " | grep -v 127.0.0.1核对各接口实际 IP,若目标接口没获取有效地址,后续添加的路由无法匹配出接口,必然失效
添加临时静态路由(重启后消失)
适合测试或短期调试,命令即时生效:
- 基于网关添加:例如让去往
10.20.0.0/16的流量走网关10.1.0.1:sudo route -n add -net 10.20.0.0/16 10.1.0.1 - 基于子网掩码写法(兼容旧习惯):
sudo route -n add -net 10.20.0.0 -netmask 255.255.0.0 10.1.0.1 - 基于直连接口添加(适用于目标网段与本机某接口同网段):
sudo route -n add -net 192.168.99.0/24 -interface en2,这种方式绕过网关查找,更可靠 - 验证是否生效:
route -n get 10.20.0.1,返回结果中应明确显示 interface 和 gateway,比单纯 grep 更准确
设置永久静态路由(随服务自动加载)
该方式将路由规则写入网络服务配置文件,只要对应服务启用(无论是否已连接),路由即生效:
- 语法为:
sudo networksetup -setadditionalroutes "服务名" 目标网络 子网掩码 下一跳网关 - 例如为 Wi-Fi 服务添加两条路由:
sudo networksetup -setadditionalroutes "Wi-Fi" 10.20.0.0 255.255.0.0 10.1.0.1 192.168.100.0 255.255.255.0 10.1.0.1
注意:多条路由必须在单条命令中连续追加,不能分多次执行 - 清空该服务的所有附加路由:
sudo networksetup -setadditionalroutes "Wi-Fi"(不带参数) - 修改后无需重启,可立即执行
netstat -rn查看是否已出现在路由表中
进阶:启用多路由表(策略路由)
当需要按源地址、应用或协议分流时,macOS 支持通过路由域(routing domain)机制启用多个逻辑路由表:
- 先绑定接口到指定路由域 ID(如 100):
sudo ifconfig en0 rdid 100 - 向该路由域添加路由(必须显式指定
-T 100):sudo route -n -T 100 add -net 10.200.30.0/24 10.10.10.1 - 查看该路由域内容:
sudo route -n -T 100 show -inet - 持久化需配合 launchd 或启动脚本,因 route 命令本身不支持自动重载



















