其实标题也能够叫「Android 双网卡同时上内外网」,都是同样的原理。如今更多的双网卡是WiFi + 以太网,这里就以这个为标题了。都知道Android底层就是Linux,网络访问和Ubuntu没有什么大的区别。好比Ubuntu 16.04,同时链接以太网和WiFi时,两个网段就能够同时访问。这里有记录Ubuntu 16.04 双网卡 同时上内外网。可是Android须要双网卡同时访问内外网时,会有一些问题。ROM里若是默认了以太网优先级高得话,那么就没有办法走WiFi的网段;反之亦然。一共有两个问题须要改,一是在以太网和WiFi同时工做时,改Android系统源码使得优先级低的网卡也不至于被ifconfig down了;另一个是两个网卡都是up的时候,内外网段可以同时访问;html
不一样的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.xxx
, eth0
网段: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.xxx
, eth0
网段:192.168.1.xxx
,全部其余ip均走wlan0
,可是其中一个ip(好比:128.32.22.0)走eth0。那么就须要用到白名单,须要再添加一个:
待续.net