策略路由中的优先转发问题

2019-07-10 01:00南京张韬
网络安全和信息化 2019年7期
关键词:数据包报文路由

■ 南京 张韬

编者按:策略路由中定义的不同配置方式会对数据包最终实际的转发产生完全不一样的效果,掌握好相关的策略路由技术以及它和传统查找路由表之间的优先转发顺序,可以大大提高我们工作的灵活性和效率。

策略路由(Policy Route)其实就是一种复杂的静态路由,既可以基于数据包头中源IP地址向指定的下一跳路由器转发数据包,又可以基于协议类型和端口号进行路由选择,而且只会影响配置了策略路由的路由器。但是策略路由中定义的不同配置方式却会对数据包最终实际的转发产生完全不一样的效果。

配置策略路由步骤

1.配置route-map

首 先 使 用“routemap name [permit|deny][sequence-number]”命令创建配置路由映射表(routemap),route-map中 包 含 了规定数据转发的各种策略。当route-map子句被配置为permit,则表示对符合条件的报文执行策略路由;当子句中遇到匹配的deny节点,则表示对符合条件的报文不执行策略路由,报文信息按照正常的路由表进行转发,并不是将报文丢弃;如果没有在route-map中找到匹配规则的报文,也将按照正常的路由选择操作而被转发,报文并不会被丢弃。

如果与指定条件不匹配的报文,希望它不要被正常转发,而是要丢弃,则可以在路由映射表的最后配置一条set语句,将报文发到接口null 0。

2.配置match命令

配 置“match ip address {access-listnumber|name}”命令,使用访问控制列表来指定报文的匹配条件。

此外,还可以使用“match length min max”命令指定基于报文长度的匹配条件。

3.配置set命令

如果满足match语句的条件,则可以使用一个或多个set语句来指定对报文的操作。当配置了多个设置下一跳地址或本地出接口的set语句后,只有第一条set语句会被执行,其余set语句将被忽略。

具体而言,当使用“set ip next-hop ip-address[…ip address]”命令时,将检查路由表,以确定是否可以可以到达下一跳地址,而不会去检查路由表中是否存在前往报文目标地址的显示路由。

ip-address […ip address]则提供了一个IP地址列表,用于指定报文前往目的地路径中相邻下一跳路由器的地址。如果指定了多个下一跳地址,当出现与第一个下一跳地址相关联的本地接口状态为down时,路由器则会按照顺序轮流尝试后续的下一跳地址。

同 样,当 使 用“set interface interface […interface]”命令时,则提供了一个接口列表,用于指定报文被转发的本地出接口。如果指定了多个出接口,第一个状态为up的接口将用于转发报文,如果接口为down,路由器将尝试后续的出接口。

当 使 用“set ip default next-hop ip-address […ip address]”命令时,如果指定了多个下一跳地址,当与第一个下一跳地址相关联的本地接口状态为down时,路由器也会按照顺序轮流尝试后续的下一跳地址。和set ip nexthop ip-address […ip address]命令相比较而言,虽然只多了一个default关键字,但是此时却表示仅当路由表中没有到达报文目标地址的显式路由时,才将报文转发到指定的默认下一跳地址。

图1 策略执行案例拓扑图

图2 R1配置

图3 R2配置

图4 PC1测试到达PC2的连通性

同 理, 使 用“set default interface interface […interface]”命令时,也提供了一个默认接口列表,如果指定了多个出接口,则第一个状态为up的接口将用于转发报文;如果接口状态为down,路由器则会尝试后续的出接口,并且仅当路由表中没有前往报文目标地址的显式路由时,才将报文转发到命令指定的默认出接口。

4.在接口上调用策略路由

在路由器报文的入接口下使用命令“ip policy routemap”调用配置的策略路由,但是只有配置在路由器的入接口才会对数据包的转发产生作用。

策略路由和路由表转发选择

如图1所示,R1和R2路由器之间使用默认路由实现PC1和PC2之间互连通信,这里路由器以锐捷RSR20-14E型号为例(图中的fastethernet口实际为gigabitethernet口,Serial0/2/0口实际为serial2/0口),具体R1上配置如图2,R2配置如图3。

现在PC1可以正常访问PC2,如图4所示。

当在R1路由器上配置如下策略路由后,则PC1访问PC2的数据包流量会被R1强制转发到Server,而不是按照默认路由的方式进行转发,造成无法ping通PC2,说明定义的策略路由起到了效果,如图5所示。

R1(config)#routemap abc //配 置route-map

R1(config-routemap)#match ip address 1

R1(config-routemap)#set ip default nexthop 10.1.1.10

R1(config-routemap)#exit

R1(config-if-GigabitEthernet 0/1)#ip policy route-map abc //调用策略路由

如果上面的R1路由器这里不是采用默认路由的配置方式,而是采用静态路由或者其他动态路由协议的配置方式,此时效果又不一样,这里把上述配置的默认路由改成静态路由,策略路由配置不变。

R1(config)#no ip route 0.0.0.0 0.0.0.0 192.168.1.2

图5 PC1无法访问PC2

图6 PC1又可以访问PC2

图7 PC1无法访问路由器R2的直连接口S2/0

R1(config)#ip route 201.1.1.0 255.255.255.0 192.168.1.2

这时候发现PC1又可以访问PC2,说明路由表中的明细路由(不包括默认路由)优先于策略路由中的set ip default next-hop 下一跳地址,如图6所示。

由于R2路由器的Serial0/2/0接口和R1路由器是直连的,R1路由器本身通过直连路由信息就可以转发到192.168.1.0网段中,如果在R1上配置了如下不带default关键字的策略路由信息后,此时可以清楚地看到PC1又无法访问PC2,甚至连直连网络R2路由器的Serial0/2/0接口都无法ping通,如图7所示。因为策略路由 中set ip next-hop下一跳地址的策略路由要优于明细路由,即使是和R1路由器直连,数据包流量也会被R1按照策略路由中定义的规则被强制转发到Server,而没有按照路由表中本身的明细路由进行转发,所以造成网络不通。

R1(config)#route-map xyz //配置route-map

R1(config-routemap)#match ip address 1

R1(config-routemap)#set ip next-hop 10.1.1.10

R1(config-routemap)#exit

R1(config)#accesslist 1 permit 200.1.1.0 0.0.0.255

R1(config-if-GigabitEthernet 0/1)#ip policy route-map xyz//调用策略路由

但如果此时这里是使用带有default关键字的策略路由信息,则

【】【】

结果又会大相径庭,PC1仍然可以ping通192.168.1.2,因 为set ip default next-hop优先级低于路由中的明细路由。

结语

策略路由可以可以使报文不按照传统查找路由表的方式进行数据转发,而是根据配置的策略将数据包发送到相应路径上。在策略路由中,数据转发优先级规则按照如下顺序进行选择 :set ip next-hop( 或interface) >明细路由> set ip default nexthop(或interface) > 默认路由。掌握好相关的策略路由技术以及它和传统查找路由表之间的优先转发顺序,可以大大提高我们工作的灵活性和效率,起到事半功倍的效果。

猜你喜欢
数据包报文路由
基于J1939 协议多包报文的时序研究及应用
以太网QoS技术研究及实践
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
数据通信中路由策略的匹配模式
OSPF外部路由引起的环路问题
浅析反驳类报文要点
路由重分发时需要考虑的问题
C#串口高效可靠的接收方案设计
1588v2中的PTP报文格式及应用