Skip to content

Instantly share code, notes, and snippets.

@shalyf
Last active May 4, 2024 14:54
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save shalyf/d50b0bbf30a4b5020d2b84f4ae8eb4e0 to your computer and use it in GitHub Desktop.
Save shalyf/d50b0bbf30a4b5020d2b84f4ae8eb4e0 to your computer and use it in GitHub Desktop.
利用路由表给VPN分流

2020年初因为新冠肺炎爆发,所以在家办公,公司给配置了L2TP的VPN,但是我不想所有流量都走VPN(VPN比较慢而且也节省流量),于是想到用路由表给VPN分流。
具体的方案就是公司内网的流量走VPN,外网流量走默认网关。

我是在macOS上操作的,其他平台应该也差不多。

假设:
公司内网 192.168.10.0/24
家里网络 192.168.1.0/24
你已经配置好VPN并且可以使用了。

公司网管为了省事一般会让你把“通过VPN连接发送所有流量”给勾上,首先我们要把这个选项取消掉,毕竟我们的目的不是让所有流量都走VPN。
打开终端编辑/etc/ppp/ip-up文件,没有就新建一个

# sudo vi /etc/ppp/ip-up

输入以下内容

#!/bin/sh
/sbin/route add -net 192.168.10.0/24 -interface $1

192.168.10.0/24是需要转发的网络地址,$1是VPN的接口(e.g. ppp0)。
保存退出后赋予权限。

# sudo chmod 0755 /etc/ppp/ip-up

这个文件以后就会在每次连接VPN的时候执行,把新的路由写入路由表,实现内外网的分流。
我们运行netstat -nr查看Internet(IPV4)的信息,可以看到以下内容,这时候就已经完成了,如果有其他的流量需要走VPN,一样写到ip-up文件里去就可以了。

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
192.168.10         ppp0               USc          ppp0

建议有翻墙需求的朋友使用Chrome装一个SwitchyOmega插件,使用auto switch配置来解决。

参考
macOS设置L2TP类型的VPN转发指定的流量
How to selectively route network traffic through VPN on Mac OS X Leopard?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment