关于Cisco MPLS VPN配置详解
一、VPN(Virtual Private Network)概述VPN:虚拟专用网
在公共的网络上构建一个虚拟的专用网络,使得处于2个不同位置的"私"网能够通过公共网络进行通信
示例1:
某个企业的2个站点,都接入到Internet,现在希望2个站点能够互通
GRE:(Generic Routing Encapsulation)
GRE能够将一种三层协议的报文封装到另一种三层协议的报文中进行传输
GRE是一种隧道能力极强的技术,但它的安全性较差,没有对数据做加密(IPSec则可以加密)
企业A站点1的PC1发出的数据:L2头+L3头(源IP地址192.168.1.X,目地IP地址192.168.2.X)
GRE将上述报文进行处理:
L2头+L3头'(源IP地址为的IP地址,目地IP地址为隧道目地端的IP地址)
+LS3(源IP地址192.168.1.X,目地IP地址192.168.2.X)
原理是将LS3部分当成数据部分,在外层加上L3'头,数据到达站点1的隧道源端(PE1)时,查找的目地IP
地址是站点2的的隧道目地IP地址(PE2)
PE1(s1/0)------(s1/0)P1(s1/1)-----(s1/1)P2(s1/2)-----(s1/2)PE2
隧道源端配置:
PE1(config)#int lo1
PE1(config-if)#ip add 192.168.1.1 255.255.255.0
PE1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
PE1(config)#int tunnel 0
PE1(config-if)#tunnel source 12.1.1.1
PE1(config-if)#tunnel destination 34.1.1.4
PE1(config-if)#ip add 192.168.3.1 255.255.255.0
PE1(config)#router rip
PE1(config-router)#no auto-summary
PE1(config-router)#net 192.168.1.0
PE1(config-router)#net 192.168.3.0
隧道目地端配置:
PE2(config)#int lo1
PE2(config-if)#ip add 192.168.2.1 255.255.255.0
PE2(config)#ip route 0.0.0.0 0.0.0.0 34.1.1.3
PE2(config)#int tunnel 0
PE2(config-if)#tunnel source 34.1.1.4
PE2(config-if)#tunnel destination 12.1.1.1
PE2(config-if)#ip add 192.168.3.2 255.255.255.0
PE1(config)#router rip
PE1(config-router)#no auto-summary
PE1(config-router)#net 192.168.2.0
PE1(config-router)#net 192.168.3.0
二、MPLS VPN
1、应用场景
a)ISP部署,企业用户用此技术来实现不同站点的互联
b)很多行业的网络通常也会使用MPLS vpn,方便的实现业务隔离
2、术语
1)CE:用户边缘设备
位于私网中的一个设备
2)PE:提供商边缘设备(Provider Edge)
位于私网和公网边界的设备
3)P:提供商设备(Provider)
位于公网的设备
3、MPLS VPN中需要解决那些问题才能实现VPN功能?
1)PE设备可以下挂多个不同用户的CE,这些不同用户的IP地址空间可能是相同的;
引入VRF概念(VPN Routing&Forwarding,VPN路由转发表);
在引入VRF之前,一台路由器有1张路由表(通常称为全局路由表)
在引入VRF之后,一台路由器有N+1张路由表(其中1为全局路由表,而N为N个VPN分别对应的VRF路由表)
PE1(config)#ip vrf VPN_A
PE1(config-vrf)#rd 100:1
PE1(config)#ip vrf VPN_B
PE1(config-vrf)#rd 200:1
show ip route 查看全局路由表
show ip route vrf VPN_A 查看VPN_A对应的路由表
show ip route vrf VPN_B 查看VPN_B对应的路由表
2)PE设备间如何通告私网路由?
采用的是BGP协议,直接在PE设备间传递私网路由信息,而P设备不参与私网路由的学习;
由于不同私网路由用户使用的IP地址空间可能相同,因此BGP在通告时无法把它们都通告出去,
因此必须对这些私网路由进行改造
需要将私网路由的IPv4路由改造为全局唯一的VPNv4路由
私网路由的IPv4路由:192.68.1.0/24
添加RD字段后改造为VPNv4路由:100:1 192.168.1.0/24
RD的唯一作用是将私网的IPv4路由改造为全局唯一的VPNv4路由
在这里,BGP负责通告的是VPNv4路由,而不是IPv4路由,因此必须让BGP支持VPNv4路由,此种
BGP称为MP-BGP(MultiProtocol BGP);MP-BGP能够支持IPv4、IPv6和VPNv4路由的通告
3)PE设备收到来自对端PE发来的VPNv4路由后,如何写入路由表?
由于PE上存在N+1张路由表,到底写入哪张路由表?
注意:在BGP/MPLS VPN中,不同站点是否能够互通取决于它们之间的路由是否能够学习到
控制私网路由的学习使用了另一个参数RT(Route-Target)
ip vrf VPN_A
rd 100:1
route-target import 110:1
route-target export 110:2
其中rd为100:1表示此VPN的IPv4路由会添加100:1改造为VPNv4路由;
route-target export 110:2表示该VPNv4路由将携带一个110:2的RT属性(团体扩展属性)
route-target import 110:1表示对端携带的export RT属性是否等于我的import RT属性,
相等则接收,不相等则不接收
以上都是在描述私网路由的通告和学习过程,和MPLS还没有任何关系
4)由于P设备没有参与私网路由的学习,因此私网报文从PE通过公网的P设备时,存在路由黑洞的问题;
解决办法:公网部分启用MPLS(公网标签)
5)目标方PE收到私网数据后,如何判断该数据是属于哪个VRF的,应该往哪个VRF对应的接口转发?
解决办法:在PE设备通告每一条私网路由时,会为它分配一个标签(私网标签)
私网标签:只有PE设备知道,是由MP-BGP来分配
公网标签:P、PE设备知道,是由公网的LDP来分配
4、MPLS VPN排障基本思路
学习MPLS VPN要把路由的通告、学习与报文的IP转发分开
MPLS VPN不通
1)先查私网路由表
show ip route vrf VPN_A
show ip cef vrf VPN_A
2)若没有私网路由,则
a)检查MP-BGP邻居是否正常建立
(若未正常建立,检查MP-BGP的邻居设置,或者检查公网的连通性)
show ip bgp summary 查看BGP的通告IPv4路由的邻居
show ip bgp vpnv4 all summary查看BGP的通告VPNv4路由的邻居
注: show ip bgp summary有建立邻居关系,show ip bgp vpnv4 all summary没有建立邻居关系?
有可能是一端没有激活通告vpnv4路由的配置
b)本端是否正确通告
network或者重发布
c)对端是否正确学习
检查本端的RT export和对端的RT import是否匹配
3)如果私网路由学习到了,则:
a)检查公网标签是否正确
show mpls forwarding-table 检查MPLS转发表
show mpls ldp neighbor 检查LDP的邻居是否建立
show ip cef vrf VPN_A x.x.x.x 检查私网路由表VPN_A中关于x.x.x.x路由的下一条以及标签的情况{19,18} 外层19表示公网标签,里面18表示私网标签
三、MPLS VPN配置
1)CE设备
只需要配置普通的IP路由协议即可
2)P设备
a)需要配置公网部分的IGP(例如OSPF或ISIS)
b)配置MPLS
3)PE设备
3.1)配置公网部分IGP,实现公网的连通性
router ospf 1 或者eigrp 或isis都可以
通过此部分的配置,实现公网网络的连通性
建议测试:测试将来用于建立MP-BGP邻居的Loopback接口的互通
ping 100.1.1.2 source 100.1.1.1(假设PE的Loopback地址为100.1.1.1和100.1.1.2)
注:PE设备的Loopback接口IP地址强烈建议配置为/32.
3.2)公网部分配置MPLS
把公网的路由器(PE和P)之间互联的接口启用MPLS即可
int s1/0
mpls ip
3.3)创建VRP并绑定接口
规划RD/RT等参数
三个站点VPN_A/VPN_B/VPN_C
VPN_A
RD 100:1
RT import 100:1
RT export 100:1
RT ixport 300:1
VPN_B
RD 200:1
RT import 200:1
RT export 200:1
RT import 300:1
VPN_C
RD 300:1
RT import 300:1
RT export 300:1
RT import 100:1
RT import 200:1
结果:VPN_A和VPN_C可以互通,VPN_B和VPN_C可以互通
PE1(config)#ip vrf VPN_A
PE1(config-vrf)#rd 100:1
PE1(config-vrf)#route-target import 100:1
PE1(config-vrf)#route-target export 100:1
PE1(config)#int s1/0
PE1(config-if)#description to_VPN_A的CE设备
PE1(config-if)#ip vrf forwarding VPN_A
PE1(config-if)#ip address 192.168.1.1 255.255.255.0
3.4)配置PE与CE的路由协议或静态路由
a)使用静态路由配置
PE1(config)#ip route vrf VPN_A 192.168.3.0 255.255.255.0 192.168.1.2
b)使用RIP
PE1(config)#router rip
PE1(config-router)#address-family ipv4 vrf VPN_A
PE1(config-router-af)#network 192.168.1.0
PE1(config-router-af)#redistribute bgp 100 metric 5 | transparent ----如果加transparent参数则重发布到RIP时事透明的,即从BGP传递过来是几跳到RIP中也是几跳
注:MP-BGP在传递RIP学习到的私网路由时,只是简单的吧metric透明传递,没有做特殊处理
c)使用EIGRP
一个站点的VPN私网路由通过MP-BGP传递时,会在BGP的属性中携带EIGRP路由的参数,例如EIGRP的AS号,bw/delay等,
这样可以实现不同站点的VPN网络通过MPLS VPN网络透明的构建用户私有的网络
如果2个站点的EIGRP使用相同的AS号,那么不同站点间将会学习到D的路由(即EIGRP的内部路由);
如果不同站点使用不同的EIGRP AS号,则学习到的将是EIGRP外部路由(D EX);
PE1(config)#router eigrp 1 此处的AS 1 并不是与CE交互使用的AS号
PE1(config-router)#address-family ipv4 vrf VPN_A
PE1(config-router-af)#autonomous-system 100 此处的100才是跟CE交互使用的AS号
PE1(config-router-af)#network 192.168.1.0 0.0.0.255
PE1(config-router-af)#no auto-summary
PE1(config-router-af)#redistribute bgp 100 metric 10000 100 255 1 1500
d)使用OSPF
CE端:
router ospf 1
network x.x.x.x
PE端:
router ospf 1 vrf VPN_A
network x.x.x.x
redistribute bgp 100 subnets----将对端PE通过BGP传递过来的路由重发布到OSPF中,让CE端能够通过OSPF学习到对端的私网路由
在MP-BGP传递私网的OSPF路由(区域内或区域间)时,将使用LSA Type 3来传递
在MP-BGP传递私网的OSPF路由(外部路由)时,还是使用LSA Type 5来传递
PE1、PE2的sham-link配置:
1)sham-link建立必须在PE1和PE2上分别创建一个Loopback接口(/32)并且该Loopback接口是绑定到VRF的
PE1(config)#int lo2
PE1(config-if)#ip vrf forwarding VPN_A
PE1(config-if)#ip add 100.1.1.3 255.255.255.255
2)该Loopback接口的地址必须通过MP-BGP来通告,不可以通过OSPF通告(因此要特别注意在PE-CE启用OSPF通告路由是不要写成network 0.0.0.0 255.255.255.255,否则建立的sham-link会一直翻动)
PE1(config)#router bgp 100
PE1(config-router)#address-family ipv4 vrf VPN_A
PE1(config-router-af)#net 100.1.1.3 mask 255.255.255.255
3)配置2端的PE设备,建立sham-link
PE1(config)#area 1 sham-link 100.1.1.3 100.1.1.4------100.1.1.4表示PE2端的lo2地址,PE2端的配置跟PE1的一样
show ip ospf sham-link 看到的邻接状态是full
show ip ospf database 可以看到LSA Type 1已经有CE1、PE1、PE2、CE2
3.5)配置MP-BGP
PE1(config)#router bgp 100
PE1(config-router)#neighbor 100.1.1.2 remote-as 100
PE1(config-router)#neighbor 100.1.1.2 update-source loopback 1
注:华为设备并不会为所有路由分配标签,只会为/32位loopback分配标签,强烈建议把换loopback配置/32位
上述配置建立的BGP邻居仅仅能通告IPv4路由
PE1(config-router)#address-family vpnv4 ---进入到VPNv4地址组
PE1(config-router-af)#neighbor 100.1.1.2 activate ---激活能够通告VPNv4路由能力
PE1(config-router)#address-family ipv4 vrf VPN_A
PE1(config-router-af)#redistribute ospf 2 vrf VPN_A ---通告vpnv4路由
注:将OSPF路由重发布到BGP中默认只发布LSA Type 1和LSA Type 3,如果要发布5类的和7类的要在后面加match参数,如下:
PE1(config-router-af)#redistribute ospf 2 vrf VPN_A match internal external nssa-external
问题:
PE1(s1/0)---(s1/0)P(s1/1)-----(s1/1)PE2
拓扑图如上,如果PE1用s1/0(12.1.1.1)与PE2用s1/1(12.1.1.6)建立邻居,是否可行?
如果两端用物理接口建立邻居,则P发送给PE1的路由12.1.16标签的下一条为pop tag,所以数据到达P后没有公网标签就被丢弃了,这里就考虑了倒数第二跳问题
因此才建议用两端的loopback建立邻居
PE(config)#router bgp 100
PE(config-router)#neighbor 100.1.1.2 remote-as 100
PE(config-router)#neighbor 100.1.1.2 update-source loopback 1
neighbor 100.1.1.2 route-reflector-client
注意:此处的100.1.1.2是作为IPv4路由的反射器客户端
address-family vpnv4
neighbor 100.1.1.2 activate
neighbor 100.1.1.2 route-reflector-client
注意:此处的100.1.1.2是作为VPNv4路由的反射器客户端
四、MPLS VPN 排错命令
show ip route vrf VPN_A
show ip cef vrf VPN_A
show ip bgp summary
show ip bgp vpnv4 all summary 查看BGP中关于VPNv4路由的信息
show ip bgp vpnv4 all 查看BGP中关于VPNv4路由的信息
show ip bgp vpnv4 all labels查看BGP私网路由对应的标签
show mpls forwarding-table
show mpls ldp neighbor
show mpls interface 哪些接口启用了MPLS
show ip cef vrf VPN_A
show ip vrf
ping vrf VPN_A 192.168.3.1
{:6_267:} {:6_267:}{:6_267:} {:6_267:}{:6_290:} {:6_267:}{:6_267:}{:6_267:} hen hao 我很喜欢 好东西就应该大家分享 顶一个,学习 {:6_267:}{:6_267:} 学习啦{:6_264:} 多谢分享!! lz配置讲的好,学习了 谢谢大师分享 谢谢楼主 谢谢分享 谢谢楼主 讲得很好谢谢分享