macOS 系统 L2TP 拨号后自动加路由的实现方式


  正文:

  很多人发现 macOS 用系统自带 L2TP 拨号后,会自动出现一条指向内网的路由,但忘了当初是怎么做到的。我这边排查了一次,答案其实很直接:是 pppdip-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 拨号后的路由行为

评论

此博客中的热门博文

uptime-kuma部署和批量添加

在南京见到的农民工午饭情景

ffmpeg 下实现 h265 hevc编码的 hls 服务的过程一些收藏和介绍