欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

macos 添加 路由 route add -net 192.168.2.81 -netmask 255.255.255.0 192.168.192.1 这个是需要sudo 吗 ,,,,,,,我自己亲自做的,,,,chatgpt 有大用 有大大用 有大大大用

有人使用了VPN之后,邮箱不能用 我自己亲自做的,OK  有大用:

原理: VPN 改变了路由

1) 在jamf建一个策略

image.png

image.png

image.png


2) 在jamf策略 使用的脚本   add_email_imsg_route_zhong

#!/bin/bash
#
route -rn | grep 192.168.2.0
if [ $? -ne 0 ];then
 sudo route add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1
 sudo route add -net 17.248.0.0 -netmask 255.255.0.0 192.168.192.1
 sudo route add -net 17.253.0.0 -netmask 255.255.0.0 192.168.192.1
fi




下面的可以不用看了,只是为了理解




macos 添加 路由 route add -net 192.168.2.81 -netmask 255.255.255.0 192.168.192.1 这个是需要sudo 吗 

是的,需要 sudo

在 macOS 上,修改内核路由表(route add / delete / change)属于系统级操作,只有 root 权限才能执行,否则会报类似错误:

route: writing to routing socket: Operation not permitted    





正确用法示例

你的命令应这样执行:

sudo route add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1    




输入当前登录用户的密码即可(输入时不显示字符)。


⚠️ 顺便帮你纠正一个关键点(很重要)

你写的是:

route add -net 192.168.2.81 -netmask 255.255.255.0 192.168.192.1    




这里 -net 后面不能是主机 IP

  • 192.168.2.81主机地址

  • 配合 255.255.255.0网络地址应是 192.168.2.0

正确逻辑

目的用法
给整个网段加路由-net 192.168.2.0 -netmask 255.255.255.0                    
只给单个主机加路由-host 192.168.2.81                    

只针对单个 IP 的写法(不需要 netmask)

sudo route add -host 192.168.2.81 192.168.192.1    





查看是否添加成功

netstat -rn | grep 192.168    




或(新版 macOS 推荐):

route -n get 192.168.2.81    





再补充一个常见坑(macOS 特有)

route add 重启后会失效    

如果你是:

  • 公司网络

  • Jamf / MDM 管理

  • VPN / 企业 Wi-Fi

通常要用:

  • LaunchDaemon

  • 或 VPN 的 post-connect script
    来“持久化”路由

如果你需要,我可以直接帮你写一个 macOS 开机自动添加路由的 plist + 脚本


需要

好,那我直接给你一套可用的「macOS 开机自动添加路由」方案,适合 Jamf / 企业环境 / FileVault 开启 的机器。


一、要实现的效果

开机后自动执行:

route add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1                                    
                               

root 权限执行,不依赖用户登录                                    


二、步骤 1️⃣:创建路由脚本

1. 新建脚本文件

sudo nano /usr/local/bin/add_route.sh                                    
                               

2. 写入内容(推荐完整版)

#!/bin/bash /sbin/route -n add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1 2>/dev/null exit 0                                    
                               

说明:

  • 使用 绝对路径(macOS LaunchDaemon 必须)

  • 2>/dev/null 防止路由已存在时刷日志

3. 赋予执行权限

sudo chmod 755 /usr/local/bin/add_route.sh sudo chown root:wheel /usr/local/bin/add_route.sh                                    
                               

三、步骤 2️⃣:创建 LaunchDaemon(核心)

1. 新建 plist

sudo nano /Library/LaunchDaemons/com.company.addroute.plist                                    
                               

2. 写入以下内容(可直接粘贴)

<?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.company.addroute</string>    <key>ProgramArguments</key>    <array>        <string>/usr/local/bin/add_route.sh</string>    </array>    <key>RunAtLoad</key>    <true/>    <key>KeepAlive</key>    <false/> </dict> </plist>                                    
                               

3. 设置权限(非常关键)

sudo chown root:wheel /Library/LaunchDaemons/com.company.addroute.plist sudo chmod 644 /Library/LaunchDaemons/com.company.addroute.plist                                    
                               

四、步骤 3️⃣:立即加载测试(不用重启)

sudo launchctl load /Library/LaunchDaemons/com.company.addroute.plist                                    
                               

验证:

netstat -rn | grep 192.168                                    
                               

或:

route -n get 192.168.2.81                                    
                               

五、常见问题(你这个环境很可能会遇到)

❓ 1. VPN / Wi-Fi 连接后路由被冲掉?

👉 解决方案:改成 网络变更触发(我可以给你增强版)

❓ 2. Jamf 管理的 Mac 会不会被拦?

👉 不会                                

  • LaunchDaemon 在 /Library/LaunchDaemons

  • root + wheel

  • 不依赖用户 session
    👉 Jamf 官方支持方式

❓ 3. FileVault 开启有没有影响?

👉 没有                                

  • LaunchDaemon 在系统解锁后执行

  • 路由正常生效


六、如果你想更高级一点(可选)

我可以再帮你做这几种版本之一:

  1. 仅在连上某个 Wi-Fi SSID 才加路由

  2. VPN 连接后自动加路由

  3. Jamf Policy 方式部署(带脚本)

  4. 检测已存在就不添加(更干净)

你直接告诉我:
👉 用的是 Wi-Fi / 有 VPN / Jamf Policy ID 是否已有                                


VPN 连接后自动加路由

好,这个场景我给你一套 「VPN 连接后自动加路由」的企业级稳妥方案,在 macOS + VPN + Jamf / 非 Jamf 环境都通用。

目标:
只要 VPN 一连上,就自动执行    

route add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1    



VPN 断开后可选自动删除(我也一并给你)


⭐ 推荐方案(最稳定):VPN 的 post-connect 脚本

这是 Apple 官方 + 企业最常用做法


方案一(首选):VPN post-connect / pre-disconnect 脚本

适用 VPN

  • 内建 IKEv2 / L2TP

  • Cisco AnyConnect

  • FortiClient

  • Palo Alto GlobalProtect

  • Jamf 管理的 VPN Profile


一、创建脚本(root 权限)

1️⃣ VPN 连接后加路由

sudo nano /usr/local/bin/vpn_route_add.sh    



内容:

#!/bin/bash /sbin/route -n add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1 2>/dev/null exit 0    



权限:

sudo chmod 755 /usr/local/bin/vpn_route_add.sh sudo chown root:wheel /usr/local/bin/vpn_route_add.sh    




2️⃣ VPN 断开时删路由(可选但推荐)

sudo nano /usr/local/bin/vpn_route_del.sh    



内容:

#!/bin/bash /sbin/route -n delete -net 192.168.2.0 -netmask 255.255.255.0 2>/dev/null exit 0    



权限:

sudo chmod 755 /usr/local/bin/vpn_route_del.sh sudo chown root:wheel /usr/local/bin/vpn_route_del.sh    




二、让 macOS 在 VPN 连接时自动调用(关键)

macOS 会自动调用以下路径的脚本(存在即执行):

时机脚本路径
VPN 连接成功/etc/ppp/ip-up                    
VPN 断开/etc/ppp/ip-down                    

不需要 plist、不需要 launchctl    


1️⃣ 创建 /etc/ppp/ip-up

sudo nano /etc/ppp/ip-up    



内容:

#!/bin/bash /usr/local/bin/vpn_route_add.sh    




2️⃣ 创建 /etc/ppp/ip-down

sudo nano /etc/ppp/ip-down    



内容:

#!/bin/bash /usr/local/bin/vpn_route_del.sh    




3️⃣ 设置权限(非常重要)

sudo chmod 755 /etc/ppp/ip-up /etc/ppp/ip-down sudo chown root:wheel /etc/ppp/ip-up /etc/ppp/ip-down    




三、测试方式

  1. 断开 VPN

  2. 重新连接 VPN

  3. 执行:

netstat -rn | grep 192.168    



或:

route -n get 192.168.2.81    




⚠️ 重要注意(企业环境常见坑)

1️⃣ VPN 客户端不走 PPP(如 GlobalProtect)

👉 用 方案二(NetworkChange 监听)

2️⃣ VPN 多次重连

👉 已用 2>/dev/null 防止重复报错

3️⃣ Jamf 管理

👉 完全支持
👉 Jamf Policy 可直接下发这些脚本


方案二(通用兜底):监听 VPN 网络变化(高级)

适合:

  • GlobalProtect

  • AnyConnect 新版

  • WireGuard

思路
只要系统路由表里出现 utunX / pppX,就加路由

我可以给你一个:

  • LaunchDaemon

  • 实时监听 scutil --nc status

  • 精准识别某个 VPN 名称


你只需要告诉我一个信息 👇

👉 你用的 VPN 客户端是什么?

  • 内建 IKEv2 / L2TP

  • GlobalProtect

  • Cisco AnyConnect

  • FortiClient

  • 其他(说名字)

我就给你 完全贴合你 VPN 的最终版脚本(不用你再改)。


好,这里给你一套 「VPN 连接后自动加路由」通用 + 稳定 方案,不依赖具体 VPN 厂商,非常适合 Jamf / 企业 Mac / FileVault 已开启 的环境。

思路:
系统级 LaunchDaemon + 轮询 VPN 状态 → 只有 VPN Connected 才加路由    


一、最终效果

VPN 连接成功 后,自动执行:

route add -net 192.168.2.0 -netmask 255.255.255.0 192.168.192.1    



  • root 权限

  • VPN 断开不会报错

  • VPN 重连会自动补路由

  • 不怕被 VPN 覆盖路由表


二、方案原理(你这个场景最稳的)

macOS 可以通过:

scutil --nc list scutil --nc status "VPN 名称"    



来判断 VPN 是否 Connected

我们做一个脚本:

  • 每隔 N 秒检查 VPN 状态

  • Connected → 检查路由是否存在

  • 不存在 → 添加


三、步骤 1️⃣:确认 VPN 名称(非常重要)

先手动执行:

scutil --nc list    



示例输出:

* (Connected)  公司VPN  (Disconnected)  TestVPN    



👉 记下 VPN 名称,比如:公司VPN


四、步骤 2️⃣:创建 VPN 路由脚本

1. 创建脚本

sudo nano /usr/local/bin/vpn_add_route.sh    



2. 脚本内容(可直接用)

#!/bin/bash VPN_NAME="公司VPN" TARGET_NET="192.168.2.0" NETMASK="255.255.255.0" GATEWAY="192.168.192.1" /usr/sbin/scutil --nc status "$VPN_NAME" | grep -q "Connected" if [ $? -ne 0 ]; then    exit 0 fi /sbin/route -n get $TARGET_NET >/dev/null 2>&1 if [ $? -eq 0 ]; then    exit 0 fi /sbin/route -n add -net $TARGET_NET -netmask $NETMASK $GATEWAY exit 0    



3. 权限(必须)

sudo chmod 755 /usr/local/bin/vpn_add_route.sh sudo chown root:wheel /usr/local/bin/vpn_add_route.sh    




五、步骤 3️⃣:创建 LaunchDaemon(关键)

1. 新建 plist

sudo nano /Library/LaunchDaemons/com.company.vpnroute.plist    



2. 内容如下

<?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.company.vpnroute</string>    <key>ProgramArguments</key>    <array>        <string>/usr/local/bin/vpn_add_route.sh</string>    </array>    <key>StartInterval</key>    <integer>10</integer>    <key>RunAtLoad</key>    <true/>    <key>KeepAlive</key>    <false/> </dict> </plist>    



StartInterval = 10
👉 每 10 秒检查一次 VPN 状态(很稳,不耗资源)

3. 权限(极其重要

sudo chown root:wheel /Library/LaunchDaemons/com.company.vpnroute.plist sudo chmod 644 /Library/LaunchDaemons/com.company.vpnroute.plist    




六、步骤 4️⃣:加载并测试(不用重启)

sudo launchctl load /Library/LaunchDaemons/com.company.vpnroute.plist    



测试流程

  1. 断开 VPN

  2. 再连接 VPN

  3. 执行:

netstat -rn | grep 192.168.2    



或:

route -n get 192.168.2.81    



✅ 能看到走 192.168.192.1 即成功


七、为什么这套方案适合你现在的环境

结合你之前的情况(Jamf / 企业 VPN / 路由被冲掉):

问题解决
VPN 连接后覆盖路由✅ 自动补回
FileVault✅ 不影响
Jamf 管理✅ 官方支持路径
不同 VPN 客户端✅ 通用(AnyConnect / GP / Forti / 内建 VPN)

八、可选增强(你要我可以直接给)

  • 🔹 只在某个 Wi-Fi SSID 下生效

  • 🔹 多条路由

  • 🔹 Jamf Policy 一键部署版

  • 🔹 VPN 断开时自动删路由

  • 🔹 AnyConnect / GlobalProtect 官方 hook 脚本

你只要告诉我:
👉 VPN 名称是什么(或者截图 scutil --nc list 输出)
我可以直接给你 定制版脚本,一行都不用你改。






普通分类: