macOS 系统 L2TP 拨号后自动加路由的实现方式
正文:
很多人发现 macOS 用系统自带 L2TP 拨号后,会自动出现一条指向内网的路由,但忘了当初是怎么做到的。我这边排查了一次,答案其实很直接:是 pppd 的 ip-up 脚本在连接成功后执行的。
核心机制
macOS 的 L2TP 连接由 pppd 负责建立。当 VPN 成功拨号后,pppd 会自动调用 /etc/ppp/ip-up。如果这个脚本里写了 route add,系统就会把路由加进去。
我机器上的脚本内容是:
#!/bin/sh
echo "[$(date)] VPN connected on $1, peer IP is $5" >> /tmp/vpn_route.log
/sbin/route add -net 192.168.0.0/16 "$5" >> /tmp/vpn_route.log 2>&1
解释一下:
- $5 是 VPN 对端(peer)的 IP。
- /sbin/route add -net 192.168.0.0/16 "$5" 这行就是“自动加路由”的来源。
- 脚本顺带把日志写到 /tmp/vpn_route.log,方便排查。
如何确认
连接 VPN 前后跑一次:
netstat -rn
如果看到类似:
192.168.0/16 <peer-ip> UGSc ppp0
就说明路由是通过 ppp0 接口加进去的。
断开后清理
如果没有 /etc/ppp/ip-down,断开时不会主动删路由。但一般 ppp0 消失后路由会被系统清理。想更彻底,可以自己写一个 ip-down 脚本做删除。
结论
macOS 系统 L2TP 的“自动加路由”不是隐藏配置,而是 pppd 的标准机制:连接成功后执行 /etc/ppp/ip-up,由脚本决定是否加路由。只要记住这个入口,就能完全掌控 VPN 拨号后的路由行为
评论