MPLS L3VPN OSPF 问题之一防止路由环路(down bit与domain-tag) 下载本文

内容发布更新时间 : 2024/5/9 22:22:59星期一 下面是文章的全部内容请认真阅读。

MPLS L3VPN OSPF 问题之一防止路由环路(down bit与domain-tag) 看如下拓扑图:

假设R1的环回地址为1.1.1.1,CE-PE运行的是OSPF路由协议,PE间运行的IGP也是为OSPF,和IBGP;

环境介绍后,让我们来看看环路是如何一步步发生的。

1. R1的1.1.1.1在R2中通过VRF 绑定了VPNA,并生成了VPNV4 的路由信息,转化为3类的LSA注入了R2上面的BGP进程(因为要通过BGP扩展属性携带RD,RT等信息,BGP与OSPF是互相注入的);

2.假设R6(也可以是R3)因为链路抖动等多方面原因,使得R6通过IBGP先接受1.1.1.1的更新报文。

3.这时R3接收了从R6传过来的1.1.1.1 IBGP更新,。并注入到了IGP OSPF (VPN)进程中,在VPN路由中OSPF的下一跳是R6可达R1。此时VPN路由关于1.1.1.1的更新再注入到IBGP中,并通过IBGP把1.1.1.1更新发给R3.

4.在R3已接入来之R6的更新包后,并注入了OSPF进程后,这时链路正常了,刚好接收到了来之R2的IBGP更新,这个时候在R3上就有二条路由更新了。因为IGP的优先级高于IBGP,OSPF VPN中的1.1.1.1的更新保留下来。丢弃来之R2的IBGP更新。

5.因为1.1.1.1的路由存在于R3的OSPF VPN 中,会注入到IBGP中去,转发给R6.

6.R6接收到更新后,知道了到1.1.1.1也可以通过R3到达,下一跳R3.问题这个时候在路由表中,已有一条通过R2学习的R1的IBGP更新,此时又来一个更新,R6要如何处理呢?因

为这二个更新包其metric 等都一样,所以会比较其BGP的RID,假如R3的RID低于R2,那会R6会接受从R3的更新包。 会选择从R3发过来的更新。。然后再注OSPF,然后。。。形成了环路。

从上面的分析可以知道,关键在于第三步,从IBGP学习到的路由注入到OSPF后,OSPF又把这条信息注回到了IBGP发给R3,R3接收到后,放于OSPF VPN中路由表中。这条路由与从R2来的更新引起的环路,如果让R3接到R6的更新后不写入本地的OSPF VPN就不会发生环路了。

解决方法:在R6接受1.1.1.1更新后注入OSPF后,在LSA头部设置DN位(down bit),此个LSA R3接受后会存于LSADB中,但是不会写入路由表中。!!这个千万要注意了,不是丢弃,而是不写入路由表中。

简单来讲,在经过R6后的OSPF VPN路由第三类LSA,会设置DN位,其他PE接收到带DN位的LSA更新会无视,不会更新路由表。思科默认情况下是设置DN位的。 但这样是不是万无一失呢?

这样设置DN位也会有问题,我们看上面的路,右边的VPN,上边的CE和下边的CE将有可能互法通信!虽然他们在同一VPN;这是因为,从上边的路由更新如果是3类LSA的话(即是CE是ABR),从R6下发到R3的3类LSA的更新将会由于设置了DN位而写不进路由表。导致无法访问。

因为这个DN位会引起潜在的互联互通问题,在实际工作中,视其情况会关闭DN; 华为:vpn-instance-capability simple 思科:capability vrf-lite(cisco命令)

我们来看一下移动承载网的标准图(大部分企业也大多是这种结构,业务不尽相同):

CE R1 双线上联(VRRP,其中R1与R2,R3是通过传输链路相连,如同中间接了一个二层交换机);需要特别注意的是R2---R3之间的互联并没有使用IBGP互联,而是直接把S1/1 当作CE接入的一个端口,即是绑定同一VRF(华为叫instance);这样一样,关掉DN后,也不会引起环路问题。

聪明的同学可能会提出,就算这样,也会有优劣路由问题,呵,这个问题已不是问题了,因为在同一个area中,去往同一目标网络的虽然有二条路由,但是他们的metric是不同的。(实际工作中,都已指定了cost值)

好,可能还有一些同学不明白为什么关掉DN后不会有环路问题。回到当时的图:

此是R6与R3间的互联变成了同一VRF;1.1.1.1传到R6后,R6注入到OSPF VRF中,R3通过OSPF即可得到更新,OSPF 下一跳为R6;此时第四步:R2的1.1.1.1更新到后,注入OSPF VRF中可以发现这个OSPF的1.1.1. 1下一跳为R2,明显metric会比从R6来的更新要优先。(而原来使用IBGP互联时会有一个因为RID的潜在问题引起忽略R2的更新造成环路可能)