netstate -rn以及route -n 显示的route协议都是优先级相对低的协议。容易造成误导
实际上的网关协议是要通过ip命令查询的。
如果发现route命令下的网关协议是正确的。但是确无法正常的把数据包发出去或者接收。你就需要通过ip命令去确认协议是否正确。
'ip命令':
ip rule list [显示所有的路由表,并且从上往下按优先级高到低排序]
0: from all lookup local
10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system
13000: from all fwmark 0x10063/0x1ffff lookup local_network
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
23000: from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000: from all unreachable
'linux可以自定义从1-252个路由表''linux系统维护了4个路由表':
0#表 系统保留表
253#表 defulte table 没特别指定的默认路由都放在改表
254#表 main table 没指明路由表的所有路由放在该表
255#表 locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
'路由表的查看可有以下二种方法':
ip route list table table_number
ip route list table table_name
'路由表序号和表名的对应关系在/data/misc/rt_tables中,可手动编辑':
ip route add default via 192.168.1.1 table 1 在一号表中添加默认路由为192.168.1.1
ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2
注:各路由表中应当指明默认路由,尽量不回查路由表.路由添加完毕,即可在路由规则中应用..
'路由规则的添加':
进行路由时,根据路由规则来进行匹配,按优先级(pref)从低到高匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的..
ip rule show 显示路由规则
路由规则的添加
ip rule add from 192.168.1.10/32 table 1 pref 100
如果pref值不指定,则将在已有规则最小序号前插入
注:创建完路由规则若需立即生效须执行#ip route flush cache;刷新路由缓冲
可参数解析如下:
From -- 源地址
To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)
Tos -- IP包头的TOS(type of sevice)域Linux高级路由-
Dev -- 物理接口
Fwmark -- iptables标签
采取的动作除了指定路由表外,还可以指定下面的动作:
Table 指明所使用的表
Nat 透明网关
Prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
Reject 单纯丢弃该包
Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息
具体格式如下:更强大,使用更灵活,它使网络管理员不仅能
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
[ flowid CLASSID ]
TABLE_ID := [ local | main | default | new | NUMBER ]
https://my.oschina.net/u/1397402/blog/736806
https://blog.csdn.net/kangear/article/details/80547073
https://blog.csdn.net/mergerly/article/details/28918081
我们在双网卡上使用的方案如下
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 eth0 table 1
via应该就是from + to