linux中的路由表table和路由策略rule

 

 

1 概述

 

(1)路由表,存放具体的路由条目。用于决定数据包从哪个网口发出,其主要判断依据是目标IP地址。

(2)路由策略,根据策略绑定路由表。id越小,优先级越高。

(3)路由寻址过程中,按顺序走路由策略,匹配路由策略后,在路由策略对应的路由表中寻找匹配路由。

(4)添加路由策略时。我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,只是其中的一个路由表的内容。

 

 

注意:

路由寻找过程中,会根据路由策略的优先级来查找路由表。所以分析时,

第一,我们应该根据优先级遍历路由策略。匹配路由策略则跳到第二步,否则继续遍历路由策略。

第二,找路由策略绑定的路由表,从路由表中匹配路由。若匹配到路由则跳到第三,否则跳到第一,继续下一个优先级的路由策略。

第三,找到路由。

linux中的路由表table和路由策略rule_第1张图片

 

 

 

 

 

2 linux系统中路由表table

 

linux最多可以支持255张路由表,每张路由表有一个table id和table name。其中有4张表是linux系统内置的:

 

路由表

说明

table id = 0

系统保留。

table id = 253

称为默认路由表,表名为default。一般来说默认的路由都放在这张表。

table id = 254

称为主路由表,表名为main。如果没有指明路由所属的表,所有的路由都默认都放在这个表里。一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。main表中路由记录都是普通的路由记录。而且,使用ip route配置路由时,如果不明确制定要操作的路由表,默认情况下也是主路由表(表254)进行操作。

备注:我们使用ip route list 或 route -n 或 netstat -rn查看的路由记录,也都是main表中记录。

table id = 255

称为本地路由表,表名为local。像本地接口地址,广播地址,以及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。

 

备注:

(a) 系统管理员可以根据需要自己添加路由表,并向路由表中添加路由记录。

(b) 可以通过/etc/iproute2/rt_tables文件查看table id和table name的映射关系。

(c) 如果管理员新增了一张路由表,需要在/etc/iproute2/rt_tables文件中为新路由表添加table id和table name的映射。

 

 

 

 

 

3 路由策略rule

 

3.1 概述

 

基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。简单地来说,linux系统有多张路由表,而路由策略会根据一些条件,将路由请求转向不同的路由表。例如源地址在某些范围走路由表A,另外的数据包走路由表B,类似这样的规则是有路由策略rule来控制。

 

在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级),具体含义如下:

 

 

路由策略

说明

rule 0

匹配任何条件的数据包,查询路由表local(table id = 255)。rule 0非常特殊,不能被删除或者覆盖。 

rule 32766

匹配任何条件的数据包,查询路由表main(table id = 254)。系统管理员可以删除或者使用另外的策略覆盖这条策略。

rule 32767

匹配任何条件的数据包,查询路由表default(table id = 253)(ID 253) 。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。

 

 

备注:在linux系统中是按照rule的优先级顺序依次匹配。假设系统中只有优先级为0,32766及32767这三条规则。那么系统首先会根据规则0在本地路由表里寻找路由,如果目的地址是本网络,或是广播地址的话,在这里就可以找到匹配的路由;如果没有找到路由,就会匹配下一个不空的规则,在这里只有32766规则,那么将会在主路由表里寻找路由;如果没有找到匹配的路由,就会依据32767规则,即寻找默认路由表;如果失败,路由将失败。

 

 

 

 

 

3.2 命令

 

(1) 在linux系统中可以使用ip rule命令来配置路由策略。ip rule命令使用格式为:

 

Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)

SELECTOR :=

[ from IP 数据包源地址]

[ to IP 数据包目的地址]

[ tos NUMBER 服务类型]

[ dev STRING 物理接口]

[ pref NUMBER 优先级]

[fwmark NUMBER 防火墙标签]

ACTION :=

[ table TABLE_ID 指定所使用的路由表]

[ nat ADDRESS 网络地址转换]

 

[

prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息

| reject 单纯丢弃该包

| unreachable 丢弃该包, 并发送 NET UNREACHABLE的ICMP信息

]

 

[ flowid CLASSID ]

 

TABLE_ID := [ local | main | default | new | NUMBER ]

 

 

可以通过命令ip rule或ip rule list来查看系统中所有的路由策略rule。另外使用ip rule命令配置的路由策略rule只在内存中有效,机器重启后,就会失效。可以将路由策略配置到文件/etc/sysconfig/network-scripts/rule-ethX中,这样机器重启后仍然有效。

 

 

 

 

(2) 举例来说:

 

# 增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由

# 这条规则的优先级是32800

ip rule add from 0/0 table 1 pref 32800

[root@localhost ~]# ip rule add from 0/0 table 1 pref 32800

[root@localhost ~]#

[root@localhost ~]# ip rule list

0: from all lookup local

32766: from all lookup main

32767: from all lookup default

32800: from all lookup 1

[root@localhost ~]#

[root@localhost ~]#

 

 

 

# 增加一条规则,规则匹配的对象是IP为192.168.3.112, tos等于0x10的包,

# 使用路由表2,这条规则的优先级是1500,动作是丢弃。

ip rule add from 192.168.2.222/32 tos 0x10 table 2 pref 1500 prohibit

[root@localhost ~]# ip rule add from 192.168.2.222/32 tos 0x10 table 2 pref 1500 prohibit

[root@localhost ~]#

[root@localhost ~]# ip rule list

0: from all lookup local

1500: from 192.168.2.222 tos lowdelay lookup 2 prohibit

32766: from all lookup main

32767: from all lookup default

32800: from all lookup 1

 

 

 

 

 

 

 

3.3 关于路由表和路由策略的联系和区别

 

路由策略rule指定满足一定条件的数据包有指定的路由表来路由,多个策略rule可以指向同一张路由表。某些路由表可以没有策略指向它。值得注意的是,如果系统管理员删除了指向某个路由表的所有策略rule,那么这个路由表是没有用的,但它在系统中仍然存在,直到路由表中的所有路由记录被删除,它才会消失。

 

 

 

 

 

 

 

3.4 其他闲杂知识点

 

(1) 查看指定路由表的内容

ip route list table table_id

ip route list table table_name

ip route show table table_id

ip route show table table_name

 

[root@localhost ~]# ip rule list

0: from all lookup local

1500: from 192.168.2.222 tos lowdelay lookup 2 prohibit

32766: from all lookup main

32767: from all lookup default

32800: from all lookup 1

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# ip route list table main

default via 192.168.233.2 dev eth1

169.254.0.0/16 dev eth0 scope link metric 1002

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.135

192.168.233.0/24 dev eth1 proto kernel scope link src 192.168.233.137

[root@localhost ~]#

[root@localhost ~]# ip route show table main

default via 192.168.233.2 dev eth1

169.254.0.0/16 dev eth0 scope link metric 1002

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.135

192.168.233.0/24 dev eth1 proto kernel scope link src 192.168.233.137

[root@localhost ~]#

 

 

 

 

(2) 查看系统中所有的路由策略rule

ip rule

ip rule list

 

[root@localhost ~]# ip rule

0: from all lookup local

1500: from 192.168.2.222 tos lowdelay lookup 2 prohibit

32766: from all lookup main

32767: from all lookup default

32800: from all lookup 1

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# ip rule list

0: from all lookup local

1500: from 192.168.2.222 tos lowdelay lookup 2 prohibit

32766: from all lookup main

32767: from all lookup default

32800: from all lookup 1

 

 

 

 

 

(3) 使用ip rule,ip route,route等命令进行网络配置,只在内存中有效,重启机器或网络服务就会失效。因此,我们需要通常需要将网络相关的配置写入到配置文件中,这样重启机器或网络服务时,会从配置文件中加载网络相关的配置信息。

 

 

 

 

(4) 关于路由配置及路由策略配置的一点问题

我们知道路由表和路由策略可以写入配置文件/etc/sysconfig/network-scripts/route-ethX和/etc/sysconfig/network-scripts/rule-ethX中,这类配置文件是针对每个网卡单独配置的静态路由或路由策略。route-ethX中如果不明确指定哪张路由表,缺省是添加到main路由表的,因此route-ethX中配置规则,不仅仅只有对应的网卡可以看到,其他的网卡也会看到哦。rule-ethX中配置的路由策略rule是全局的,我们通过ip rule list可以查看所有rule-ethX中的路由策略,因此rule-ethX中的策略不仅仅只有相应的网卡才能看到,其他的网卡也会看到哦。

 

 

 

 

 

 

4 分析路由寻找过程

 

路由寻找过程中,会根据路由策略的优先级来查找路由表。所以分析时,我们应该先找路由策略。根据路由策略的优先级,找对应的路由表。

 

(1)查看存在的路由策略

[~]$ ip rule
0:      from all lookup local
1:      from all lookup 1
3:      from 10.200.1.96 lookup 3
4:      from all to 10.200.1.96 lookup 3
5:      from 10.200.1.199 lookup 4
6:      from all to 10.200.1.199 lookup 4
7:      from 10.200.0.0/23 lookup 3
8:      from all to 10.200.0.0/23 lookup 3
9:      from 10.200.0.0/23 lookup 4
10:     from all to 10.200.0.0/23 lookup 4
11:     from all lookup 3
12:     from all lookup 3
13:     from all lookup 4
32766:  from all lookup main
32767:  from all lookup default

 

 

 

(2)查看路由表

从上面可以看到优先级为0的路由表为local;优先级为3的路由表为3。

 

[~]$ ip route show table local
broadcast 10.200.0.0 dev eth0  src 10.200.1.96
broadcast 10.200.0.0 dev eth1  src 10.200.1.199
local 10.200.1.96 dev eth0  src 10.200.1.96
local 10.200.1.199 dev eth1  src 10.200.1.199
broadcast 10.200.1.255 dev eth0  src 10.200.1.96
broadcast 10.200.1.255 dev eth1  src 10.200.1.199
broadcast 127.0.0.0 dev lo  src 127.0.0.1
local 127.0.0.0/8 dev lo  src 127.0.0.1
local 127.0.0.1 dev lo  src 127.0.0.1
broadcast 127.255.255.255 dev lo  src 127.0.0.1
[~]$

[~]$ ip route show table 3
default via 10.200.1.254 dev eth1
10.200.0.0/23 dev eth0

 

 

 

 

 

 

 

 

你可能感兴趣的:(网络基础原理,路由策略,路由表,路由寻址,route,rule)