MPLS---静态配置
构建静态LSP:
1、保证路由条件---静态只需要边界设备拥有来回路由信息即可
2、配置LSR
入站LSR
1、给LSR配置LSR-ID--- 32位二进制构成,都是按照IP地址格式来写,但是,只能手动配置
[r1]mpls lsr-id 1.1.1.1
2、激活MPLS
1、全局激活MPLS
[r1]mpls
2、接口激活MPLS----所有需要参与MPLS数据收发的接口都需要激活
[r1-GigabitEthernet0/0/0]mplsr
3、构建静态的LSP
1、配置入栈LSR:
[r1]static-lsp ingress 1to4 destination 4.4.4.0 24 nexthop 12.0.0.2 out-label 1000
1、下一跳---必须和路由表中的下一跳相同
2、out-label ---出站标签---下一跳设备接受后需要根据这个标签判断数据到达那个网段。
2、配置中转LSR:
[r2]static-lsp transit 1to4 incoming-interface GigabitEthernet 0/0/0 in-label 1000 nexthop 23.0.0.2 out-label1001
1、in-label --- 入站标签---入站标签必须和上一跳配置的出战标签相同
3、配置出栈LSR:
[r4]static-lsp egress 1to4 incoming-interface GigabitEthernet 0/o/o in-label 1002
[r1]display mpls static-Isp ---查看静态LSP
LDB协议---标签分发协议----主要应用在MPLS的控制层面
MPLS控制层面需要完成的工作主要就是分配标签和传递标签。分配标签的前提是本地路由表中得先存在标签,传递标签的前提也是得先具有路由基础。所以,LDB想要正常工作,写需要IGP基础。
1、分配标签
分配标签并不是所有设备针对自己本地路由表中所有的路由条目分配标签,而是在判定自己是到某网段的出栈LSR时,才会主动分配标签。
当然,在构成到达目标网段的LSP过程中,所有中间的LSR都需要给对应的FEC分配标签才行。则其它设备只有在收到标签和目标网段的映射关系后,才会被动的分配标签。分配标签之前需要完成检查动作,主要检查目标网段本地路由表是否可达,以及下一跳和通告者是否相同。检查通过则可分配标签,不通过则不能分配标签
LDP的标签分配方式:
1、有序方式----华为设备默认选择的是有序方式分配标签
2、独立方式---不需要确认自己是出站LSR,也可以主动给路由表中路由条目分配标签。
2、传递标签
出栈LSR分配完标签需要传递给其它LSR设备,传递的条件是彼此之间得先是LDP对等体关系。而LDP对等体关系建立的前提条件是需要先建立LDP会话
本地LDP会话---直连的两个设备之间建立LDP会话
远程LDP会话---非直连设备之间可以通过手工指定的方式来创建远程的LDP会话。
UDP---646
组播---224.0.0.2
LDP-- 基于UDP和TCP的646端口工作;先使用udp发送组播(224.0.0.2)hello包发现邻居,获取邻居ip地址,再和该直连邻居建立TCP的会话;邻居关系建立后;为了邻居关系间的稳定,一般使用设备的环回地址来建立tcp会话;建议设置环回地址为mpls协议的route-id,该id值将携带在组播收发的hello报文中,之后自动进行tcp会话建立;
本地LDP会话的建立过程:
1、在LSR上激活LDP之后,首先周期性的发送hello包
在hello包中需要携带一些参数,其中包含传输地址和LDP ID。
传输地址:这个地址主要是后面建立TCP会话时需要用到的地址,默认情况下,我们将使用该设备的LSR ID来作为这个地址。所以要求,LSR ID必须是可用且可达的IP地址。
LDP ID:所有激活LDP协议的LSR设备都要求必须具有一个LDP ID,这个ID是由48位二进制构成,表达方式位32位:16位,前32位使用是LSR ID,后16位用0来表示。这个和标签空间有关,所有基于设备的标签空间,其值都为0。
hello发送周期默认为5s,保活时间为3倍的hello时间,即默认15秒
2、双方在交互完hello包之后,将获取到对方传输地址,则将根据这个传输地址来建立TCP会话。
在建立TCP之前,LDP也存在检查动作,需要先确认收到的传输地址,在本地路由表中是否可达,可达则可以正常建立TCP会话。
如果双方都建立TCP会话,则将创建两条双向通道,造成资源浪费。则在收到对端hello包中的传输地址后,将和本地的传输地址进行对比,传输地址大的一方,我们称为主动方,主动方则可以主动建立TCP会话,而被动方则不建立。
3、完成TCP会话建立之后,传递地址大的一方将优先使用初始化报文,里面包含一些协商的参数发给被动方。对方如果确认里面的参数,则将回复keeplive报文进行确认,同时发送自己本地的初始化报文,携带自己的参数。主动方收到后也将对参数进行确认,如果没问题则也将发送keeplive报文。双方都收到keeplive报文,则代表参数协商成功,LDP会话建立成功。
之后,也需要周期性的发送keeplive报文进行保活,发送周期默认为15S,保活时间为3倍的周期发送时间,则默认为45秒。
上下游关系---由数据层流量流动方向来决定,数据发送方为上游,接收方为下游。从控制层的角度来看,则标签传递的方向应该是从下游发送到上游。之后上游设备会去收集下游的标签。
标签传递方式---DU模式---下游自主模式 --- 华为设备默认采用这种模式,所有LSR在 分配好标签之后,可以主动的将标签传递给其它LSR
---如果选择的是下游自主模式,则设备在传递标签时,无法判断上下游关系的,则会将标签发给所有的对等体关系。当设备收到标签之后,则将可以基于路由表判断上下游关系。华为设备,只有上游设备会记录下游设备发送的标签,而上游设备发送的标签将不保存。(还有一种标签的保存模式是上下游标签都保存。)
DOD模式---下游按需模式----只有下游设备在收到上游设备通知之后,才会给上游设备发送标签。
数据层面流动过程
在数据层面流量通过的过程当中,入站LSR设备和出战LsR设备都需要查询两张表,一张FIB表,一张LFIB包才能完成转发过程,导致效率降低,需要优化。
优化思路:
入站LSR---因为入站的数据包中不包含标签,所以,必须查看FIB表。则可以直接将出站标签添加到FIB表中,这样则将不再需要查看LFPB表。
MPLS的次末跳弹出机制 ---即倒数第二跳 --华为设备默认执行
边界LSR将本地的直连网段传递给MPLS域内邻居后,LDP分配标签号为3(隐式空标签),告知倒数第二跳设备它的身份;导致倒数第二跳设备在查询LFIB表后,已知转发路径的前提下提前弹出标签,使得最后一跳路由器均只需要查询FIB 表;相反的,最后一跳路由器在查询 LFIB 表后,弹出标签还需要查询FIB;
配置MPLS – LDP
首先启动IGP使得路由可达
1、给LSR配置LSR-ID
[r2] mpls lsr -id 2.2.2.2 必须先定义mpls的router-id,要为本地设备的真实ip地址,且邻居可达,因为该地址将用于建立TCP会话,建议使用环回地址
2、激活MPLS
1、全局激活MPLS
[r2] mpls 再开启mpls协议
[r2-mpls] mpls ldp 再激活LDP协议
2、接口激活MPLS---之后需要在所有标签经过的接口上开启协议
[r2]interface GigabitEthernet 0/0/1
[r2-GigabitEthernet0/0/1]mpls 先开启MPLS
[r2-GigabitEthernet0/0/1]mpls ldp 再激活LDP协议
当启动配置完成后,邻居间使用UDP报文组播收发hello包;之后基于hello包中的router-id地址进行TCP会话的建立;
[r3]display tcp status
[r3]display mpls ldp peer ---查看LDP对等体关系
[r1]display mpls ldp session ---查看LDP会话
[r4]display mpls lsp 查看LFIB表
[r3]display fib 查看FIB表
[r4]display mpls ldp lsp 查看LIB表,装载本地和邻居为各条路由分配的标签号
[r3]display fib verbose --- 查看fib详细信息
当tcp会话建立后,邻居间基于TCP会话再建立邻居关系,生成邻居表:
再然后基于本地的FIB表,默认华为仅针对32位的主机路由生成标签号;存储于LIB表中,之后邻居间共享LIB表;
最后路由器将LIB和FIB集合,生成最佳路径的标签转发规则—LFIB
注:默认华为仅针对32位主机路由分配标签
[r3]mpls
[r3-mpls]lsp-trigger all 开启功能,将针对fib表中所有路由进行标签号的分配
[r2]tracert -v -a 2.2.2.2 56.1.1.2
使用mpls解决BGP的路由黑洞
MPLS协议并不会为通过BGP协议学习的路由条目分配标签号;
而是在访问这些BGP路由目标网段时,在流量中压入到达这些网段的BGP下一跳设备地址的标签号;
例:R2从BGP邻居5.5.5.5 学习到6.6.6.0 网段的路由;R2在访问6.6.6.0 时,将在数据包中压入到达5.5.5.5ip地址的标签号,来穿越中间没有运行BGP协议的设备;实现打破路由黑洞;
注:华为设备默认不为BGP协议执行下一跳标签机制,cisco默认执行;
华为设备需要开启 route recursive-lookup tunnel 路由基于隧道进行递归查找
MPLS VPN
MPLS VPN是一种由运营商提供的,专门解决虚拟专线安全及带宽问题的综合技术
站点 ---- 可以理解为是一个组织机构在不同地理位置设置的不同的IP网络。
PE --- 服务提供商边界设备 --- 需要连接CE(客户网络的边界设备)设备,则需要接受客户私网的路由信息。他还需要将私网的路由信息传递到远端的PE设备上。这部分路由的传输主要使用BGP协议传递。则中间的P设备(服务提供商的设备),只要完成路由信息的高速转发即可。
VRF --- 虚拟路由转发 --- VPN instance (VPN实例) --- 我们可以将一台真实的物理设备抽象出多台虚拟的设备。每一台虚拟的设备就被称为一个VRF空间,每个VRF空间都拥有独立的路由表,FIB表,动态路由协议,及接口。
RD值---路由区分码---由64位二进制构成的,华为设备最常用的的表达方式是 AS:NN(前面AS代表所在的AS号,后面NN自定义值
VPNV4路由=普通IPV4路由+RD+RT
RT --- 路由目标值 --- VPN Target --- 32位二进制构成 --- 由BGP社团属性来携带
1、出站RT值 --- Export RT --- PE设备位不同VRF空间配置不同的出站RT,发出由社团属性携带,需要和远端PE设备上的入站RT对应。
2、入站RT值 --- lmport RT ---PE设备为不同VRF空间配置不同的入站RT,根据社团属性中携带的值进行比对,将其放入对应的VRF空间当中
PE端在收到不同CE发送过来的相同网段路由时,使用RD值进行区分---格式X:X 32位
PE端将附上RD的私有路由不能直接装载于本地公有路由表中,需要放置到对应的VRF(虚拟路由转发)空间内;之后再路由付RT值,用于传递到对端PE设备,对端区分信息;
MP--BGP--可以支持多种地址族的应用----VPNV4路由需要MP-BGP来进行传递;对端基于RT值,将路由装载到对应的VRF空间内,再共享给对应的CE;
数据层流量---数据层流量主要是在到达远端PE设备上时无法分辨到底加入到哪个VRF空间中,所以,需要使用双层标签来进行区分。
1、外层标签(靠近二层)---公网标签---由LDP协议来分配,其目的是为了保证数据可以正常的通过MPLS域,到达远端PE。
2、内层标签(靠近三层)---私网标签---由MP-BGP协议来分配,目的是在远端PE
设备上弹出外层标签后,可以根据内层标签判断到底是到达哪个VRF的数据流量。内层标签需要和VRF空间存在对应关系,这个标签是由MP-BGP分配后,通过社团属性随着路由传递到达对端PE。
控制层面工作完成后,数据层面需要基于MPLS来工作,由于数据层面不能携带RD/RT值;
故mpls将在数据包中压入两层标签,外层标签用于超越中间设备,打破BGP路由黑洞;
内层标签用于对应VRF空间;
配置MPLS VPN
配置:
ISP部分
IGP路由
MPLS域
1、创建VRF空间:
[r2]ip vpn-instance a 创建名为a的vrf空间---区分大小写
[r2-vpn-instance-a-af-ipv4]route-distinguisher 1:1 配置RD值
[r2-vpn-instance-a-af-ipv4]vpn-target 100:1 export-extcommunity ---配置出站
[r2-vpn-instance-a-af-ipv4]vpn-target 100:2 import-extcommunity --配置入站
[r2]interface GigabitEthernet 0/0/0 进入链接CE端的接口
[r2-GigabitEthernet0/0/0]ip binding vpn-instance a 关联到vrf空间
[r2-GigabitEthernet0/0/0]ip address 192.168.2.2 24 配置私有ip地址
注:在关联到vrf空间前不能配置接口ip,否则该地址的直连路由将进入公有路由表;
[r2]display ip routing-table vpn-instance a 查看空间内的私有路由表
[r2]ping -vpn-instance a 192.168.2.1 正常测试将在公有路由表中查询记录;该命令为基于VRF空间a进行路由查询
2、CE端与PE端交互路由
静态
CE端直接编写静态路由即可;
PE端编写到VRF空间内的静态路由
[r2]ip route-static vpn-instance a 192.168.1.0 24 192.168.2.1
将本地vrf空间内的静态和直连路由重发布到BGP协议传递到对端的PE
[r2]bgp 2
[r2-bgp]ipv4 vpn-instance a
[r2-bgp-a]import-route direct
[r2-bgp-a]import-route static
<r4>display bgp vpnv4 vpn-instance a routing-table 查看mp-bpg的BGP表
3、PE与PE间建立MP-BPG邻居关系
[r2]bgp 2
[r2-bgp]router-id 2.2.2.2
先和对端建立正常BGP邻居关系,可用于传递正常的公网路由
[r2-bgp]pe 4.4.4.4 as-number 2
[r2-bgp]pe 4.4.4.4 connect-interface LoopBack 0
[r2-bgp]pe 4.4.4.4 next-hop-local
同时还需要再在IPV4的家族模式中,与对端建立一个VPNV4的关系,用于传递 VPNV4路由
[r2-bgp]ipv4-family vpnv4
[r2-bgp-af-vpnv4]peer 4.4.4.4 enable
[r2-bgp]display bgp vpnv4 all peer 查看mp-bgp邻居关系
4、动态路由做法 OSPF
CE端正常启动OSPF即可
PE端,启动VPNV4专用的ospf协议
[r4]ospf 2 vpn-instance a
[r4-ospf-2]area 0
[r4-ospf-2-area-0.0.0.0]network 192.168.3.1 0.0.0.0
之后使用双向重发布,实现路由共享
[r4]bgp 2
[r4-bgp]ipv4-family vpn-instance a
[r4-bgp-a]import-route ospf 2
[r4]ospf 2 vpn-instance a
[r4-ospf-2]import-route bgp
[r4]display mpls lsp vpn-instance a 查看双层标记的内层标签号