Android WiFi 以太网同时上内外网

Android WiFi 以太网同时上内外网

其实标题也能够叫「Android 双网卡同时上内外网」,都是同样的原理。如今更多的双网卡是WiFi + 以太网,这里就以这个为标题了。都知道Android底层就是Linux,网络访问和Ubuntu没有什么大的区别。好比Ubuntu 16.04,同时链接以太网和WiFi时,两个网段就能够同时访问。这里有记录Ubuntu 16.04 双网卡 同时上内外网。可是Android须要双网卡同时访问内外网时,会有一些问题。ROM里若是默认了以太网优先级高得话,那么就没有办法走WiFi的网段;反之亦然。一共有两个问题须要改,一是在以太网和WiFi同时工做时,改Android系统源码使得优先级低的网卡也不至于被ifconfig down了;另一个是两个网卡都是up的时候,内外网段可以同时访问;html

修改网络优先级代码,保证双网卡同时up状态

不一样的Android版本改动方式有所不一样,我这里记录关相关的内容Android中设置Ethernet为默认网络类型。也能够参考留言对高版本的Android源码修改;
这里我就不修改,以手动方式up被系统down了的网卡;android

修改路由表和策略使得双网卡同时上网

Ubuntu 16.04之因此能双网卡同时工做,在于双网卡同时连网时,系统会自动配置路由表,使用route命令能查看。其实Android上也能自动配置,使用busybox route查看到的和Ubuntu 16.04查看到的,并无太大我差异,可是就是ping不通。这里有和我遇到同一个问题的同志Wifi + Ethernet workable at the same time on Android。ping时指定网卡也能ping通。nginx

ping -I eth0 192.168.1.103

可是,这样就会麻烦一些,上层应用APP就得单独使用JNI调用到底层建立绑定eth0的方式来访问。这是什么缘由致使了Android和Ubuntu 16.04的不一样呢?路由表看似同样,其实Android中用了多张路由表,使用busybox route查看到的路由表,并无被Android优先使用,因此会致使奇怪的现象。固然还有一个策略,路由表+策略才是Android中的网络红绿灯。这个文章有详细的介绍Android策略路由web

我用的是NanoPC-T2这个板子,默认WiFi优先级高于以太网,两个网都链接上以后,使用busybox ifconfig查看的是以下景象:(假定:wlan0网段:192.168.43.xxxeth0网段:192.168.1.xxx)
这里写图片描述
因为我没有改ROM代码,因此这里要手动up起来eth0,以下命令:网络

busybox ifconfig eth0 192.168.1.110 up

这样就启动了以太网。接下来就ping一下试试:
这里写图片描述svg

接下来就是重头戏了,以前一直没有接触过的,多张路由表以及策略。运行这个命令,能够添加到路由表中了:ui

ip route add 192.168.1.0/24 dev eth0 proto static scope link table wlan0

这样就能够ping通了,不须要加-I指定网卡了。
这里写图片描述spa

白名单

假定:wlan0网段:192.168.43.xxxeth0网段:192.168.1.xxx,全部其余ip均走wlan0,可是其中一个ip(好比:128.32.22.0)走eth0。那么就须要用到白名单,须要再添加一个:
待续.net