一、IS-IS路由泄露
IS-IS 支持多区域分层设计的网络结构一Ll 区域和L2区域,其中,L2区域作为骨干区域,多个L1区域通过L2区域互连互通。而且在默认情况下,IS-IS,的L1区域类似OSPF的完全末梢区域,只有区域内的路由信息。每个L1区域的L1/2 路由器向区域内发送L1的LSP时,会将LSP中的ATT位置1以表明它连接了其他区域,
这样,L1路由器会在路由器中安装默认路由,该默认路由指向离它最近的L1/2路由器,也就是说L1路由器使用离它最近的L1/2路由器作为缺省网关来访问骨干和其他L1区域。
如下图所示的网络,R1 和R2是区域49.0001的L1/2路由器,它们连接到骨干区域,具有两张链路状态数据库; R3和R4是区域49.0001中的L1路由器,它们的链路状态数据中只有本区域内的路由信息。
此时,R1和R2都会在通告到区域49.0001的L1 LSP中设置ATT位,下图分别显示了R3和R4的链路状态数据库:
上面的输出内容显示了R3和R4都接收到了两个带ATT置位的LSP(分别由R1和R2发送)。这里需要注意的是,并不是所有的L1/2路由器发出的L1 LSP都会设置ATT位,设置ATT位的条件是L1/2路由器必须有个激活的L2连接,很显然网络中的R1和R2满足该条件。
L1路由器接收到带ATT置位的LSP后,会根据距离最近的L1/2路由器产生一条默认路由,所有访问其他区域的数据包都会使用这台L1/2路由器作为缺省的网络出口。根据拓扑图所示的各链路的开销值,很显然,R3和R4都以R2作为缺省出口。下面的输出内容显示了R3和R4的路由表情况:
由.上面的输出可以发现,R3和R4的路由表中只有L1的路由,还有一条默认路由,所有转发到其他区域的数据都是使用该默认路由的。下面的输出显示了在R3.上使用Tracert命令跟踪访问5.5.5.0/24 的路径情况,可以发现,R3访问网络5.5.5.0/24 的业务流经过的路径是R3→R4→R2→R1→R5,这显然不是最优的路径(最优的路径应该是R3→R1→R5)。
为使R3访问网络5.5.5.0/24使用最优路径,我们可以在路由器R1和R2.上将区域49.0002的L2路由引入至区域49.0001,这个过程叫路由泄露。下面的输出内容显示了在R1进行路由泄露的配置方法。
下面的输出内容显示了在R1上进行路由泄露后R3的路由表的情况,可以发现R1已经收到了像5.5.5.0/24这些来自区域49.0002的路由,这时R3访问5.5.5.0/24变成了总开销值为30的路径: R3→R1→R5。
如果无需将L2区域中的所有路由泄露到L1区域,这时需要在泄露时进行路由过滤。在路由泄露命令之后引用一个filter-policy就可进行路由的过滤,下面给出了具体的做法。下面的输出内容显示只将区域49.0002中5.5.5.0/24网络引入进区域49.0001。
通过上面的实验,我们可以知道,通过路由泄露使得L1区域能够收到其他区域的具体路径信息(网络前缀及开销值),这样可以避免次优路径的问题。考虑到网络中部署的某些业务可能只在L2区域内运行,则无需将这些路由渗透到L1区域中,可以通过配置策略仅将部分L2区域的路由渗透到L1区域。另外,这种方法也可以用于L1区域向L2区域进行路由泄露时的过滤,缺省情况下,L1区域中的所有路由都会泄露至L2区域。
二、IS-IS路由聚合
在网络中进行路由聚合有两个好处:一是可以减少通告的路由数目,减少路由表的规模,节省路由器的系统资源,提高数据包的转发效率;二是可以增强网络的稳定性, 因为聚合路由隐藏和隔离了明细网络的故障。
跟OSPF协议一-样,IS-IS也支持区域间及外部路由的聚合,区域间通告路由须在L1/2路由器.上进行聚合,在边界设备将外部路由引入时也可以进行聚合。IS-IS 没有自动聚合能力,只能进行手工聚合。下面就让我们一起来了解一下怎么在网络中进行IS-IS路由聚合。
如图所示,网络中有两个IS-IS区域,区域49.0001被配置为L2区域,区域49.0002被配置为了L1区域,区49.0001中所有路由器都是L2路由器,区域49.0002中的R7是L1路由器(一台华为低端路由器),R5和R7是L1/2路由器。
由于IS-IS网络的路由条目过多(具有大量的1.1.x.y/24 的网络前缀),这些路由通告进L1区域时会造成R7系统资源负载过重,现要求降低R7的系统资源的消耗,在R5和R6上将L2区域中的路由通告进L1区域时进行路由聚合,减少通告路由的数量后,缩减了R7的路由表规模,降低了资源开销。下面的输出内容显示了R5和R6上的路由聚合配置方法:
聚合后可以观察到R7的路由表中只接收到一条聚合后的路由,而不再有明细路由信息。但是,这里需要注意的问题是,默认情况下,IS-IS在做完聚合路由后,本地路由表中不会自动生成一条指向黑洞接口(null0) 的聚合路由,这在一些情况下会带来路由环路的问题。
在上述所示的网络中,如果网络1.1.1.0/24 出现故障,IS-IS协议在收敛后,R5和R6中的路由表中不再有该路由。但是,由于R5和R6路由器都在通告聚合路由,结果就是R5和R6都会接收到对方的聚合路由(下面显示了R5和R6的路由表信息),并将其放入路由表中,导致路由环路的出现。假设这时有个目标为网络1.1.1.0/24的数据流到达R5或R6,R5会根据聚合路由将这个数据流发给R6,而R6也会将该数据流发送给R5, 这样就导致了在R5和R6之间的数据环路问题。
为避免上述问题,华为设备提供了以下三种方法:
-
在路由聚合命令之后配置avoid-feedback,避免从其他设备接收到该聚合路由,例如:summary 1.1.0.0 255.255.0.0 level-1 avoid-feedback
-
在路由聚合命令之后配置generate_ null0_ route,在本地路由表中生成一条指向null0的聚合路由条目,例如:summary 1.1 .0.0 255 255.0.0 level-1 generate null0 route
-
手工配置一条指向null0接口的聚合路由,例如:ip route-static 1.1.0.0 255.255.0.0 null0 preference 5
通过这三种方式,可以避免流量匹配到聚合的路由,防止的环路的产生。
IS-IS作为一种链路状态路由协议,做路由聚合时没有距离矢量路由协议的灵活性,像RIP协议,它可以在任意一个接口,上做路由聚合,而链路状态协议只能在区域边界或连接外部网络的边缘路由器上做路由聚合,在区域内通告路由是没有办法聚合的。
三、IS-IS路由通告和过滤
这里还是以上一小节的场景为例,假设现在在R5和R6。上已经配置好L2区域向L1区域的路由泄露,但是在R7上还是没有学习到来自R5和R6的路由,查看R7邻居表发现邻居关系都是正常的:
进一步查看R7的链路状态数据库,发现R7已经收到了来自R5和R7的LSP:
如下所示,进一步查看R5和R6的LSP详细信息:
由R5和R6通告的路由的开销值可以看出,R5和R6使用的开销类型为widemetric,而R7使用默认的开销类型:narrow,,导致路由的计算失败,这时将R7的开销类型修改成wide,问题得以解决:
只有邻居之间使用相同的开销类型,才能正确计算学到的路由。如果一端配置是narrow,另一端配置为wide或者wide-compatible,则两端不能相互学习路由;如果一端配置是narrow-compatible,另一端配置为wide,则两端也不能相互学习路由。其他方式的开销类型组合都可以学习到路由。
为节省资源开销,R7只需要转发一部分骨干区域网络的业务流量,比如只需要转发去往1.1.1.0/24 和2.2.2.0/24网络对应的流量,我们知道IP报文是根据IP路由表来进行转发的。IS-IS 路由表中的路由条目需要被成功下发到IP路由表中,该路由条目才生效。
因此,可以通过配置基本ACL、IP-Prefix、 路由策略等方式,只允许匹配的IS-IS 路由下发到IP路由表中。不匹配的IS-IS路由将会被阻止进入IP路由表,更不会被优选。下面的输出内容显示了R7具体的配置:
观察R7的路由表,可以发现R7路由表中除了直连网络的路由之外只有1.1.1.0/24和2.2.2.0/24:
如果在区域49.0002中R7的下方还有一台路由器(R8,如图下图)那么这台路由器的路由表是如何的?
实际上R8会拥有所有来自骨干网的路由,因为在区域内入方向的filter-policy, 只会影响本地路由表,不会过滤LSP,所以R8.上还是具有所有骨干区域中的路由,下表显示了R8的路由表:
如果入方向的Filter-policy应用在区域的边界上会是什么样的情况呢?比如在R5上将区域49.0002中7.7.7.0 /24 的路由过滤掉,此时R5中的路由表中没有了7.7.7.0/24 网络中的路由,那么骨干区域还能接收到由R5通告的7.7.7.0/24的路由吗?答案是不能。
因为R5是一台L1/2路由器,它负责将L1区域的路由通告进L2区域,将L1区域的路由通告进L2区域必须满足一个条件,那就是该L1区域的路由必须存在于本地的路由表中(因为链路状态协议在区域之间通告路由是遵守距离矢量路由特性的)。所以,R5不会向骨干区域通告路由7.7.7.0/24.
四、IS-IS发布缺省路由
在具有外部路由的边界设备上配置IS-IS发布缺省路由可以使该设备在IS-IS路由域内发布一条0.0.0.0/0的缺省路由。在执行此配置后,IS-IS域内的其他设备在转发流量时,将所有去往外部路由域的流量首先转发到该设备,然后通过该设备去往外部路由域。
配置静态缺省路由虽然也可以实现该功能,但是当现网中有大量设备时,配置工作量巨大且不利于管理。
此外,采用IS-IS发布缺省路由的方式更加灵活。例如,如果存在多个边界设备,那么可以通过配置路由策略,使某台边界设备在满足条件时才发布缺省路由,从而避免造成路由黑洞。
华为设备配置:
- 执行命令isis [ process-id ],进入IS-IS视图。
- 执行命令default-route-advertise [ always | match default | route-policy route-policy-name ] [ cost cost | tag tag | [ level-1 | level-1-2 | level-2 ] ] * [ avoid-learning ],配置IS-IS发布缺省路由。 缺省情况下,IS-IS设备不生成缺省路由。
整理资料来源:《HCIE路由交换学习指南》、华为hedex文档