Tag: 策略路由

  • Linux策略路由简介(翻译)

    最近想回忆一下之前研究过的linux下的策略路由,想对linux的策略路由来一个简单的介绍,不过看了来自Scott’s Weblog 的这篇博客之后,觉得它还真是够简单,好在概念还很清晰,对于理解linux的策略路由的基本的概念和框架足够了。所以我突然想翻译一下(不知道是不是有人也会翻译别人的博客的内容,翻译博客是不是层次太低了一点。。),贴在自己的博客里。从来没试过翻译,这次来试试吧。Let’s Go!以下是原文的翻译。 在这篇博客里,我要来介绍一下在最新的Ubuntu版本里面实现的Linux策略路由机制(可能在其他Linux的发行版里也已经同样实现了,不过我使用的是Ubuntu 12.04 LTS版本)。实际上,由于Linux的策略路由机制的引入,给Linux机器的网络数据路由功能提供了极大的灵活性。在后续的博客里面,我会讨论一个相当实际的Linux策略路由的配置用例。不过在这篇文章中,我们还是现在关注一下Linux策略路由的概念以及怎么使用吧。 策略路由包含了好几方面: 策略路由表(table):Linux系统中包含了三个默认的路由表:local表(这个路由表不能人为的编辑或者删除),main表,和default表。有一点需要注意的是,如果我们增加一个路由,但是没有指定它是属于哪个路由表的情况下,这个路由实际上是被加入到了main表中,而不是default表。这一点跟我们直观的想象是不一样的。 策略路由规则(rule):同样的,Linux系统中有三个默认的rule,分别对应于三个默认的路由表。 在我们应用Linux的策略路机制实现我们的特殊的需求时,一般我们需要做三件事情: 我们需要创建一张定制的策略路由表(table)。 我们需要创建一个或者多个定制的策略路由规则(rule)。 我们需要在创建的策略路由表中加入一个或者多个路由信息(route)。 让我们一步一步的介绍一下上面的三个步骤。 创建一个自己定制的策略路由表 第一步就是要创建一个自己定制的策略路由表。实际上,创建一个路由表,等同于在文件/etc/iproute2/rt_tables里面添加一行新的记录。所以比如我们想要创建一个叫custom的路由表的话,实际上也就可以使用下面的命令直接对rt_tables文件进行操作。 # echo 200 custom >> /etc/iproute2/rt_tables 上面的这个命令创建了一个名字叫做custom, id为200的路由表。请记住这个路由表的名字,因为我们在下面介绍路由规则(rule)和以及编辑路由表的时候,就是用的这个路由表。需要知道的是,因为这个路由表是直接存放在rt_tables文件中的,所以,在Linux机器重启之后,这个路由表也会仍然存在。 创建策略路由规则(rule) 在创建了路由表之后,下一步就是创建路由规则(rule),路由规则会告诉系统使用哪个路由表(table)去做路由。在本文中,作为一个例子,我想根据数据的源地址来制定一个路由规则。这其实是策略路由的一个很常见的应用,而且因为这个路由规则是依据源地址的,所以这样的场景也叫作源地址路由(source routing). 使用下面的命令来创建一个策略路由规则: # ip rule add from “source_address” lookup “table_name” 假设我们有这样的需求,对于所有的从IP地址192.168.30.200来的数据,我们希望系统将其交给我们之前创建的叫做custom的路由表去做路由。那么我们只要使用下面的命令来创建这个rule就可以了。 # ip rule add from 192.168.30.200 lookup custom 我们可以使用下面的命令来查看当前系统中所有有效的路由规则: # ip rule list 我在这篇文章的开头也说过,对应于local, main和default这三个系统中的路由表,分别也各自有一个对应的规则。在我们新增了自己的路由规则之后,在上面的命令的输出中,应该也能够看到它。 但是,这里还有一个小问题,那就是用这样的方式创建的路由规则(rule)并不是永久的,也就是说,如果系统重启之后(或者是网络重启),使用上面这样的命令创建的rule就会随之丢失了。如果想要创建的路由规则在重启系统或者重启网络之后也不会丢失,那么我们需要在/etc/network/interfaces这个文件里面加入一行: post-up ip…