一、预习:
BGP/MPLS IP VPN 是多种技术结合的综合解决方案,一般由运营商搭建,VPN用户购买VPN服务来实现用户网络之间的路由传递、数据互通等。
MPLS VPN使用BGP在运营商骨干网上发布VPN路由,使用MPLS在运营商骨干网上转发VPN报文。BGP/MPLS IP VPN又被简称为MPLS VPN,是一种常见的 Layer 3 VPN技术。
MPLS vpn应用场景:LDP广泛应用在VPN服务器上,具有组网简单、配置简单、支持基于路由动态建立 LSP、支持大容量LSP等优点
为什么选择mpls vpn:
对于vpn客户来说,不感知vpn的存在,不需要部署和维护VPN,降低企业运维难度和成本; 一般部署在运营商的MPLS VPN专网上,有一定的安全保障
对运营商而言:MPLS在无连接的IP网络中增加了面对连接的控制平面,为IP网络增加了管理和运营手段;支持地址空间重叠;组网方式灵活、可扩展性好;能够方便地支持MPLS TE合理调控现有网络资源,最大化节省运营商成本
MPLS vpn常见组网 :
根据VPN用户的需求不同,可采用以下常见组网方案
1、Intranet:一个vpn中的所有用户形成闭合用户群,同一vpn站点之间可以互访,不同vpn站点不能互访
2、Extranet:适用于一个vpn用户希望提供部分本vpn的站点资源 给其他vpn的用户访问的场景
3、Hub&Spoke:如果希望在vpn中设置中心访问控制设备,其他用户的互访都通过中心访问控制设备进行,可采用Hub&Spoke组网方案(Hub和Spoke类似于FrameRelay概念,分部要访问其他分部,必须要经过Hub)
主要包含以下技术:
a. MP-BGP:负责在PE和PE之间传递站点内的路由信息;
b. LDP:负责PE与PE之间隧道建立 ;
c. VRF:Virtual Routing Forwarding负责PE的VPN用户管理,vpn-instance相同的概念,区分路由表的
d. 静态路由、IGP、BGP:负责PE与CE之间的路由信息交换
VRF:Virtual Routing and Forwarding,虚拟路由及转发,又称为vpn-instance,是mpls vpn中的关键技术,每个vpn实例使用独立的路由转发表,实现vpn之间的逻辑隔离来解决(路由冲突问题);一台设备,如PE,由于可能同时连接了多个用户,这些用户(的路由彼此间需要隔离,那么这时候就用到了VRF。设备除了维护全局IP路由表之外,还要为每个VRF维护一张独立的IP路由表,称为VRF路由表,它们之间相互隔离。
对于每个VRF表,都有RD和RT两大属性:
RD:Route Distinguisher路由区分符,用来区分本地VRF,该属性仅本地有效。8个字节的RD+4个字节的IPV4地址组成96位VPNv4路由,使不唯一的IPv4地址转化为唯一的VPN-v4地址,该VPNv4路由在ISP域内传递(区分),进而实现地址复用而不冲突
RT:Route Target,是BGP的扩展团体属性,它分为Import RT和Export RT,分别用于路由的导入、导出策略
通过配置Import和Export RT来控制和收发路由
当从VRF表中导出路由时,要用Export RT 对VRF路由进行标记
当往VRF表中导入路由时,只有所带RT标记与该VRF表中任意一个Import RT相符的路由才会被导入到VRF表中
VPN-IPv4地址:又被称为vpnv4地址:共12字节,由8字节的RD和4字节的ipv4地址前缀构成
MP-BGP采用地址簇来区分不同的网络层协议,既可支持传统的IPV4,又可支持其它地址族(如vpn-v4地址族、IPv6地址族等)
MP-BGP新增了两种路径属性:
MP_Reach-NLRI:Multiprotocol Reachable NLRI,多协议可达nlri,用于发布可达 路由及下一跳信息
MP_UNREACH_NLRI: Mpltiprotocol Unreachable NLRI,多协议不可达NLRI,用于撤销不可达路由
入口PE到出口PE的路由传递:
MP-BGP将VPNv4传递到对端PE之后,远端PE需要将VPNv4路由导入正确的VPN实例
MPLS VPN使用BGP扩展团体属性:VPN Target,也称RT来控制 VPN路由信息的发布与接收
本地PE在发布VPNv4路由前附上RT属性,对端PE在接到VPN如果路由后根据RT将路由导入对应的VPN实例
MP-BGP:为了正确处理VPN路由,MPLS vpn使用RFC2858中规定的MP-BGP,即BGP-4的多协议扩展;负责在PE和PE之间传递站点内的路由信息
MPLS vpn路由发布概述:
若要实现同一个vpn的不同站点之间的通信,首先要完成不同站点之间的路由交互。在基本mpls vpn组网 中,vpn发布涉及CE和PE,P路由器只维护骨干网的路由,不需要了解 任何vpn路由信息。vpn路由信息的发布过程包括3部分:
1、本地CE-->入口PE
2、入口PE -->出口PE
3、出口PE-- >远端 CE
控制层面的需要解决三个问题:
1、解决共享PE客户路由冲突 -- >用VRF解决
2、解决RR和远端PE无法区分相同的路由(来自于不同的VRF)-->用VPNv4路由来区分,数据到达PE进入相应的VRF ; (IPv4(32)+RD(64)= VPNv4)
用BGP传递VPNv4路由,BGP增加MP-Reach-NLRI(网络层可达性信息,可选非过渡属性);MP_Unreach_NLRI
3、解决对端PE如何区分不同的RD?让相应的vpnv4路由进入不同的VRF? --> 用RT区别
常用命令:
dis curr con vpn
dis bgp vpnv4 vpn-instance vpna routing-table //查看bgp vpnv4 vpn实例的路由表
dis ip routing-table vpn-instance vpna //查看vpna实例的路由表
dis fib vpn-instance vpna //查看vpna的转发表
dis current-configuration configuration bgp //查看当前bgp配置
dis fib vpn-instance vpna 172.1.1.1 //查vpna的转发表,看到隧道标签非0,说明需要进隧道
dis mpls lsp include 5.5.5.5 32 verbose //看到两层隧道标签,压一个标签1,是bgp的vpnv4分的,然后还有一个ldp隧道标签,再压入标签2
apply-label per-instance //应用在vpn实例下,表示一个vpn实例用一个标签,用于节省标签
reset mpls ldp //重启mpls
tracert -v -a 192.168.1.1 172.16.1.1 //带源tracert对端
undo default ipv4-unicast //禁止建默认的ipv4单播路由
二、拓朴图:
1、配置PE、P、CE设备的IP
CE1: int G0/0/0
ip addr 10.1.1.1 24
int lo0
ip addr 11.11.11.11
CE2: int G0/0/0
ip addr 10.1.1.1 24
int lo0
ip addr 22.22.22.22
CE3: ip addr 172.1.1.1
int lo0
ip addr 33.33.33.33
CE4: ip addr 172.1.1.1
int lo0
ip addr 44.44.44.44
PE1: int lo0
ip addr 1.1.1.1 32
int G0/0/0
ip addr 12.1.1.1 24
int G0/0/1
ip addr 10.1.1.2 24
int G0/0/2
ip addr 10.1.1.2 24
P: int lo0
ip addr 2.2.2.2 32
int G0/0/0
ip addr 12.1.1.2 24
int G0/0/1
ip addr 23.1.1.2 24
PE2: int lo0
ip addr 5.5.5.5 32
int G0/0/0
ip addr 23.1.1.3 24
int G0/0/1
ip addr 172.1.1.1 24
int G0/0/2
ip addr 172.1.1.1 24
2、配置MPLS域内跑一个IGP协议,如IS-IS
PE1: isis
network-entity 49.0123.1111.1111.1111.00
is-level level-2
int G0/0/0
isis enable
isis circuit-type p2p
int lo0
isis enable
P: isis
network-entity 49.0123.2222.2222.2222.00
is-level level-2
PE2: isis
isisi-entity 49.0123.3333.3333.3333.00
is-level level-2
dis isis peer
dis isis lsdb
dis isis routing-table
测试:带源ping一下对端、远端
3、MPLS域内起ldp:
ping -vpn-instance vpna 10.1.1.1
PE1: mpls lsr-id 1.1.1.1
mpls
mpls ldp
int G0/0/0
mpls
mpls ldp
P: mpls lsr-id 2.2.2.2
mpls
mpls ldp
int G0/0/0
mpls
mpls ldp
int G0/0/1
mpls
mpls ldp
PE2: mpls lsr-id 5.5.5.5
int G0/0/0
mpls
mpls ldp dis mpls
dis mpls ldp session
dis mpls lsp
4、PE路由器起BGP,用于传递CE端的路由(至此运营商已经完成了内部路径的走通):
PE1: bgp 100
router-id 1.1.1.1
peer 5.5.5.5 as-number 100
peer 5.5.5.5 connect-interface lo 0
ipv4-family vpnv4 //起vpnv4地址族,这里解决控制层面第二个问题:用vpnv4在运营商间传递vpnv4路由
peer 5.5.5.5 enable
PE2: bgp 100
router-id 5.5.5.5
peer 1.1.1.1 as 100
peer 1.1.1.1 con lo 0
ipv4-family vpnv4 //起vpnv4地址族
peer 1.1.1.1 enable
dis bgp vpnv4 all peer
5、两端的PE起绑定两个客户的vpn实例,并绑定不同客户的CE路由器与本端的接口上
(这一步是PE与CE建立了连接,相当是运营商为节省资源,使用了vrf技术):
PE1:
ip vpn-instance vpna //这里解决控制层面第一个问题:用vpn实例区分不同的用户
route-distinguisher 1:1 //给RD值 ,便于本端区分
vpn-target 10:10 both //这里解决控制层面第三个问题:给BGP的扩展团体属性,在vpn实例间导入导出,使对端区分不同的RT值
int G0/0/1
ip binding vpn-instance vpna //这里绑定前先看下原来配置的IP,否则绑定后IP消失
ip addr 10.1.1.2 24 //绑定vpn-instance后,重新配上原来的IP
#
ip vpn-instance vpnb
route-distinguisher 2:2 //给RD值
vpn-target 20:20 both //给RT值
int G0/0/2
ip binding vpn-instance vpnb
ip addr 10.1.1.2 24
dis ip routing-table vpn-instance vpna | vpnb //查看各个vpn实例路由表,在公众路由器表下是找不到vpn实例里的路由的
ping -vpn-instance vpna 10.1.1.1 //因为接口已经绑定了vpn实例,这时我们用它ping CE1的IP,由于是直连,所以能ping通
同样配置PE2,对端的RT值 必须 一致,否则不能引入
6、PE和CE之间起IGP,如ospf(这一步是为了让CE端的路由和PE路由互通):
注意这里的ospf在PE端是要起在vpn实例下的,不是全局的!CE端不使用VRF,可以起全局的ospf
CE1: ospf 10 router-id 11.11.11.11
area 0
network 10.1.1.1 0.0.0.0
network 11.11.11.11
PE1: ospf 10 router-id 1.1.1.1 vpn-instance vpna
area 0
network 10.1.1.2 0.0.0.0
dis ospf brief
#
ospf 20 router-id 1.1.1.1 vpn-instance vpnb
area 0
network 10.1.1.2 0.0.0.0
CE3: ospf 20 route-id 33.33.33.33
area 0
network 172.1.1.1 0.0.0.0
network 33.33.33.33 0.0.0.0
同样,起PE2、CE2和CE4,做客户B的双向引入
dis ospf peer brief
7、 做CE路由器和PE设备的双向路由引入:(这一步是为了让PE在不同的路由协议之间进行转发)
PE1:BGP引入 到OSPF :
ospf 10
import-route bgp
ospf 20
import-route bgp
dis bgp vpnv4 all routing-table
PE1:OSPF引入 到BGP:
bgp 100
ipv4-family vpn-instance vpna
import-route ospf 10
quit
ipv4-family vpn-instance vpnb
import-route ospf 20
dis curr con ospf
同样在PE2上做双向引入
dis bgp vpnv4 vpn-instance vpna routing-table
dis bgp vpnv4 vpn-instance vpnb routing-table
三、测试:
1、分别用CE1 ping 对端CE3、CE2 ping CE4的地址,如果环回口未引入,就不要ping了:
ping -vpn-instance vpna 172.1.1.1
抓包查看:在mpls隧道中会看到两层标签:
栈顶:LDP 标签是ibgp分的,用于传输,也称递送标签
栈底:VPNv4是bgp分的,进vrf用的,也称乘客标签
2、再测试一下:改变CE3的IP地址为192.168.1.1,PE改192.168.1.2,OSPF里再发布,等full以后,再从CE1 ping CE3的新ip,发现仍然通的,至此已经完成测试