MPLS VPN 配置实例

MPLS VPN是一种Peer-to-Peer VPN,主要由ISP提供服务。
对于客户来说配置少,安全性高,而且支持的扩展多,比如QoS等等。
本文利用BGP/MPLS VPN的体系简单做一个配置实例,同时利用三种IGP(RIP,EIGRP,OSPF),和BGP来做演示。
包含了IGP,BGP,MPLS VPN的完整拓扑和所有配置。


每个路由器的IP地址配置省略,先从IGP的配置开始。
预备知识:
MPLS VPN有三种类型的路由器,CE路由器、PE路由器和P路由器。
CE路由器是客户端路由器(R4,R5,R6,R7),为用户提供到PE路由器的连接;
PE路由器是运营商边缘路由器(R2,R3),也就是MPLS网络中的标签边缘路由器(LER),它根据存放的路由信息将来自CE路由器或标签交换路径(LSP)的VPN数据处理后进行转发,同时负责和其他PE路由器交换路由信息;
P路由器是运营商网络主干路由器(R1),也就是MPLS网络中的标签交换路由器(LSR),它根据分组的外层标签对VPN数据进行透明转发,P路由器只维护到PE路由器的路由信息而不维护VPN相关的路由信息。
提示:PE连接CE的端口IP先不用配置,若先配置了也需要在后期重新配。

拓扑如下:

mpls

开始,先在所有路由器启用IGP:

R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#no auto-summary
R1(config-router)#network 1.0.0.0
R1(config-router)#network 12.0.0.0
R1(config-router)#network 13.0.0.0
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#no auto-summary
R2(config-router)#network 2.0.0.0
R2(config-router)#network 12.0.0.0
R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#no auto-summary
R3(config-router)#network 3.0.0.0
R3(config-router)#network 13.0.0.0
R5(config)#router rip
R5(config-router)#version 2
R5(config-router)#no auto-summary
R5(config-router)#network 5.0.0.0
R6(config)#router eigrp 90
R6(config-router)#no auto-summary
R6(config-router)#network 6.6.6.6 0.0.0.0
R7(config)#router ospf 110
R7(config-router)#router-id 7.7.7.7
R7(config-router)#network 7.7.7.7 0.0.0.0 area 0

先在P,PE路由器上启用CEF功能和MPLS功能

R1(config)#ip cef
R1(config)#int fa0/0
R1(config-if)#mpls ip
R1(config)#int fa0/1
R1(config-if)#mpls ip
R1(config)#mpls ldp router-id loopback 0 force
R2(config)#ip cef
R2(config)#int fa0/0
R2(config-if)#mpls ip
R2(config)#mpls ldp router-id loopback 0 force
R3(config)#ip cef
R3(config)#int fa0/0
R3(config-if)#mpls ip
R3(config)#mpls ldp router-id loopback 0 force

先做公司A的VRF:

R2(config)#ip vrf A
R2(config-vrf)#rd 10:10
R2(config-vrf)#route-target 10:10
R2(config)#int s1/0
R2(config-if)#ip vrf forwarding A
R2(config-if)#ip add 24.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R3(config)#ip vrf A
R3(config-vrf)#rd 10:10
R3(config-vrf)#route-target 10:10
R3(config)#int s1/0
R3(config-if)#ip vrf forwarding A
R3(config-if)#ip add 35.1.1.3 255.255.255.0
R3(config-if)#no shutdown

公共的BGP部分:

R2(config)#router bgp 1
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#no auto-summary
R2(config-router)#no synchronization
R2(config-router)#no bgp default ipv4-unicast
R2(config-router)#neighbor 3.3.3.3 remote-as 1
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0
R2(config-router)#address-family vpnv4
R2(config-router-af)#neighbor 3.3.3.3 activate
R2(config-router-af)#neighbor 3.3.3.3 send-community both  //使路由条目带上团体属性
R3(config)#router bgp 1
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#no auto-summary
R3(config-router)#no synchronization
R3(config-router)#no bgp default ipv4-unicast
R3(config-router)#neighbor 2.2.2.2 remote-as 1
R3(config-router)#neighbor 2.2.2.2 update-source loopback 0
R3(config-router)#address-family vpnv4
R3(config-router-af)#neighbor 2.2.2.2 activate
R3(config-router-af)#neighbor 2.2.2.2 send-community both  //使路由条目带上团体属性

开始传路由,R2先把R4的路由学习过来:

R2(config)#ip route vrf A 4.4.4.0 255.255.255.0 serial 1/0 24.1.1.4  //由于R4这边做静态,所以先做一条静态路由
R2(config)#router bgp 1                                              //然后在R2的BGP中通告这条静态路由,这样R3才能收到
R2(config-router)#address-family ipv4 vrf A
R2(config-router-af)#network 4.4.4.0 mask 255.255.255.0

接下来是R3和R5的RIP建立邻接关系:

R3(config)#router rip                                                
R3(config-router)#address-family ipv4 vrf A
R3(config-router-af)#network 35.0.0.0
R5(config)#router rip
R5(config-router)#network 35.0.0.0

然后在R3上把从R2传来的BGP路由重分发进RIP,这样R5才能收到:

R3(config)#router rip                                               
R3(config-router)#address-family ipv4 vrf A
R3(config-router-af)#redistribute bgp 1 metric transparent          //保留原来的metric

这样公司A的一个方向的配置就做好了,在R5上看看路由表
R5#show ip route
35.0.0.0/24 is subnetted, 1 subnets
C 35.1.1.0 is directly connected, Serial1/0
4.0.0.0/24 is subnetted, 1 subnets
R 4.4.4.0 [120/1] via 35.1.1.3, 00:00:12, Serial1/0 //学到R4的路由
5.0.0.0/24 is subnetted, 1 subnets
C 5.5.5.0 is directly connected, Loopback0

现在要做的就是反方向:

先在R3上把R5传来的RIP路由重分发到BGP中传给R2:

R3(config)#router bgp 1                                         
R3(config-router)#address-family ipv4 vrf A
R3(config-router-af)#redistribute rip metric 10

R4到R2做的是静态(从R2到R4前面已经做好了)只要在R4上做到R5的静态:

R4(config)#ip route 5.5.5.0 255.255.255.0 serial 1/0 24.1.1.2

现在测试一下:
R4#ping 5.5.5.5 source 4.4.4.4
Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
Packet sent with a source address of 4.4.4.4
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 76/85/96 ms

R5#ping 4.4.4.4 source 5.5.5.5
Sending 5, 100-byte ICMP Echos to 4.4.4.4, timeout is 2 seconds:
Packet sent with a source address of 5.5.5.5
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/75/104 ms

接下来做公司B,先从左往右配置:

先做B公司的VRF:

R2(config)#ip vrf B
R2(config-vrf)#rd 20:20
R2(config-vrf)#route-target 20:20
R2(config)#int s1/1
R2(config-if)#ip vrf forwarding B
R2(config-if)#ip address 26.1.1.2 255.255.255.0
R2(config-if)#no shutdown
R3(config)#ip vrf B
R3(config-vrf)#rd 20:20
R3(config-vrf)#route-target 20:20
R3(config)#int s1/1
R3(config-if)#ip vrf forwarding B
R3(config-if)#ip address 37.1.1.3 255.255.255.0
R3(config-if)#no shutdown

在R2上配置EIGRP,并与R6建立邻接关系:

R2(config)#router eigrp 90
R2(config-router)#no auto-summary
R2(config-router)#address-family ipv4 vrf B
R2(config-router-af)#network 26.1.1.2 0.0.0.0
R2(config-router-af)#autonomous-system 90                      //如果不在VRF里面指定这个,EIGRP邻接关系无法建立
R6(config)#router eigrp 90
R6(config-router)#network 26.1.1.6 0.0.0.0

然后在R2把EIRGP重分发进BGP里传给R3:

R2(config)#router bgp 1
R2(config-router)#address-family ipv4 vrf B
R2(config-router-af)#redistribute eigrp 90 metric 10

在R3上配置OSPF并与R7建立邻接关系:

R3(config)#router ospf 110 vrf B
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 37.1.1.3 0.0.0.0 area 0
R7(config)#router ospf 110
R7(config-router)#network 37.1.1.7 0.0.0.0 area 0

然后在R3上把从R2传来的BGP路由重分发进OSPF,这样R7才能收到:

R3(config)#router ospf 110 vrf B
R3(config-router)#redistribute bgp 1 subnets

现在R7上可以看到R6传来的路由了:
R7#show ip route
6.0.0.0/24 is subnetted, 1 subnets
O E2 6.6.6.0 [110/10] via 37.1.1.3, 00:02:35, Serial1/1 //学到R6的路由
37.0.0.0/24 is subnetted, 1 subnets
C 37.1.1.0 is directly connected, Serial1/1
7.0.0.0/24 is subnetted, 1 subnets
C 7.7.7.0 is directly connected, Loopback0
26.0.0.0/24 is subnetted, 1 subnets
O E2 26.1.1.0 [110/1] via 37.1.1.3, 00:02:35, Serial1/1 //学到26网段的路由

剩下要做的还是反方向:

先在R3上把R7的OSPF重分发进BGP传给R2:

R3(config)#router bgp 1
R3(config-router)#address-family ipv4 vrf B
R3(config-router-af)#redistribute ospf 110 vrf B match internal external 1 external 2

接着在R2上把BGP路由重分发进EIGRP:

R2(config)#router eigrp 90
R2(config-router)#address-family ipv4 vrf B
R2(config-router)#redistribute bgp 1 metric 10000 100 255 1 1500

然后看一下R6的路由表:
R6#show ip route
6.0.0.0/24 is subnetted, 1 subnets
C 6.6.6.0 is directly connected, Loopback0
37.0.0.0/24 is subnetted, 1 subnets
D EX 37.1.1.0 [170/2195456] via 26.1.1.2, 00:02:35, Serial1/1 //学到了37网段的路由
7.0.0.0/32 is subnetted, 1 subnets
D EX 7.7.7.7 [170/2195456] via 26.1.1.2, 00:02:35, Serial1/1 //学到了R7的路由
26.0.0.0/24 is subnetted, 1 subnets
C 26.1.1.0 is directly connected, Serial1/1

最后测试一下:
R6#ping 7.7.7.7 source 6.6.6.6
Sending 5, 100-byte ICMP Echos to 7.7.7.7, timeout is 2 seconds:
Packet sent with a source address of 6.6.6.6
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 68/85/104 ms

R7#ping 6.6.6.6 source 7.7.7.7
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
Packet sent with a source address of 7.7.7.7
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/76/88 ms

GNS3 的拓扑和路由器配置文件 :点击下载