使用路由表分流VPN

缘起

之所以会去折腾VPN的分流,主要原因是网课时代需要用VPN连入校园内网进行提交作业等操作,由于VPN的默认设置只有代理同网段的IP全部流量走隧道两种方法,前者会导致很多校园网站无法访问,后者会拖慢全局网速(做题的时候也不能Google了).某同学在QQ群里抱怨有没有基于域名的分流,查了下发现基本不可能(VPN运行在网络层,域名少说也是应用层了....),但是提前根据域名对应的IP制定分流规则是可以的.所以写了一套小工具来定义分流,陪伴我度过了快乐的在家摸鱼时光,今天想起来就写了这篇文章.

路由表更改

所谓的分流,在网络层也无非是指定路由表,根据目的IP将流量送往VPN隧道端口或者是正常出口.

在遥远的时代,VPN还是主流科学工具的时候,已经有项目实现了针对VPN制造分流规则,即chnroutes项目,我们仿照这个项目来进行路由表的编写.

由于我的VPN挂载在基于Padavan的路由器上,因此通过route add命令可以很方便地添加静态路由.如果你需要在其他设备上采用,请查阅chnroutes项目.

route add -net 211.87.176.0 netmask 255.255.240.0 gw $OLDGW
#$OLDGW及VPN端口的网关IP地址,gw代表gateway即网关,指定其下一跳送往的IP地址,你当然也可以使用
#-interface指定走哪个网络接口如ppp0与eth0

你可以在信息化建设处的网页上方便找到所有属于中国石油大学的外网IP,但是我建议只查找自己常访问的IP并添加即可,实测网站群的ip地址并没有很分散,上面一条可以覆盖大多数网站.下面是我的分流规则:

route add -net 211.87.176.0 netmask 255.255.240.0 gw $OLDGW
route add -net 42.62.107.226 netmask 255.255.255.255 gw $OLDGW
route add -net 140.210.72.6 netmask 255.255.255.255 gw $OLDGW
route add -net 42.62.107.229 netmask 255.255.255.255 gw $OLDGW
route add -net 140.210.72.5 netmask 255.255.255.255 gw $OLDGW
route add -net 140.210.72.2 netmask 255.255.255.255 gw $OLDGW
route add -net 42.62.107.222 netmask 255.255.255.255 gw $OLDGW
route add -net 121.251.255.108 netmask 255.255.255.255 gw $OLDGW
route add -net 150.138.158.5 netmask 255.255.255.255 gw $OLDGW
route add -net 103.227.81.121 netmask 255.255.255.255 gw $OLDGW
route add -net 103.227.81.60 netmask 255.255.255.255 gw $OLDGW
route add -net 121.194.4.105 netmask 255.255.255.255 gw $OLDGW
route add -net 115.31.65.33 netmask 255.255.255.255 gw $OLDGW
route add -net 203.81.18.58 netmask 255.255.255.255 gw $OLDGW
route add -net 121.251.254.211 netmask 255.255.255.255 gw $OLDGW

(添加了校内网站,知网,超星及一些需要校内IP的网站)

批量生成

按照chnroutes的思想,我们可以用dns来查询ip并拼接字符串即可,dnspython即Python实现的一个DNS客户端,你可以用它来查询ip,但是有几点需要注意:

  1. 如果你的网络环境可以连通国际网络,请尝试在国内DNS和国外DNS分别解析,并选取正确的IP.
  2. 同时注意查看校内DNS和校外DNS服务的解析结果是否有区别,如果有,可以考虑使用如Hosts等方案进行解析.
  3. 当路由器断开VPN的时候,我们需要手动清除分流规则,否则被分流的网站就无法访问了,使用route del即可.

    route del -net 202.194.144.0 netmask 255.255.240.0
  4. 对于类似Padavan等定制固件,允许用户手动指定VPN链接或断联时所执行的脚本,可以利用这种功能来实现路由表自动添加与删除.
  5. 摸鱼一时爽,一直摸鱼一直爽.
tag(s): none
show comments · back · home
Edit with markdown