今天稍微了解了一下Linux下的策略路由,给大家分享一下。
首先我们看一下什么是静态路由和动态路由,然后,策略路由是属于静态路由的一种。
静态路由
首先,静态路由就是由SA手动通过命令或者编辑系统配置文件添加的路由,当一个新的IP包过来的时候,Linux内核就会去匹配IP路由规则,如果匹配到了,就会执行这条转发规则,如果没有匹配到,就会执行默认路由规则。当系统规模较小的时候,路由规则较容易的时候,静态路由的数量也比较少,足够用了。
动态路由
而在大型复杂的网络环境中,有几十条甚至几百条路由都要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)中的每个路由表进行匹配并执行操作的。
具体的优先级是通过 /etc/iproute2/rt_tables 这个文件确定的,
## reserved values#255 local254 main253 default0 unspec
- 表 255 本地路由表(Local table) 本地接口地址,广播地址,NAT 地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
- 表 254 主路由表(Main table) 如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如 route命令)所添加的路由都会加到这个表,一般是普通的路由。
- 表 253 默认路由表 (Default table) 一般来说默认的路由都放在这张表。
- 表 0 保留。
路由规则
路由规则是通过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