0%

TCP/IP 路由技术 14:路由映射

路由映射与访问列表十分相似,它们都包含匹配确定数据包细节的准则、许可及拒绝这些数据包的操作。但是路由映射不像访问列表,它可以向匹配准则中加入设置准则,设置准则可以按照指定的方式真正地对数据包和路由信息进行修改,而且路由映射还有更多的选项用来匹配给定的数据包。路由映射是一个定制路由策略的强大工具。

路由映射的基本用途

路由映射可以用于路由重新分配和策略路由。策略路由在大规模边界网关协议(BGP)的运行中,是一个最必不可少的工具。策略路由只不过复杂的静态路由,策略路由可以基于数据包源地址包头中的其他域指定的下一跳路由器转发数据包,而静态路由是基于数据包的目的地址向指定的下一跳路由器转发数据包。策略路由还可以链接到扩展 IP 访问列表,使路由器可以基于协议类型和端口号进行路由选择。同静态路由一样,策略路由只会影响那些配置了策略路由的路由器。

如下列出了与重新分配一起使用的命令 match 和 set:

如下给出了与策略路由一起使用的命令 match 和 set。

配置路由映射

与访问列表一样,路由映射本身不会对任何东西产生影响,它们必须被某些命令所调用。这些命令最可能是策略路由选择命令或者重新分配命令。策略路由选择将数据包发送到路由映射,而重新分配是将路由发送到路由映射。

路由映射是通过名字来标识的,如下创建了一个名为 Hagar 的路由映射:

1
2
3
route-map Hagar permit 10
match ip address 110
set metric 100

每条路由映射语句都包含 许可拒绝 操作以及一个序列号。该路由映射给出了一个许可操作和序列号。序列号允许说明和编辑多个语句。有了序列号后,路由器还允许删除个别语句。

编辑路由映射必须谨慎,如果输入 no route-map Hagar 而没有指明序列号,那么整个路由映射将会被删除。同样的,如果在添加 match 和 set 语句时没有指定序列号,那么它们仅会修改语句 10(默认序列号)。

路由映射语句对数据包和路由的匹配是按序进行的,如果匹配成功,那么将执行所有的 set 语句以及许可或拒绝操作。如同使用访问列表一样,当匹配发生时,处理马上停止,指定的操作就被执行,此后路由或数据包不再传递给后继语句。

拒绝操作的行为依赖于路由映射是用于策略路由选择还是重新分配。如果用于重新分配,那么路由将不会被重新分配,如果用于策略路由选择,则不对数据包进行策略路由,但是数据包会被传递给常规路由进行转发。

与访问列表一样,如果数据包或路由没有匹配到任何一个语句,那么对路由映射来说必须执行一个缺省操作。在每个路由映射的结尾都隐含了一个拒绝操作。经过重新分配路由映射的路由若没有发生匹配,则不会被重新分配。而经过策略路由映射而没有发生匹配的数据包将会按常规路由选择进程转发。

如果在路由映射语句中没有配置 match 语句,那么缺省操作是匹配所有数据包和路由。每个路由映射语句可能有多个 match 和 set 语句。

案例研究:策略路由选择

使用命令 ip policy route-map 可以定义策略路由选择。该命令配置在接口且仅会对入站数据包有影响。

如下所示,假设需要在 Linus 上实现一个策略,使来自 172.16.6.0/24 的流量被转发到 Lucy,而把来自 172.16.7.0/24 的流量转发到 Pigpen,Linus 的配置如下:

S0 上的策略路由选择命令把入站数据包发送给路由映射 Sally,路由映射 Sally 的语句 10 使用访问列表 1 标识来自子网 172.16.6.0/24 的源地址,如果匹配成功,数据包将被转发到 Lucy,其数据包的下一跳接口地址是 172.16.4.2,如果匹配不成功,数据包被发送到语句 15,该语句使用访问列表 2 来匹配来自子网 172.16.7.0/24 的源地址,如果匹配成功,数据包被转发给 172.16.4.3。任何没有匹配到语句 15 的数据包,将会被正常的路由。

在转发数据包之前,为了强制 Linus 验证下一跳地址是否在列表中,可能使用命令 set ip next-hop verify-availability。Linus 将搜索 CDP 邻居表来验证下一跳地址是否在列表中,如果不在,则策略路由被拒绝,数据包将按常规被转发。

当仅按照源地址进行策略路由选择时可以使用标准 IP 访问列表。如果需要借助源地址和目标地址进行路由,那么要使用扩展访问列表。

假设在路由器 Schroeder 需要将子网 172.16.1.0/24 上的服务器发出的 FTP 流量转发到 Lucy,而把从相同服务器发出的 Telnet 流量转发到 Pigen,Schroeder 的配置如下,这里访问列表不仅检查源地址和目的地址,而且还检查源端口:

分配批量和交互式流量的目的是使小数据包特性的交互式流量不受大数据包特性的批量流量影响而增大时延。如果需要隔离的流量类型很多,那么通过目标端口标识流量会使访问列表变得庞大。如果策略的目标是将小数据包从大数据包中分离出来,那么可以对数据包长度进行匹配。

目前所展示的策略路由都是对从一个特殊接口进入路由器的数据包产生影响,但是路由器自己产生的数据包又会怎样呢?使用命令 ip local policy route-map 可以使这些数据包也按策略进行路由,该命令是被全局地配置在路由器上。

案例研究:策略路由选择和服务质量路由选择

策略路由选择可以是 QoS 的一个重要组成部分。带有 QoS 的策略路由选择可以在数据包进入路由器接口时,通过设置数据包 IP 头内字段中的优先级和服务类型来实现。ToS 位可用于改变路由器为数据包选择的路由,而优先级位则用于区分路由器中数据包的优先次序。

在路由映射中使用 set ip precedence 语句可以设置优先级,ToS 位可以通过语句 set ip tos 来设置。

案例研究:路由映射和重新分配

在 IPv4 和 IPv6 协议中,通过在 redistribute 命令中添加对路由映射的调用就可以使路由映射和重新分配一起使用。在如下网络中,IS-IS 的 IPv4 路由和 OSPF 路由正在进行相互的路由重新分配。redistribute 命令和路由映射一起被用作简单的路由过滤(或者说它们可以用于修改被重新分配路由的属性)。

虽然路由映射可以像简单的路由过滤一样工作得很好,但是它的能力体现在可以按照多种方式改变路由。

案例研究:路由标记

在如下所示的网络中,来自多个路由选择域的路由被重新分配到一个运行 OSPF 的传输域,其中每个域都运行单独的路由选择协议。在 OSPF 域的另一边,路由必须被重新分配回到它们各自的域。在从 OSPF 域进入每个域的出口点,可以使用路由过滤器以允许仅属于该域的路由通过。但是如果每个域的路由很多或变动很大,那么路由过滤器也可能会很难管理。

处理这个问题的另一种方法是,在 OSPF 传输域的入口对路由进行标记(tag),该标记在每个域内均是唯一的。在出口处,可以借助标记重新分配路由,而不通过明确的地址。传输网络的路由选择协议没有必要使用该标记,而仅仅是向外部网络来回传送它们。RIPv2、EIGRP、集成 IS-IS 和 OSPF 都支持路由标记。BGP 也支持路由标记。RIPv1 不支持标记。

在如下所示的网络中,路由器 Dagwood 正在接受来自 3 个不同路由域的路由,并且把他们重新分配到 OSPF 域。为了标记来自每个域的路由以便在 OSPF 域内可以标识它们的源点域。Dagwood 的配置如下:

首先,OSPF 下配置的 redistribute eigrp 命令,由于 Dagwood 接受的 EIGRP 域,所以直接在 redistribute 命令上设置标记 1。但是 RIP 路由是来自两个 RIP 域的,因此这里需要路由映射。路由映射 Dithers 设置 RIP 路由的标记为 2 或 3,具体依赖于路由是学自 10.1.2.3 还是 10.1.2.4。

在如下网路中,Blondie 仅可向 Oop 重新分配域 1 的路由,向 Alley 分配域 2 的路由。因为这些路由在进入 OSPF 传输域是已经被标记过,因此按照如下配置,Blondie 很容易实现这些功能:

使用路由标记过滤路由的一个缺点是不能通过接口过滤路由。例如假设 Blondie 必须向域 2 和域 3 发送路由,而这两个域都运行 RIP,则不可能通过配置使路由映射向一个 RIP 进程发送某些路由,而向另一个 RIP 进程发送其他的路由。这些路由必须使用命令 distribute-list 借助地址来过滤。

案例研究:从 OSPF 路由表中过滤掉被标记的路由

上述网路中,运行 OSPF 协议的网络都是一个传输网络。如果传输区中设备不需要向任何其他域发送数据包,那么在 OSPF 的路由表中就不必维护这些域的网络。因此 OSPF 路由器可以使用标记路由、分布列表和路由映射来阻止这些网络被添加到路由表中,而又不会影响到链路状态数据库中的表项。

如下对 OSPF 域内的路由器 Sally 进行修改:

路由映射 Charlie 禁止标记 1、2、3 的地址网络,因此命令 distribute-list in 会把这些地址从路由表中删去。被路由映射语句 20 允许的所有其他地址将被添加到路由表中。在执行重新分配的边界路由器 Blondie 和 Dagwood 上没有应用这个分布列表,如果一个地址不在路由表中,即使它存在于 OSPF 的 LSA 数据库中,路由器也不会把它重新分配到其他路由选择协议。因此在路由器 Sally 中,带有标记的 OSPF 地址会从路由表中过滤掉,但是这些地址仍存在于 OSPF 的 LSA 的数据库中。

案例研究:使用路由映射重新分配 IPv6 路由

IPv6 路由选择协议同样支持使用路由映射重新分配路由,配置方法与 IPv4 基本相同。

总结

至此,已经结束了对 TCP/IP 路由技术中内部网关协议的深入学习。接下来将进一步学习 TCP/IP 路由技术中的外部网关协议。