本地eth0网络:192.168.11.1
开启VPN后 tun0网络: 10.10.0.2
由于开启VPN后,所有的网络都从VPN出去,导致有些需要从11通讯的功能无法使用,这时候就需要增加一个路由表table 1 来实现了:
顺序执行下面4条指令后,即可进行通讯:
PREF=`ip rule list | busybox head -n 2 | busybox tail -n 1 | busybox awk '{print $1}' | busybox sed 's/://g'`
let PREF--
ip rule add from all table 1 pref ${PREF}
ip route add 192.168.198.0/24 via 192.168.11.1 dev eth0 table 1
其中192.168.198.0/24 这个网段是需要和局域网eth0 进行通讯的网段
192.168.11.1 为本地eth0的网关。
可以通过如下代码查找卡里面的网关地址
private String getGateWay() {
String [] arr;
try {
Process process = Runtime.getRuntime().exec("ip route list table 0");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
arr = in.readLine().split("\\s+");
return arr[2];
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
查看某个路由表中的路由规则: ip route list table [ID]
android 最多支持 255 张路由表
有三个路由表是系统默认的,即 253(default)、254(main)、255(local)
查看增加的table 1 : ip route list table 1
删除增加的table 1 : ip route del 192.168.198.0/24 table 1
查看所有路由表: for i in `ip rule list | sed 's/.*lookup //g'`; do ip route show table $i; done | nl
策略表: ip rule list