郝 贤 云
(江西应用工程职业学院 计算机与信息工程系,江西 萍乡 337042)
现实中的网络是由多个路由域所构成的,每个路由域中的路由器则有可能同时运行着多种动态路由协议。常见的动态路由协议按照协议特征可划分为距离矢量路由协议例如:路由信息协议(Routing Infomation Protocol,RIP)、链路状态路由协议例如:开放最短路径优先(Open Shortest Path First,OSP)、混合型路由协议例如:增强内部网关路由协议(Enhanced Interior Gatewar Routing Protocol,EIGRP)[1-3]。众所周知,路由器无论运行哪种动态路由协议,都会产生路由更新,只是触发路由更新的方式不同而已。通常RIP路由协议是定期进行路由更新(RIP路由器每隔30 s就会向与自己相邻的路由器发送整张路由表),而EIGRP和OSPF协议只有在网络结构发生改变时,才进行路由更新。显而易见:一方面,网络中这些动态路由协议的路由更新不仅会挤占用户数据的网络带宽,而且还会降低路由器的工作性能;另一方面,有的时候为了避免路由环路或次优路由的存在,相关路由器不能对所有路由条目进行通告,只能对特定的几条路由条目进行通告(例如在多点双向重分布时,如果自治系统边界路由器对所有路由都进行通告,极易造成路由环路的产生)。因此,为了保证网络能够安全稳定的运行,网络技术人员有必要对网络中的路由更新进行合理的规划控制。
路由映射表[4]与常见的访问控制列表相比较为复杂,它由一条或多条可编辑route-map语句所构成,并且每条route-map语句均存在序列号(如果不为其设置序列号,路由器将会认为操作者准备编辑第1条语句或者准备写入一条序列号为10的语句)。这些语句的执行顺序与访问控制列表极为相似,也是按照从上至下的顺序进行,并执行与路由匹配的第1条语句。其可实现的功能主要有以下几点:① 可用于在两个不同路由域之间重分布时过滤路由,并设置路由度量值。② 可用于实现策略路由。策略路由的出现可使专业技术人员更加灵活的定义相关路由策略,它可以定义基于源地址、目的地址、报文长度、协议类型以及端口号的路由,且路由优先级为最高。③ 可用于网络地址转换(Network Address Translation, NAT)。在进行NAT地址转换时,应用路由映射表可以使专业技术人员有选择性的将私有IP地址转换为公有IP地址。④ 可用于实现边界网关协议(Border Gateway Protocol, BGP)策略。将路由映射表应用在BGP中,既可以对进入或离开BGP的路由进行控制,又可以对BGP的路径属性进行控制。
专业技术人员使用分发列表[5-6]同样可以实现对路由更新的控制,相对于路由映射表,分发列表的配置过程并不复杂(主要依靠访问控制列表来实现),只是在配置的时候需要在相关路由进程下进行。通常情况下,它不仅可以部署在路由器的出接口和入接口而且还可以部署在路由重分布的过程中。配置分发列表的主要步骤如下:① 创建一个基于需要过滤的路由的访问控制列表。② 需要确定是从路由器的入站接口或出站接口过滤路由还是过滤重分布而来的路由。③ 使用Distribute-list命令配置分发列表。另外,在使用分发列表的过程中有以下两点需要特别注意:首先,分发列表更适合部署在距离矢量路由协议中,它对出站或入站的路由都可以进行正常过滤。如果将其部署在链路状态路由协议如OSPF中,它只能过滤自治系统边界路由器始发的外部1类或2类路由,而无法过滤区域内路由和区域间路由(部署在OSPF进程的IN方向只对本地路由表有效,部署在OSPF进程的OUT方向则不起任何作用)。这是由于分发列表无法过滤链路状态信息(Link-State Advertisement, LSA),只能过滤路由信息。通常OSPF路由器是通过传播LSA来构建链路状态数据库(Link-State Data Base,LSDB)(相同区域内OSPF路由器的LSDB必定是一致的),并在此基础上通过SPF算法来计算出最优路由的。其次,分发列表并不适合在冗余网络环境中部署使用,这是因为分发列表很可能将备用路径的路由更新也过滤掉。
前缀列表和分发列表以及路由映射表一样,也可用于控制路由更新。通常前缀列表具有以下优点:① 前缀列表支持对其包含的条目进行增量修改。在前缀列表中,专业技术人员对其包含的条目可单独的进行增加或删除,而不必删除整个列表(每个条目均自动生成自己的序列号,并根据序列号进行排序)。② 前缀列表在路由查找以及列表加载方面有着更明显的优势。③ 前缀列表的配置过程简单且配置界面也更为友好。④ 前缀列表可使专业技术人员对路由更新的控制更为灵活。现实中在使用前缀列表时,路由器会从前缀列表的第1条语句开始查看是否与路由前缀相匹配。如匹配,则前缀列表的其他语句将不再被路由器查看;如路由前缀与前缀列表中的语句没有一条是相匹配的,那么这条路由将被路由器所拒绝;如路由前缀与多条前缀列表中的语句相匹配,那么路由器则认为路由前缀只与前缀列表中序列号最小的条目相匹配。需要特别注意的是:当前缀列表为空时,将允许所有路由前缀通过。
2.1.1 在单点双向路由重分布中过滤路由[7-9]
网络中的3台路由器组成了两个不同的路由域,路由器R1、R2组成RIP路由域,路由器R2、R3组成OSPF路由域。为了满足业务正常运行的需要,计划在两个路由域之间做路由重分布,这样以来不仅RIP路由域中的路由可以在OSPF路由域中传播,而且OSPF路由域中的路由也可以在RIP路由域中传播。RIP路由域包括192.168.8.0/24、192.168.9.0/24、192.168.10.0/24 3个网段,其中需要将192.168.8.0/24与192.168.10.0/24两个网段重分布到OSPF路由域中。OSPF路由域包括172.20.0.0/24、172.20.1.0/24、172.20.2.0/24 3个网段,其中需要将172.20.0.0/24、172.20.2.0/24两个网段重分布到RIP路由域中。网络结构如图1所示。在这里给出在边界路由器R2中,对路由进行过滤的详细配置过程。
图1 在单点双向路由重分布中过滤路由
(1) 路由器R2的相关配置
R2(config)#access-list 22 permit 192.168.9.0 0.0.0.255 //建立访问控制列表22
R2(config)#access-list 23 permit 172.20.1.0 0.0.0.255 //建立访问控制列表23
R2(config)#router rip //启动RIP进程
R2(config-router)#ver 2
R2(config-router)#network 192.168.10.0
R2(config-router)#redist ospf 12 route-map ospf-rip metic 11 //将允许的OSPF路由重分布到RIP路由域中
R2(config)#route-map ospf-rip deny 10 //定义路由映射表ospf-rip
R2(config-route-map)#match ip address 23
R2(config)#route-map ospf-rip permit 20
R2(config)#router ospf 12 //启动OSPF进程
R2(config-router)#network 172.20.2.0 0.0.0.255 area 0
R2(config-router)#redist rip route-map chenbo subnets //将允许的RIP路由重分布到OSPF路由域中
R2(config)#route-map chenbo deny 10 //定义路由映射表chenbo
R2(config-route-map)#match ip address 22
R2(config)#route-map chenbo permit 20
R2(config-route-map)#set metric 400
上述配置完成后,使用sh ip route命令分别查看路由器R1、R3的路由表,如图2、3所示。从中可以清楚的看到:在路由器R1的路由表中存在两条路由标识符为“R”,且度量值为11的路由条目(以上路由条目既为重分布到RIP路由域中的OPSF路由条目172.20.0.0/24与172.20.2.0/24);在路由器R3的路由表中存在两条路由标识符为“O E2”,且度量值为400的外部路由条目(以上路由条目既为重分布到OSPF路由域中的RIP路由条目192.168.8.0/24与192.168.10.0/24)。这足以充分说明在路由器R2中进行的路由过滤是成功的。
图2 路由器R1的路由表
图3 路由器R3的路由表
2.1.2 在多点双向路由重分布中过滤路由[10-11]
网络由4台路由器R1~R4所组成,其中路由器R1~R3组成了一个RIP路由域,该路由域包括以下3个网段192.168.4.0/24、192.168.5.0/24和192.168.6.0/24。另外,路由器R2~R4组成了一个EIGRP路由域,该路由域包括以下3个网段192.168.16.0/24、192.168.17.0/24和192.168.18.0/24。网络结构如图4所示。为了满足业务需要,使全网能够互联互通,分别在两个路由域的边界路由器R2、R3中做路由重分布。但是这样一来很容易出现路由反馈的情况。举例来说:当一条RIP路由条目通过边界路由器R2重分布到EIGRP路由域中后,该路由就会在EIGRP路由域中传播,最终会传播到边界路由器R3。如果届时在路由器R3中做路由重分布,将EIGRP路由域中的路由(包括从RIP路由域中重分发而来的那条路由)重分布到RIP路由域中,这样就造成了路由反馈。因此,有必要在边界路由器R2、R3中进行路由过滤,避免路由反馈的发生。篇幅有限,在这里只给出在边界路由器R2中,使用路由映射表进行路由过滤的详细配置过程。
图4 在多点双向路由重分布中过滤路由
路由器R2的相关配置。
R2(config)#access-list 50 permit 192.168.4.0 0.0.3.255 //建立编号为50的访问控制列表
R2(config)#access-list 60 permit 192.168.16.0 0.0.3.255
R2(config)#router rip
R2(config-router)#ver 2 //设置为版本2
R2(config-router)#no auto-summary //禁止自动汇总
R2(config-router)#passive-interface e1/2 //设置为被动接口
R2(config-router)#network 192.168.4.0
R2(config-router)#network 192.168.5.0
R2(config-router)#network 192.168.6.0
R2(config-router)#redist eigrp 10 route-map eigrp-rip metic 10
R2(config)#route-map eigrp-rip deny 11 //定义路由映射表eigrp-rip
R2(config-route-map)#match ip address 50
R2(config)#route-map eigrp-rip permit 12
R2(config)#router eigrp 10 启动EIGRP进程
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.16.0
R2(config-router)#network 192.168.17.0
R2(config-router)#network 192.168.18.0
R2(config-router)#redist rip route-map eigrp-rip metic 1200 150 255 1 1400
R2(config)#route-map rip-eigrp deny 10 //定义路由映射表rip-eigrp
R2(config-route-map)#match ip address 60
R2(config)#route-map rip-eigrp permit 11
2.2.1 在距离矢量路由协议RIP中部署
网络由3台路由器R1~R3所构成,它们之间均运行RIP路由协议。为了满足业务的需求,只允许路由器R2学习到路由器R1中的全部路由条目,禁止路由器R3学习到路由器R1中的路由192.168.16.0/24与192.168.17.0/24。网络结构如图5所示。篇幅有限,在这里只给出路由器R2详细配置过程。
图5 使用分发列表在RIP网络中过滤路由
路由器R2的相关配置。
R2(config)#access-list 5 deny 192.168.16.0 0.0.0255 //建立编号为5的访问控制列表
R2(config)#access-list 5 deny 192.168.17.0 0.0.0.255
R2(config)#access-list 5 per any
R2(config)#router rip
R2(config-router)#ver 2 //设置为版本2
R2(config-router)#no auto-summary //禁止自动汇总
R2(config-router)#network 192.168.16.0
R2(config-router)#network 192.168.17.0
R2(config-router)#distribute-list 5 out s2/1 //使用分发类表在出站接口过滤路由
上述配置完成后,我们使用sh ip route命令分别查看路由器R2、R3的路由表,如图6、7所示。从中不难发现:在路由器R2的出站接口部署分发列表后,路由器R2仍旧可以学习到路由器R1的全部路由,而路由器R3无法学习到去往192.168.16.0、24与192.168.17.0/24这两个网段的路由。这足以充分说明分发列表已部署成功。有一点需要注意的是:如果将分发列表部署在路由器R3的入站接口处,同样可以实现当前的效果(相关配置命令与当前配置命令相似,故不再阐述)。
图6 路由器R2的路由表
图7 路由器R3的路由表
2.2.2 在动态路由协议OSPF中部署[14-16]
网络由3台路由器R1~R3所构成,它们之间均运行OSPF路由协议。为了满足业务的需求,只允许路由器R3学习到路由器R1中的全部路由条目,禁止路由器R2学习到路由器R1中的路由192.168.4.1/24与192.168.5.1/24。网络拓扑如图8所示。有限于篇幅,在这里只给出路由器R2详细配置过程。
图8 使用分发列表在OSPF网络中过滤路由
路由器R2的相关配置。
R2(config)#access-list 8 deny 192.168.4.0 0.0.0.255 //建立编号为8的访问控制列表
R2(config)#access-list 8 deny 192.168.5.0 0.0.0.255
R2(config)#access-list 8 permit any
R2(config)#router ospf 33 启动OSPF进程
R2(config-router)#router-id 33.33.33.33
R2(config-router)#network 192.168.18.0 0.0.0.255 area 0 //通告网络
R2(config-router)#network 192.168.19.0 0.0.0.255 area 0
R2(config-router)# distribute-list 8 in s2/0 //使用分发类表在入站接口过滤路由
上述配置完成后,使用sh ip route命令分别查看路由器R2、R3的路由表,如图9、10所示。从中不难发现:在路由器R2的人站接口部署分发列表后,在其路由表里只有去往192.168.18.0/24与192.168.19.0/24两个网段的路由,成功过滤掉了去往192.168.4.1/24与192.168.5.1/24两个地址的路由,但是这并不妨碍路由器R2将已过滤网段的相关LSA继续传递给路由器R3。因此,在路由器R3的路由表中可以看到去往全网的路由。另外,需要注意的一点是:在OSPF网络中,out方向的分发列表只能对本地始发的外部路由起作用,也就是说如果在out方向上部署分发列表,只能将其部署在ASBR上。
图9 路由器R2的路由表
图10 路由器R3的路由表
网络中的2台路由器R1、R2组成OSPF路由域,二者间通过双链路互相连接(既R1的e1/0接口与R2的e1/0接口相连接,简称为S1链路;R1的e1/1接口与R2的e1/1接口相连接,简称为S2链路)。为了满足业务的需求,需要在两条链路上实现分流,当路由器R1访问目的地址192.168.0.1/32时,数据包走S1链路;当路由器R1访问目的地址192.168.1.1/32时,数据包走S2链路;网络结构如图11所示。有限于篇幅,在这里只给出路由器R1详细配置过程。
图11使用前缀列表实现链路分流
路由器R1的相关配置。
R1(config)#router ospf 77//启动OSPF进程
R1(config-router)#router-id 11.11.11.11
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0 //通告网络
R1(config-router)#network 192.168.9.0 0.0.0.255 area 0
R1(config-router)#distribute-list prefix s1 in e1/0
R1(config-router)#distribute-list prefix s2 in e1/1
R1(config)#ip prefix-list s1 seq 5 deny 192.168.1.1/32 //设置前缀列表S1
R1(config)#ip prefix-list s1 seq 10 permit 0.0.0.0/0 le 32 //匹配所有路由
R1(config)# ip prefix-list s2 seq 5 deny 192.168.0.1/32 //设置前缀列表S2
R1(config)#ip prefix-list s2 seq 10 permit 0.0.0.0/0 le 32
上述配置完成后,使用sh ip route命令分别查看路由器R1的路由表,如图12所示。从中不难发现:在路由器R1的两个入站接口部署前缀列表后,两条链路已成功的实现了数据分流。当路由器R1访问目的地址192.168.0.1/32时,下一跳的地址为192.168.10.2,此时数据包走S1链路;当路由器R1访问目的地址192.168.1.1/32时,下一跳的地址为192.168.9.2,此时数据包走S2链路。
图12 路由器R1的路由表
网络技术人员在使用路由映射表、分发列表、前缀列表等技术,对网络中的路由进行过滤时,一定要考虑到具体的应用环境。这是因为在距离矢量路由协议中过滤路由与在链路状态路由协议中过滤路由,所产生的效果是有所不同的。