在 macOS 系统中,通过终端(Terminal)的 route 命令可以灵活管理静态路由,适用于双网卡、跨子网通信、连接多个内网网段等场景。与 Windows 的 CMD 不同,macOS 基于 BSD 系统,route 命令的语法、权限要求以及"永久路由"的实现方式都有明显差异。本文详细介绍 macOS 下静态路由的查看、添加、删除、验证及永久生效的配置方法。


静态路由基础命令

查看当前路由表

netstat -rn

输出中 Destination 列为目标网段,Gateway 列为下一跳地址,FlagsUG 表示 Up + Gateway(可用路由),U 表示仅 Up(直连网段)。查看默认路由可以配合 grep:

netstat -rn | grep default

只查询某条具体路由是否可达(不修改路由表):

route -n get 192.168.1.1

临时路由配置

临时路由在系统重启或网络服务重启后失效,适用于短期测试。macOS 的 route 支持 CIDR 写法,也支持传统的 -netmask 写法。

命令格式(CIDR 写法):`bash
sudo route add -net 目标网段/前缀 网关IP


示例:

sudo route add -net 192.168.1.0/24 192.168.0.1


命令格式(传统写法):

sudo route add -net 目标网段 -netmask 子网掩码 网关IP


示例:

sudo route add -net 172.31.0.0 -netmask 255.255.0.0 192.168.15.254


### 添加默认路由

当需要临时更换默认网关时使用:

sudo route add default 192.168.0.1


> 注意:macOS 的 `route` 命令**没有** Windows 的 `-p` 永久参数。临时路由重启后一定会丢失,永久配置见下文"永久路由配置"章节。

---

## 关键参数说明| 参数 | 作用 | 示例值 |
|------|------|--------|
| -net | 指定目标网络(后接网段或 CIDR) | -net 192.168.1.0/24 |
| -netmask | 指定子网掩码(传统写法,与 -net 搭配) | -netmask 255.255.255.0 |
| -ifscope | 指定网卡接口(多网卡时使用) | -ifscope en0 |
| -interface | 直接指定接口作为出口(无网关场景) | -interface en0 |
| -priority | 路由优先级(数值越小优先级越高,可选) | -priority 10 |
| default | 默认路由(代替目标网段) | route add default 网关 |

> 与 Windows 的差异:Windows 用 `mask` 关键字,macOS 用 `-netmask` 或 CIDR;Windows 的 `route print` 查看接口编号,macOS 用 `networksetup -listallhardwareports` 或 `ifconfig` 查看接口名(en0/en1...)。

---

## 操作步骤详解

### 打开终端并获取管理员权限Command + Space → 输入 `终端` → 回车。凡是添加/删除路由的命令都必须以 `sudo` 开头,首次执行会提示输入开机密码(输入时屏幕不显示,属正常现象)。

### 查看网卡接口编号

多网卡场景先确认接口名:

networksetup -listallhardwareports

ifconfig


### 添加路由

sudo route add -net 10.0.0.0/8 192.168.1.1


### 验证路由表

netstat -rn | grep 10.0.0.0


或验证到具体地址的路径:

route -n get 10.1.2.3


### 删除静态路由

命令格式:

sudo route delete 目标网段


示例:

sudo route delete 10.0.0.0/8


---

## 多网卡场景配置

先执行 `networksetup -listallhardwareports` 查看接口名(如 en0 = Wi-Fi、en1 = USB 以太网),再用 `-ifscope` 指定出口接口:```bash
sudo route add -net 172.16.0.0/12 10.100.1.254 -ifscope en1

对于无网关的点对点链路(如 USB 共享网络、隧道),可直接指定接口:

sudo route add -net 169.254.0.0/16 -interface en0

永久路由配置

macOS 没有 route -p,重启后临时路由全部丢失。下面两种方案任选其一,推荐方案一。

方案一:networksetup(官方推荐,按网络服务配置)

networksetup -setadditionalroutes 会把路由绑定到指定的网络服务(如 Wi-Fi / 以太网),网络服务连接时自动生效,重启保留。

命令格式:

sudo networksetup -setadditionalroutes "网络服务名" 目标网段 子网掩码 网关IP [更多路由...]

示例(为 Wi-Fi 配置两条永久路由):`bash
sudo networksetup -setadditionalroutes "Wi-Fi" 172.31.0.0 255.255.0.0 192.168.15.254 10.0.0.0 255.0.0.0 192.168.15.254


查看已配置的永久路由:

networksetup -getadditionalroutes "Wi-Fi"


清空永久路由:

sudo networksetup -setadditionalroutes "Wi-Fi"


> 网络服务名可通过 `networksetup -listallnetworkservices` 查看,中文系统常见为「Wi-Fi」「以太网」。

### 方案二:LaunchDaemon(开机自启脚本)

创建系统级守护任务 `/Library/LaunchDaemons/com.local.staticroute.plist`:```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.local.staticroute</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/route</string>
        <string>add</string>
        <string>-net</string>
        <string>172.31.0.0/16</string>
        <string>192.168.15.254</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

加载并启动:`bash
sudo launchctl load /Library/LaunchDaemons/com.local.staticroute.plist


> 若有多条路由且依赖网络就绪,建议将加路由命令写成 shell 脚本(脚本内先 `sleep 5` 再执行 `route add`),plist 中调用脚本,避免开机时网卡未就绪导致添加失败。

---

## 完整示例代码

1. 查看当前路由表

netstat -rn

2. 添加临时静态路由(重启失效,测试用)

sudo route add -net 172.31.0.0/16 192.168.15.254

3. 验证路由

route -n get 172.31.0.1

4. 删除路由

sudo route delete 172.31.0.0/16

5. 配置永久路由(绑定 Wi-Fi 服务,重启保留)

sudo networksetup -setadditionalroutes "Wi-Fi" 172.31.0.0 255.255.0.0 192.168.15.254

6. 验证永久路由

networksetup -getadditionalroutes "Wi-Fi"


---

## 常见问题处理- **权限不足**:macOS 下添加/删除路由必须使用 `sudo`,普通用户执行会提示 `route: permission denied`。
- **参数错误**:注意与 Windows 的区别——不要写 `mask` 关键字,用 `-netmask` 或直接写 CIDR(如 `10.0.0.0/8`)。
- **重启后路由丢失**:临时路由不会持久化,请改用 `networksetup -setadditionalroutes` 或 LaunchDaemon 配置永久路由。
- **路由冲突 / 无法生效**:先删除旧路由(`sudo route delete 目标网段`),或使用 `-priority` 调整优先级;掩码越精确的路由优先级越高。
最后修改:2026 年 08 月 19 日
如果觉得我的文章对你有用,请随意赞赏