注意

网络有优先级服务顺序,开启L2TP VPN后发现无效,内网还是访问不了,但是设置L2TP为第一个服务顺序的话就可以访问。可是这样的话,如果内网不具备访问互联网的功能的话,就会导致我们电脑也不会有网,只能访问内网。每次需要访问互联网的时候就需要关闭VPN,来来回回切换就会体验很不好。

开工设置

本文代码来自:Github

先设置一下

设置 -> 网络 -> 目标VPN -> 高级 -> 取消勾选通过VPN连接发送所有流量

黑名单模式

mac终端中:

sudo vi /etc/ppp/ip-up

添加以下内容:

#!/bin/sh
export PATH="/bin:/sbin:/usr/sbin:/usr/bin"

OLDGW=`netstat -nr | grep 'ppp0' | grep 'UH ' | sed 's/ \([0-9.]*\).*/\1/g'`

if [ ! -e /tmp/pptp_oldgw ]; then
    echo "${OLDGW}" > /tmp/pptp_oldgw
fi

dscacheutil -flushcache
route add 192.168.8.0/16 "${OLDGW}" # 更改这里的ip段
sudo vi /etc/ppp/ip-down

添加以下内容:

#!/bin/sh
export PATH="/bin:/sbin:/usr/sbin:/usr/bin"

if [ ! -e /tmp/pptp_oldgw ]; then
        exit 0
fi

OLDGW=`cat /tmp/pptp_oldgw`
route delete 106.75.0.0/16 ${OLDGW} # 更改这里的ip段
rm /tmp/pptp_oldgw

完结

重启电脑,重新链接vpn。

注意事项

  • 如果刚开始已勾选通过VPN连接发送所有流量,建议重新创建vpn,我测试下取消勾选不会生效
  • 需要追加规则直接在两个脚本内追加ip,然后重连即可
  • 出现问题检查流程:

改完规则是否重连VPN
netstat -nr,检查脚本内的路由规则是否已添加
ls -l /etc/ppp,检查脚本文件是否可执行