Android上的一些VPN(比如DroidVPN)使用tun内核模块实现流量转发进而实现VPN,优点是比系统的VPN省电不少,缺点是必须要以root权限运行。
VPN默认是全局代理,当我们只需要对某几个ip做转发或者对几个ip不做转发时就需要修改内核路由表。
白名单
即只对某些ip做转发
以下是一个示例设置对8.0.0.0~8.255.255.255的ip走vpn通道(开启vpn后运行):
vpnup whiltelistl
|
ROUTE='busybox route'
#得到tun0网关
gw=`$ROUTE -n|busybox grep -m 1 -E "172\.22\.[^\. ]+" -o`
#删除原有规则
$ROUTE del -net 0.0.0.0 netmask 128.0.0.0 gw $gw.1 dev tun0
$ROUTE del -net 128.0.0.0 netmask 128.0.0.0 gw $gw.1 dev tun0
#白名单规则
$ROUTE add -net 8.0.0.0 netmask 255.0.0.0 gw $gw.1 dev tun0
|
关闭VPN后运行:
vpndown whiltelist
|
ROUTE='busybox route'
gw=`$ROUTE -n|busybox grep -m 1 -E "172\.22\.[^\. ]+" -o`
$ROUTE del -net 8.0.0.0 netmask 255.0.0.0 gw $gw.1 dev tun0
|
黑名单
即对这些ip不做转发
黑名单和
chnroutes实现思路基本类似,示例添加了一个规则,使1.0.1.0~1.0.1.255的ip不走vpn(随便什么时候运行):
vpnup blacklist
|
ROUTE='busybox route'
oldgw=busybox netstat -rn | busybox grep ^0\.0\.0\.0 | busybox awk '{print $2}'
#上句也可用
#oldgw=$ROUTE -n | busybox grep ^0\.0\.0\.0 | busybox awk '{print $2}'
#黑名单规则
$ROUTE add -net 1.0.1.0 netmask 255.255.255.0 gw $oldgw
|
不需要这些规则时,运行(也可不运行,重启消失):
vpndown blacklist
|
ROUTE='busybox route'
$ROUTE add -net 1.0.1.0 netmask 255.255.255.0
|
需要注意的是,白名单规则在关闭vpn后需运行相应的route del以删除转发规则,否则将无法连接
黑名单规则不删除也没关系
以上所有规则重启后自动丢失
No comments:
Post a Comment