今天稍微了解了一下Linux下的策略路由,给大家分享一下。

首先我们看一下什么是静态路由和动态路由,然后,策略路由是属于静态路由的一种。

静态路由和动态路由有什么区别(静态路由与动态路由如何选择)(1)

静态路由

首先,静态路由就是由SA手动通过命令或者编辑系统配置文件添加的路由,当一个新的IP包过来的时候,Linux内核就会去匹配IP路由规则,如果匹配到了,就会执行这条转发规则,如果没有匹配到,就会执行默认路由规则。当系统规模较小的时候,路由规则较容易的时候,静态路由的数量也比较少,足够用了。

静态路由和动态路由有什么区别(静态路由与动态路由如何选择)(2)

动态路由

而在大型复杂的网络环境中,有几十条甚至几百条路由都要SA手工配置的话,那工作量就太大了,而且还非常容易出错,于是人们就发明了动态路由。动态路由策略可以使得Linux路由器向邻居主动学习得到路由表,并且通过动态路由协议来自动寻找最佳路由,其中比较常用的动态路由协议有OSPF,RIP等等。Linux上的动态路由软件有quagga,这个我们以后在单独的专题里再展开说。

策略路由

明显,策略路由就是由管理员设定好一些路由策略。以前我们设定路由规则的时候只能通过来源IP、目的IP来设定规则,而通过策略路由,我们可以实现 通过网段选择路由,通过IP包的TOS域来选择路由,通过应用层协议(如HTTP协议)来选择路由,等等。而使得策略路由能够在Linux上实现的基础是Linux kernel 2.2加入了Advanced Routing功能,这使得Linux的路由功能甚至超越了一些商用的路由器。而Advanced Routing引入的两项重大技术就是 多路由表和规则 这2个东西。

多路由表

Linux系统可以总共具有0~255这256张路由表,而且每张表都是独立的。过来一个IP包时是按照优先级顺序挨个检查路由策略数据库(RPDB)中的每个路由表进行匹配并执行操作的。

静态路由和动态路由有什么区别(静态路由与动态路由如何选择)(3)

具体的优先级是通过 /etc/iproute2/rt_tables 这个文件确定的,

## reserved values#255    local254    main253    default0    unspec

路由规则

路由规则是通过iprouter2这个软件包中的指令来操作的。里面包括最常用的命令ip route和ip rule。

比如,查看路由表,这里有3张路由表。

$ ip rule show0:	from all lookup local32766:	from all lookup main32767:	from all lookup default

查看路由规则

$ ip route show table main  10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10   default via 10.10.15.1 dev eth0