MPLS-VPN详解

MPLS介绍

多标签协议交换
支持三层协议
基于标签做转发
MPLS依赖IP路由及cef转换

三张表

FIB表

· 就是CEF表

LIB

· 标签信息表
· 路由器为每一个目的地址在本地生成一个标签LDP邻居会交换自己的标签信息库并且存储保留

LFIB

· 每个路由器根据自己生成的标签和邻居告诉自己的标签,针对每一个目的地址使用一个标签,所有条目生成标签转发信息库
· 在标签转发的时候会去查询标签转发信息库

拓扑

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
第一步,配置IP地址
第二步,R2到R5之间配ospf
第三步,如图框中所示分别配成bgp 100、 bgp 200、 bgp 300
第四步,将bgp200中路由器的物理接口加入到mpls中可以解决路由黑洞问题
mpls label range start end
interface Ethernet0/1
mpls ip

查看邻居信息
R3#sh mpls ldp neighbor
Peer LDP Ident: 2.2.2.2:0; Local LDP Ident 3.3.3.3:0
TCP connection: 2.2.2.2.646 3.3.3.3.58173
State: Oper; Msgs sent/rcvd: 21/23; Downstream
Up time: 00:10:15
LDP discovery sources:
Ethernet0/0, Src IP addr: 192.168.23.2
Addresses bound to peer LDP Ident:
192.168.12.2 192.168.23.2 2.2.2.2
Peer LDP Ident: 4.4.4.4:0; Local LDP Ident 3.3.3.3:0
TCP connection: 4.4.4.4.62152 3.3.3.3.646
State: Oper; Msgs sent/rcvd: 21/21; Downstream
Up time: 00:09:47
LDP discovery sources:
Ethernet0/1, Src IP addr: 192.168.34.4
Addresses bound to peer LDP Ident:
192.168.34.4 192.168.45.4 4.4.4.4
查看标签信息库
R2#sh mpls ldp bindings
lib entry: 1.1.1.1/32, rev 2
local binding: label: 200
lib entry: 2.2.2.0/24, rev 4
local binding: label: imp-null
lib entry: 2.2.2.2/32, rev 19
remote binding: lsr: 3.3.3.3:0, label: 300
lib entry: 3.3.3.0/24, rev 20
remote binding: lsr: 3.3.3.3:0, label: imp-null
lib entry: 3.3.3.3/32, rev 6
local binding: label: 201
lib entry: 4.4.4.4/32, rev 8
local binding: label: 202
remote binding: lsr: 3.3.3.3:0, label: 301
lib entry: 5.5.5.5/32, rev 10
local binding: label: 203
remote binding: lsr: 3.3.3.3:0, label: 302
lib entry: 192.168.12.0/24, rev 12
local binding: label: imp-null
lib entry: 192.168.23.0/24, rev 14
local binding: label: imp-null
remote binding: lsr: 3.3.3.3:0, label: imp-null
lib entry: 192.168.34.0/24, rev 16
local binding: label: 204
remote binding: lsr: 3.3.3.3:0, label: imp-null
lib entry: 192.168.45.0/24, rev 18
local binding: label: 205
remote binding: lsr: 3.3.3.3:0, label: 303
R3#sh mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
300 No Label 2.2.2.2/32 5706 Et0/0 192.168.23.2
301 No Label 4.4.4.4/32 0 Et0/1 192.168.34.4
302 402 5.5.5.5/32 6006 Et0/1 192.168.34.4
303 Pop Label 192.168.45.0/24 0 Et0/1 192.168.34.4

MPLS原理

流量分析

  1. R1 上ping 6.6.6.6
  2. 在R1上根据cef表将数据转发到R2
  3. R2去往6.6.6.6会去找5.5.5.5
  4. 在R2去往5.5.5.5会根据LFIB表加上标签进行转发,直至R5才可以看到IP数据包
  5. 中间的路由器不需要知道路由条目,只需要根据标签进行转发即可
  6. 最终R5将数据包转发给R6,即到达

标签的产生

每一台路由器会针对每一个路由条目产生一条本地标签
LDP邻居之间会交换LIB
如果接受到多个同一标签,会根据路由选择一个最佳
最终产生一个标签转发表
可以人工指定标签范围,方便实验观察,在实际情况不指定范围没有任何问题

image.png

MPLS标签

标签结构

image.png

label:标签的值
BoS:栈底位,这个位置为1代表的是最后一个标签,因为可以给一个数据包压多个标签,否则不是最后一个标签;当处理掉这一层标签的时候,数据包就会变成普通数据包
TTL:最大生存长度,最大为255,在压入标签的时候将IP数据包中的TTL值复制过来,在出战的时候将此值复制给IP数据报中的TTL值
EXP:优先级,标识数值的优劣,用于QoS

标签的操作

交换:将顶部标签替换成新的标签
添加:在新的标签上增加一个或多个标签
未标记:移除所有的标签
移除:标签栈被移除,并且对该IP报文进行IP查找
聚合:标签栈被移除

image.png

标签范围

范围是0-1048575,0-15之间是保留的标签,剩下的可以使用
标签0:显示空标签
标签3:隐含空标签
标签1:路由报警标签
标签14:OAM报警标签
其他保留标签暂时没有定义

LDP详解

邻居建立过程

邻居发现过程

· 基于UDP
· 向邻居发送UDP报文,组播地址为224.0.0.2,目的端口为646,源端口为646

会话建立过程

· 基于TCP
· 目的端口为646,源端口为随机端口

运行过程

· 发现邻居
· 会话建立
· 产生LIB
· 交换LIB
· 产生LFIB

image.png

次末跳弹出机制

当收到的标签是到达自己时,那么处理标签包和处理数据包需要查表两次,分别是LFIB表和FIB表,这样可能效率比较低
每一个路由器对本地的条目产生的标签是隐含空标签
当路由器发现去往的下一个标签是隐含空标签时,直接将标签包去除然后再转发
这样收到到达自身的标签已经只剩数据包

image.png

路由汇总对MPLS的影响

路由器在产生路由汇总条目时会对此条目产生隐含空标签,因为它认为这个条目是本地产生的
在访问到达该路由器时标签会被移除,这种情况十分地不安全,可能造成数据丢失
在路由汇总的环境下,要去谨慎使用MPLS VPN等

image.png

MPLS VPN名词

PE

· 运营商边界设备

CE

· 客户边界设备

P

· 运营商内部设备

VRF

· 虚拟路由转发
· 可以理解虚拟路由器,有独立的路由表,有专属的接口
· vrf是配置在PE上的,
· 可以将接口划入vrf中,然后连接客户网络
· 客户网络的路由条目就会被vrf学习到,然后再由vrf包装成vpn专用的格式传递出去

RT

· 可以理解为vrf的入场券,每个vonv4的条目都必须携带一个RT
· vrf只会放行允许进入VPNV4条目到vrf的路由表
· 出战RT:从当前VRF发出去时自己写到的RT值
· 入站RT:有入站RT,想要进入某个VRF,必须携带指定的RT值才可以

RD

· 区别路由的一个数值,通常表示形式为ASN:NN
· 和用户的路由条目组成vpnv4的条目ASN:NN.x.x.x.x
· 如果多个客户的IP网段是冲突的,RD可以避免

MPLS VPN一般是运营商提供的,主要配置是在PE和P中
主要解决了两个问题

· 两个站点之间的路由条目的学习
· 两个站点之间流量传递的问题

MPLS VPN 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
第一步,基础配置,配置地址,配置ospf,配置mpls
R2
mpls label range 200 299
!
interface Loopback0
ip address 2.2.2.2 255.255.255.255
ip ospf 1 area 0
!
interface Ethernet0/0
no ip address
shutdown
!
interface Ethernet0/1
ip address 192.168.23.2 255.255.255.0
ip ospf 1 area 0
mpls ip
==================================
R3
mpls label range 300 399
!
interface Loopback0
ip address 3.3.3.3 255.255.255.255
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.23.3 255.255.255.0
ip ospf 1 area 0
mpls ip
!
interface Ethernet0/1
ip address 192.168.34.3 255.255.255.0
ip ospf 1 area 0
mpls ip
==================================
R4
mpls label range 400 499
!
interface Loopback0
ip address 4.4.4.4 255.255.255.255
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.34.4 255.255.255.0
ip ospf 1 area 0
mpls ip
!
interface Ethernet0/1
ip address 192.168.45.4 255.255.255.0
ip ospf 1 area 0
mpls ip
==================================
R5
mpls label range 500 599
!
interface Loopback0
ip address 5.5.5.5 255.255.255.255
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.45.5 255.255.255.0
ip ospf 1 area 0
mpls ip

第二步,R2和R5配置BGP vpnv4邻居
R2
router bgp 200
bgp log-neighbor-changes
no bgp default ipv4-unicast
neighbor 5.5.5.5 remote-as 200
neighbor 5.5.5.5 update-source Loopback0
!
address-family vpnv4
neighbor 5.5.5.5 activate
neighbor 5.5.5.5 send-community extended
exit-address-family
========================
R5
router bgp 200
bgp log-neighbor-changes
no bgp default ipv4-unicast
neighbor 2.2.2.2 remote-as 200
neighbor 2.2.2.2 update-source Loopback0
!
address-family vpnv4
neighbor 2.2.2.2 activate
neighbor 2.2.2.2 send-community extended
exit-address-family
R2#sh ip bgp vpnv4 all summary
BGP router identifier 1.1.1.1, local AS number 200
BGP table version is 1, main routing table version 1

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
5.5.5.5 4 200 5 5 1 0 0 00:01:51 0

第三步,PE设备配置VRF,并且将相应的接口划入VRF中
R2
ip vrf Blue
rd 100:123
route-target export 200:5
route-target import 200:2
interface Ethernet0/0
ip vrf forwarding Blue
ip address 192.168.12.2 255.255.255.0
======================================
R5
ip vrf Blue
rd 100:123
route-target export 200:2
route-target import 200:5
interface Ethernet0/1
ip vrf forwarding Blue
ip address 192.168.56.5 255.255.255.0

第四步,配置CE-PE之间的IGP协议
R1
interface Loopback0
ip address 1.1.1.1 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.12.1 255.255.255.0
ip ospf 1 area 0
=============================
R2
interface Ethernet0/0
ip ospf 2 area 0
==============================
R5
interface Ethernet0/1
ip ospf 2 area 0
=================================
interface Loopback0
ip address 6.6.6.6 255.255.255.0
ip ospf 1 area 0
!
interface Ethernet0/0
ip address 192.168.56.6 255.255.255.0
ip ospf 1 area 0
第五步,将VRF与BGP vpnv4互相路由注入
R2
router bgp 200
address-family ipv4 vrf Blue
redistribute ospf 2 match internal external 1 external 2
router ospf 2 vrf Blue
redistribute bgp 200 subnets
==========================
R5
router bgp 200
address-family ipv4 vrf Blue
redistribute ospf 2 match internal external 1 external 2
router ospf 2 vrf Blue
redistribute bgp 200 subnets

检查
R1#sh ip route
1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 1.1.1.0/24 is directly connected, Loopback0
L 1.1.1.1/32 is directly connected, Loopback0
6.0.0.0/32 is subnetted, 1 subnets
O IA 6.6.6.6 [110/21] via 192.168.12.2, 00:01:54, Ethernet0/0
192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.12.0/24 is directly connected, Ethernet0/0
L 192.168.12.1/32 is directly connected, Ethernet0/0
O IA 192.168.56.0/24 [110/11] via 192.168.12.2, 00:01:54, Ethernet0/0
R1#ping 6.6.6.6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 6.6.6.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms

MPLS VPN 原理

路由层面

CE-PE

· CE和PE之间运行正常的IGP协议
· CE将对应的路由传递给对应的接口
· PE将路由学习到对应的VRF中

PE-P-PE

· PE和PE之间建立的时BGP vpnv4邻居
· 将VRF的VPNV4条目重发步到BGP中
· BGP会将其更新给vpnv4邻居
· 邻居收到之后,根据携带的RT值,将路由加入到对应的VRF路由表中

PE-CE

· 将BGP条目重发步进IGP中

流量层面

CE-PE

· 正常的路由转发
· PE在收到CE的流量后,会加上两层标签
· 最底层的标签是BGP提供的
· 最顶层的标签是LDP提供的

PE-P-PE

· 通过最外层的LDP标签进行转发
· 在到达PE之前弹出最顶层标签
· 只有最底层标签的数据最终被PE收到,然后从对应的VRF接口转发出去

PE-CE

· 正常的路由转发

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信