文档章节

Android策略路由

dellzhui
 dellzhui
发布于 2016/08/23 19:08
字数 1293
阅读 1742
收藏 0

 

    • 概述
    • 策略表
    • 路由表
    • 策略
    • 参考资料

概述

系统维护多个路由表及一个策略表
策略表定义了各路由表的使用策略,每条策略包含一个优先级

策略表

130|root@bcm_platform:/ # ip rule list
0:  from all lookup local 
9999:   from all lookup 1 
10000:  from all fwmark 0xc0000/0xd0000 lookup legacy_system 
13000:  from all fwmark 0x10063/0x1ffff lookup local_network 
13000:  from all fwmark 0x10064/0x1ffff lookup eth2.2 
14000:  from all oif eth2.2 lookup eth2.2 
15000:  from all fwmark 0x0/0x10000 lookup legacy_system 
16000:  from all fwmark 0x0/0x10000 lookup legacy_network 
17000:  from all fwmark 0x0/0x10000 lookup local_network 
19000:  from all fwmark 0x64/0x1ffff lookup eth2.2 
22000:  from all fwmark 0x0/0xffff lookup eth2.2 
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main 
32000:  from all unreachable

开始数字为优先级,数字越小,优先级越高

第0条规则为系统默认,不可更改

第0条规则为

0: from all lookup local

表示所有的连接,首先遍历local

路由表

查看某个路由表中的路由规则:

ip route list table [ID]

root@bcm_platform:/ # ip route list table 254
default via 192.168.31.1 dev eth2.2  metric 207 
192.168.0.0/24 dev eth2  proto kernel  scope link  src 192.168.0.200 
192.168.17.0/24 dev eth2.3  proto kernel  scope link  src 192.168.17.10 
192.168.31.0/24 dev eth2.2  proto kernel  scope link  src 192.168.31.104  metric 207 
192.168.100.1 via 192.168.0.1 dev eth2

android最多支持255张路由表

有三个路由表是系统默认的,即253(default)、254(main)、255(local)

main中包含的规则为busybox route -n里打印的

因最高优先级规则为

0: from all lookup local

即所有的连接都会先遍历local表

local表内容:

root@bcm_platform:/ # ip route list table local                                
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev eth2  proto kernel  scope link  src 192.168.0.200 
local 192.168.0.200 dev eth2  proto kernel  scope host  src 192.168.0.200 
broadcast 192.168.0.255 dev eth2  proto kernel  scope link  src 192.168.0.200 
broadcast 192.168.17.0 dev eth2.3  proto kernel  scope link  src 192.168.17.10 
local 192.168.17.10 dev eth2.3  proto kernel  scope host  src 192.168.17.10 
broadcast 192.168.17.255 dev eth2.3  proto kernel  scope link  src 192.168.17.10 
broadcast 192.168.31.0 dev eth2.2  proto kernel  scope link  src 192.168.31.104 
local 192.168.31.104 dev eth2.2  proto kernel  scope host  src 192.168.31.104 
broadcast 192.168.31.255 dev eth2.2  proto kernel  scope link  src 192.168.31.104

对比busybox route -n能实际生效的路由信息

root@bcm_platform:/ # busybox route -n                                         
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.31.1    0.0.0.0         UG    207    0        0 eth2.2
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.17.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2.3
192.168.31.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2.2
192.168.31.0    0.0.0.0         255.255.255.0   U     207    0        0 eth2.2
192.168.100.1   192.168.0.1     255.255.255.255 UGH   0      0        0 eth2

可以看出,local里的大多数语句其实是无意义的

策略

使用eth2.2作为对外网口,配置如下

root@bcm_platform:/ # busybox ifconfig                                         
eth2      Link encap:Ethernet  HWaddr 02:BC:18:00:C3:49  
          inet addr:192.168.0.200  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2363 errors:0 dropped:132 overruns:0 frame:0
          TX packets:1033 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:525390 (513.0 KiB)  TX bytes:85757 (83.7 KiB)

eth2.2    Link encap:Ethernet  HWaddr 00:10:18:00:C3:48  
          inet addr:192.168.31.104  Bcast:192.168.31.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:535 errors:0 dropped:18 overruns:0 frame:0
          TX packets:910 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:84495 (82.5 KiB)  TX bytes:71811 (70.1 KiB)

eth2.3    Link encap:Ethernet  HWaddr 02:BC:18:00:C3:50  
          inet addr:192.168.17.10  Bcast:192.168.17.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:566 (566.0 B)  TX bytes:566 (566.0 B)
root@bcm_platform:/ # busybox route -n                                         
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.31.1    0.0.0.0         UG    207    0        0 eth2.2
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
192.168.17.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2.3
192.168.31.0    0.0.0.0         255.255.255.0   U     0      0        0 eth2.2
192.168.31.0    0.0.0.0         255.255.255.0   U     207    0        0 eth2.2
192.168.100.1   192.168.0.1     255.255.255.255 UGH   0      0        0 eth2

以上配置从linux普通路由角度看,都没有问题,但是无法ping通192.168.0.1

原因:

busybox route -n里的配置其实是main表的配置,其所在的策略优先级很低

root@bcm_platform:/ # ip rule list
0:  from all lookup local 
9999:   from all lookup 1 
10000:  from all fwmark 0xc0000/0xd0000 lookup legacy_system 
13000:  from all fwmark 0x10063/0x1ffff lookup local_network 
13000:  from all fwmark 0x10064/0x1ffff lookup eth2.2 
14000:  from all oif eth2.2 lookup eth2.2 
15000:  from all fwmark 0x0/0x10000 lookup legacy_system 
16000:  from all fwmark 0x0/0x10000 lookup legacy_network 
17000:  from all fwmark 0x0/0x10000 lookup local_network 
19000:  from all fwmark 0x64/0x1ffff lookup eth2.2 
22000:  from all fwmark 0x0/0xffff lookup eth2.2 
23000:  from all fwmark 0x0/0xffff uidrange 0-0 lookup main 
32000:  from all unreachable

有几条关于eth2.2路由表的策略,优先级都高于main表,不妨看一下其路由规则

130|root@bcm_platform:/ # ip route list table eth2.2
default via 192.168.31.1 dev eth2.2  proto static 
192.168.31.0/24 dev eth2.2  proto static  scope link

可以看出,这个路由表里配置了默认路由。如果ping 192.168.0.1,系统按照优先级规则遍历到eth2,2表 时,发现其配置了 默认路由,就从eth2.2发包了,也即无法ping通

解决方案:

既然main表里的路由规则是我们想要的,那么直接新建一个路由表,将main表复制一份,并提高其优先级即可
命令:

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.0.0/24 via 192.168.0.1 dev eth2 table 1

参考资料

tools-route
tools-ip-route
tools-ip-rule

© 著作权归作者所有

dellzhui
粉丝 1
博文 3
码字总数 1727
作品 0
济南
程序员
私信 提问
翻翻git之---丰富多样的路由跳转开源库 ARouter

版权声明:本文为博主原创文章,允许转载,但请保留出处。 https://blog.csdn.net/ddwhan0123/article/details/54409574 转载请注明出处:王亟亟的大牛之路 有一段时间没更新博客了,最近也没...

王亟亟
2017/01/13
0
0
Android 4.1初识--7月13号

7月13号 初略看了下: 1 init没有太大变化,从init.rc可以看出规则未变,但init.rc出现了一些新的设置,看来更依赖kernel的一些信息了 2 app_process未有太大变化,即zygote没有变化 3 Syst...

邓凡平
2012/07/13
0
6
react-navigation的学习

react-navigation的学习 react-navigation地址:https://reactnavigation.org/docs/en/navigating 导入的路由: 1.0屏幕组建之间的跳转 堆栈导航栏的跳转通过:this.props.navigation ==》相...

android-key
01/22
0
0
一个Android路由框架的诞生之路

经过前面三篇文章,相信大家对组件化都有了一定程度的理解。 在这个过程中一直强调了组件化的一个基础设施:路由!没有它组件化可以说是寸步难行,本篇文章我们就来谈谈一个组件化路由框架诞...

浅吟且行的未来
2018/05/15
0
0
ARetrofit组建化最佳路由

Android组件化超级路由,为简单而生。 Github 源码: ARetrofit 原文 demo demo apk 下载 一 介绍 从命名来看,做Android开发的小伙伴们感觉是不是似曾相识…是的,Retrofit,一款优秀的网络框...

CharlesZhu
2018/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hadoop集群搭建-05安装配置YARN

Hadoop集群搭建-04安装配置HDFS Hadoop集群搭建-03编译安装hadoop Hadoop集群搭建-02安装配置Zookeeper Hadoop集群搭建-01前期准备 先保证集群5台虚拟机, nn1 nn2 s1 s2 s3 hadoop 是 是 是 ...

虚拟世界的懒猫
今天
9
0
聊聊spring cloud的ConsulServiceRegistry

序 本文主要研究一下spring cloud的ConsulServiceRegistry ServiceRegistry spring-cloud-commons-2.1.2.RELEASE-sources.jar!/org/springframework/cloud/client/serviceregistry/ServiceR......

go4it
昨天
8
0
Nextjs 学习 —— hooks

22

lemos
昨天
6
0
如何在spring mvc restful接口中定制化类型转换和格式化

1.痛点 最近小胖哥搞了个小程序,有几个spring mvc 接口传递了时间,时间用java 8 time 相关的api 来直接接收: 当使用根据ISO 8601格式化的参数向任何这些方法发送POST请求时,报出了如下异...

码农小胖哥
昨天
19
0
docker日志监控

日志处理机制 我们先来了解一下docker日志处理的机制,当启动一个容器的时候,它其实是docker daemon的一个子进程,docker daemon可以拿到你容器里面进程的标准输出,拿到标准输出后,它会通...

爱宝贝丶
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部