(2013-02-14 13:21:11)
我们知道,在MPLS VPN的路由架构中,PE-CE之间通常会使用一个动态路由协议,可能是IGP或BGP,对于IGP而言,OSPF应该是一个使用得最为广泛的协议之一。当我们在PE-CE之间部署OSPF来交互VPN路由时。在本地PE上,将OSPF路由注入MP-BGP从而形成VPNv4路由,并传递给远端站点,远端站点的PE再将收到的VPN路由重发布到其本地的OSPF,从而传递给其本地的CE,而此时,重发布进来的OSPF已经变成了外部路由,路由的优先级也更低了,同时也丢失了OSPF网络设计的连续性。
MPLS VPN通过某种机制,保持了OSPF在MPLS VPN环境下部署的连续性。实际上,来自CE的OSPF内部路由(Type-1、Type-2、Type-3 LSA)在被重发布进MP-BGP变成v4路由再被远端PE重发布进其本地的OSPF后,其实是以Type-3 LSA的形式注入到其本地OSPF的(当然还存在许多复杂的情况,这里说的是一般,一般情况),这样可以很好的保持OSPF的连续性。
1. OSPF VRF配置
router ospf 1 vrf ABC
network 10.1.12.2 0.0.0.0 area 0
redistribute bgp ?
router bgp 2345
address-family ipv4 vrf ABC
redistribute ospf 1 vrf ABC metric 10 match internal external 1 external 2
2. OSPF metric传递
在PE路由器上将OSPF内部和外部路由重发布进BGP的时候,PE路由将使用OSPF metric 来设置BGP MED。
3. 用于OSPF的BGP扩展community
要想让OSPF路由的特征能够穿越MPLS VPN骨干网络,需要额外定义一些BGP扩展community。
可以通过MP-BGP传递的OSPF特性包括:
∙路由类型
∙区域号
∙OSPF路由器ID
∙域ID
∙OSPF外部路由的度量值类型1或2
如下图:
如果OSPF路由类型为Type-1、Type-2、Type-3(且本地PE及远端PE OSPF进程号相同),则路由重发布进来后为LSA3。DomainID告诉远端PE路由器,通告的是否为一条外部OSPF路由。如果PE路由器所收到的路由的DomainID不能匹配特定VRF的OSPF进程ID的话,这条路由将会以一条OSPF外部路由也就是Type-5 LSA的形式通告,以提供对网络中不同OSPF进程之间重发布IP路由的支持。
如果DomainID能够匹配OSPF进程ID,该路由将以内部路由(Type-3 LSA)的形式通告。当然,如果两端PE的OSPF进程号相同,传递过来的路由又是内部路由,但是你又希望路由重发布到本地OSPF后以外部路由的形式注入,那么可以在PE路由器上修改DomainID。命令如下:
router ospf 1 vrf ABC
domain-id ?
修改之后,可使用show ip ospf 1来查看
4. OSPF网络设计
我们来考虑一下所有可能的情况:
我们分别来讨论这几个CASE:
∙OSPF网络设计 case1
∙OSPF网络设计 case2
∙OSPF网络设计 case3
这个实验就需要格外注意了。实验的结果是:
CE1这里过来的两条路由,1.1.1.0及1.1.2.0分别是内部及外部路由,这两条路由经过超级骨干到了PE2,PE2将OSPF路由重建,注入area2,那么CE2上能学习到1.1.1.0 的OIA路由及1.1.2.0的OE路由。实际上CE2的OSPF DATABASE里area2确实存在上述相关的LSA,但是CE2却不将这些LSA转进area0,虽然它是一台ABR。CE2此时的OSPF Database如下:
R5#show ip ospf database
OSPF Router with ID (5.5.5.5) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
5.5.5.5 5.5.5.5 268 0x80000001 0x00F801 1
Summary Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
10.1.45.0 5.5.5.5 263 0x80000001 0x007D72
// 没有为area0注入关于1.1.1.0的三类LSA
Summary ASB Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
44.44.44.44 5.5.5.5 263 0x80000001 0x00FE77
Router Link States (Area 2)
Link ID ADV Router Age Seq# Checksum Link count
5.5.5.5 5.5.5.5 262 0x80000007 0x007E0C 1
44.44.44.44 44.44.44.44 281 0x80000005 0x00DA77 1
Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
10.1.45.4 44.44.44.44 1427 0x80000002 0x00A1E5
Summary Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
1.1.1.0 44.44.44.44 58 0x80000001 0x00C442
5.5.5.0 5.5.5.5 265 0x80000001 0x0048D0
10.1.12.0 44.44.44.44 58 0x80000001 0x00CB28
Type-5 AS External Link States
Link ID ADV Router Age Seq# Checksum Tag
1.1.2.0 44.44.44.44 58 0x80000001 0x004CE3 34661162
另一方面,CE2的路由5.5.5.0,由于CE2是ABR,因此它将5.5.5.0的3类LSA注入area2,那么PE2就能学习到这个LSA,但是,却不装载进路由表,因为PE2认为自己是台ABR,OSPF要求3类LSA必须经过area0骨干区域来中转,然而这里PE2并没有与area0直连,因此5.5.5.0没有被装入路由表,自然CE1也就无法学习到。通过观察PE2的OSPF database可以一目了然:
PE2#sh ip os 1 da
OSPF Router with ID (44.44.44.44) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
44.44.44.44 44.44.44.44 142 0x80000001 0x0055 0
Summary Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
1.1.1.0 44.44.44.44 142 0x80000001 0x00C442
10.1.12.0 44.44.44.44 142 0x80000001 0x00CB28
10.1.45.0 44.44.44.44 138 0x80000001 0x00E66C
// 这里很关键,PE2并没有任何接口属于vrf OSPF进程,但是,database里却有area0,这是因为MPLS VPN中,PE充当ABR的角色,我们可以看到area0中有CE1发过来的路由的相关LSA,以及PE2与CE2直连网段LSA
Router Link States (Area 2)
Link ID ADV Router Age Seq# Checksum Link count
5.5.5.5 5.5.5.5 143 0x80000008 0x008602 1
44.44.44.44 44.44.44.44 134 0x80000006 0x00E26D 1
Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
10.1.45.5 5.5.5.5 143 0x80000001 0x00A281
Summary Net Link States (Area 2)
Link ID ADV Router Age Seq# Checksum
1.1.1.0 44.44.44.44 137 0x80000002 0x00C243
5.5.5.0 5.5.5.5 655 0x80000001 0x0048D0 //收到了3类LSA
10.1.12.0 44.44.44.44 137 0x80000002 0x00C929
Type-5 AS External Link States
Link ID ADV Router Age Seq# Checksum Tag
1.1.2.0 44.44.44.44 137 0x80000002 0x004AE4 34661162
找到了问题的原因,那么我们在PE2与CE2之间,通过area2建立个virtual-link,
这样,路由就都能学习到了。
总结:
∙MPLS VPN在OSPF长点之间存在一个超级骨干区域superbackbone,这当然不是一个OSPF区域,不过,它扮演了一个骨干区域的角色。
∙如果一个VRF的多个场点有一台PE在区域0中,那么这个area0被分割成了多块,通常来说被分割的骨干区域需要使用virtual-link来连接,但是在MPLS VPN中由于有iBGP来运载OSPF路由,因此不需要虚链路。OSPF路由会在PE路由器上重建。
∙PE路由器扮演了ABR的角色。它将type3 LSA通告给CE路由器,CE路由器可以在area0中,也可以在其他区域,但是如果一个场点拥有多个区域,PE路由器就必须在area0中,因为他们是ABR,如果他们不在area0中,就需要在PE上创建virtual-link来确保PE和area0的连接。
∙Routes from Area 0 at one site appear as interarea routes in Area 0 at another site
本文为原创博文,版权归属红茶三杯(http://blog.sina.com.cn/vinsoney),转载请注明出处。