今天稍微了解了一下Linux下的策略路由,给大家分享一下。
首先我们看一下什么是静态路由和动态路由,然后,策略路由是属于静态路由的一种。
静态路由
首先,静态路由就是由SA手动通过命令或者编辑系统配置文件添加的路由,当一个新的IP包过来的时候,Linux内核就会去匹配IP路由规则,如果匹配到了,就会执行这条转发规则,如果没有匹配到,就会执行默认路由规则。当系统规模较小的时候,路由规则较容易的时候,静态路由的数量也比较少,足够用了。
动态路由
而在大型复杂的网络环境中,有几十条甚至几百条路由都要SA手工配置的话,那工作量就太大了,而且还非常容易出错,于是人们就发明了动态路由。动态路由策略可以使得Linux路由器向邻居主动学习得到路由表,并且通过动态路由协议来自动寻找最佳路由,其中比较常用的动态路由协议有OSPF,RIP等等。Linux上的动态路由软件有quagga,这个我们以后在单独的专题里再展开说。
策略路由
明显,策略路由就是由管理员设定好一些路由策略。以前我们设定路由规则的时候只能通过来源IP、目的IP来设定规则,而通过策略路由,我们可以实现通过网段选择路由,通过IP包的TOS域来选择路由,通过应用层协议(如HTTP协议)来选择路由,等等。而使得策略路由能够在Linux上实现的基础是Linuxkernel2.2加入了AdvancedRouting功能,这使得Linux的路由功能甚至超越了一些商用的路由器。而AdvancedRouting引入的两项重大技术就是多路由表和规则这2个东西。
多路由表
Linux系统可以总共具有0~255这256张路由表,而且每张表都是独立的。过来一个IP包时是按照优先级顺序挨个检查路由策略数据库(RPDB)中的每个路由表进行匹配并执行操作的。
具体的优先级是通过/etc/iproute2/rt_tables这个文件确定的,
##reservedvalues#255local254main253default0unspec
- 表255本地路由表(Loc altable)本地接口地址,广播地址,NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
- 表254主路由表(Maintable)如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route命令)所添加的路由都会加到这个表,一般是普通的路由。
- 表253默认路由表(Defaulttable)一般来说默认的路由都放在这张表。
- 表0保留。
路由规则
路由规则是通过iprouter2这个软件包中的指令来操作的。里面包括最常用的命令iproute和iprule。
比如,查看路由表,这里有3张路由表。
$ipruleshow0:fromalllookuplocal32766:fromalllookupmain32767:fromalllookupdefault
查看路由规则
$iprouteshowtablemain10.10.15.0/25deveth0protokernelscopelinksrc10.10.15.46192.168.1.0/24deveth1protokernelscopelinksrc192.168.1.10defaultvia10.10.15.1deveth0