MPLS Option C是解决MPLS跨域问题的第三种解决方案,因为第一二种方案比较容易理解就不写了,下面为该实验拓扑图

控制层面

首先要先说说路由传递是怎么传输的,CE通过RIP协议传递路由给 PE,PE从VRF中导入路由到MP—BGP里,两PE通过BGP学习到对端PE的地址,然后建立MP-BGP邻居传递路由信息给对端,对端收到后再导入到相对应的VRF中,最后通过RIP传递给对端CE。

再来说说标签是怎么分发的,首先是第一层私网标签。当CE1去往CE2,因为建立起了MP-BGP的关系,PE2上会把CE2的路由改成VPNv4地址的形式发送给PE1,这样第一层标签就出来了。第二层标签是PE1去往CE2的下一跳地址的这条路由(4.4.4.9)的标签,因为MP-BGP是用Lookback口进行建立邻居的,所以第二层标签是去往4.4.4.9的标签。问题在于这条路由的标签是怎么来的,LDP协议无法为BGP路由分配标签,只能用其他方法分配标签了(下面会给出分配标签的方法)。第二层标签分配了之后,就是第三层标签了,这是去往ASBR1的标签,通过LDP协议分发的。

基本协议配置

因为一半配置都与之类似,以下都只给出半边的配置

[CE1]

//ip配置如图所示,以下所有配置略过 
rip 1
undo summary
version 2
network 10.0.0.0
network 23.0.0.0

[PE1]

ip vpn-instance 1
ipv4-family
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
#
mpls lsr-id 1.1.1.9
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
ip binding vpn-instance 1
#
interface GigabitEthernet0/0/1
mpls
mpls ldp
#
bgp 100
peer 2.2.2.9 as-number 100
peer 2.2.2.9 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
peer 2.2.2.9 enable
#
ipv4-family vpn-instance 1
import-route rip 1
#
ospf 1
area 0.0.0.0
network 1.1.1.9 0.0.0.0
network 172.1.1.1 0.0.0.0

rip 1 vpn-instance 1
undo summary
version 2
network 10.0.0.0
import-route bgp
#

[ASBR1]

mpls lsr-id 2.2.2.9
mpls
#
mpls ldp
#
interface GigabitEthernet0/0/0
mpls
mpls ldp
#
interface GigabitEthernet0/0/1
mpls
#

bgp 100
peer 1.1.1.9 as-number 100
peer 1.1.1.9 connect-interface LoopBack1
peer 192.168.1.2 as-number 200
#
ipv4-family unicast
undo synchronization
peer 1.1.1.9 enable
peer 1.1.1.9 next-hop-local
peer 192.168.1.2 enable
#
ipv4-family vpnv4
policy vpn-target
#
ospf 1
area 0.0.0.0
network 2.2.2.9 0.0.0.0
network 172.1.1.2 0.0.0.0
#

配置完成后,首先第一步,需要两个PE能学习到对端 PE 的 Loopback 口地址,可以采取在 ASBR 上引入 OSPF 路由or在 ASBR 上宣告PE的 Loopback 口上的方法

bgp 100
ipv4-family unicast
import-route ospf 1
or
bgp 100
network 1.1.1.9 32
//推荐ASBR上宣告PE的Loopback口方法,能减少LSP的生成

学习到对端的 Loopback 口地址后,就要开始为这 Loopback 口地址分配标签了

[PE1]
bgp 100
ipv4-family unicast
peer 2.2.2.9 label-route-capability //label-route-capability 开启接受/发出带标签的IPV4路由

[ASBR1]
bgp 100
ipv4-family unicast
peer 1.1.1.9 label-route-capability
peer 192.168.1.2 label-route-capability
peer 1.1.1.9 route-policy 2 export
peer 192.168.1.2 route-policy 1 export
#
route-policy 1 permit node 10 //从PE1收到的IPV4路由在向ASBR发出时会分配MPLS标签
apply mpls-label
#
route-policy 2 permit node 10 //从ASBR2中收到带有标签的IPV4路由,会重新分配MPLS标签
if-match mpls-label
apply mpls-label
#

查看PE1上 LSP 信息

[PE1-bgp]display  mpls lsp 
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name
162.1.1.0/24 NULL/1033 -/-
3.3.3.9/32 NULL/1034 -/-
4.4.4.9/32 NULL/1035 -/-
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 NULL/3 -/GE0/0/1
2.2.2.9/32 1024/3 -/GE0/0/1
1.1.1.9/32 3/NULL -/-

可以看到此时已经接收到4.4.4.9这个标签了,有了这个4.4.4.9的标签,第二层标签就能传输过去了,这里的标签分发的源头是ASBR2。为什么说源头是ASBR2,因为是ASBR2分发4.4.4.9路由给AS100内的设备的,通过import ospf/network方式

最后建立MP-BGP邻居

bgp 100
peer 4.4.4.9 as-number 200
peer 4.4.4.9 ebgp-max-hop 5
peer 4.4.4.9 connect-interface LoopBack1
#
ipv4-family unicast
peer 4.4.4.9 enable
#
ipv4-family vpnv4
policy vpn-target
peer 4.4.4.9 enable

再次查看 PE 的 LSP 信息

[PE1]display  mpls lsp 
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name
162.1.1.0/24 NULL/1028 -/-
3.3.3.9/32 NULL/1029 -/-
4.4.4.9/32 NULL/1030 -/-
23.23.23.23/32 1025/NULL -/- 1
10.1.1.0/24 1026/NULL -/- 1
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 NULL/3 -/GE0/0/1
2.2.2.9/32 1024/3 -/GE0/0/1
1.1.1.9/32 3/NULL -/-

CE1上测试pingCE2

ping -a 23.23.23.23 32.32.32.32
PING 32.32.32.32: 56 data bytes, press CTRL_C to break
Request time out
Reply from 32.32.32.32: bytes=56 Sequence=2 ttl=251 time=50 ms
Reply from 32.32.32.32: bytes=56 Sequence=3 ttl=251 time=40 ms
Reply from 32.32.32.32: bytes=56 Sequence=4 ttl=251 time=50 ms
Reply from 32.32.32.32: bytes=56 Sequence=5 ttl=251 time=40 ms
--- 32.32.32.32 ping statistics ---
5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 40/45/50 ms

数据层面

首先CE1的23.23.23.23去往CE2的32.32.32.32的数据包先查看fib表

[CE1]display  fib 
Route Flags: G - Gateway Route, H - Host Route, U - Up Route
S - Static Route, D - Dynamic Route, B - Black Hole Route
L - Vlink Route
FIB Table:
Total number of Routes : 10
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
32.32.32.32/32 10.1.1.2 DGHU t[108] GE0/0/0 0x0
10.1.1.255/32 127.0.0.1 HU t[12] InLoop0 0x0
10.1.1.1/32 127.0.0.1 HU t[12] InLoop0 0x0
23.23.23.23/32 127.0.0.1 HU t[7] InLoop0 0x0
255.255.255.255/32 127.0.0.1 HU t[6] InLoop0 0x0
127.255.255.255/32 127.0.0.1 HU t[6] InLoop0 0x0
127.0.0.1/32 127.0.0.1 HU t[6] InLoop0 0x0
127.0.0.0/8 127.0.0.1 U t[6] InLoop0 0x0
10.1.1.0/24 10.1.1.1 U t[12] GE0/0/0 0x0
10.2.1.0/24 10.1.1.2 DGU t[108] GE0/0/0 0x0

是去往下一跳为10.1.1.2的PE1,PE1收到后根据目的地址查找FIB表后发现tunnel-id为非0,于是便查找LFIB表

[PE1]display  fib vpn-instance 1
Route Flags: G - Gateway Route, H - Host Route, U - Up Route
S - Static Route, D - Dynamic Route, B - Black Hole Route
L - Vlink Route
FIB Table:
Total number of Routes : 7
Destination/Mask Nexthop Flag TimeStamp Interface TunnelID
32.32.32.32/32 2.2.2.9 DGHU t[114] GE0/0/1 0x5
23.23.23.23/32 10.1.1.1 DGHU t[22] GE0/0/0 0x0
10.1.1.255/32 127.0.0.1 HU t[21] InLoop0 0x0
10.1.1.2/32 127.0.0.1 HU t[21] InLoop0 0x0
255.255.255.255/32 127.0.0.1 HU t[7] InLoop0 0x0
10.1.1.0/24 10.1.1.2 U t[21] GE0/0/0 0x0
10.2.1.0/24 2.2.2.9 DGU t[114] GE0/0/1 0x5

[PE1]display fib vpn-instance 1 32.32.32.32 verbose
Route Entry Count: 1
Destination: 32.32.32.32 Mask : 255.255.255.255
Nexthop : 2.2.2.9 OutIf : GigabitEthernet0/0/1
LocalAddr : 172.1.1.1 LocalMask: 0.0.0.0
Flags : DGHU Age : 825sec
ATIndex : 0 Slot : 0
LspFwdFlag : 1 LspToken : 0x5
InLabel : 1025 OriginAs : 200 //可以发现第一个私网标签为1025
BGPNextHop : 4.4.4.9 PeerAs : 200 //去往32.32.32.32下一跳为4.4.4.9
QosInfo : 0x0 OriginQos: 0x0
NexthopBak : 0.0.0.0 OutIfBak : [No Intf]
LspTokenBak: 0x0 InLabelBak : NULL
LspToken_ForInLabelBak : 0x0
EntryRefCount : 0
VlanId : 0x0
BgpKey : 4
BgpKeyBak : 0
LspType : 0 Label_ForLspTokenBak : 0
MplsMtu : 0 Gateway_ForLspTokenBak : 0.0.0.0
NextToken : 0x0 IfIndex_ForLspTokenBak : 0
Label_NextToken : 0 Label : 0
LspBfdState : 0
[PE1]

压入私网标签后,查看下一跳地址为4.4.4.9,于是再查Fib表,又发现 tunnel-id 又为非0,于是继续查找LFIB表

//看的命令和上面一样

[PE1]display mpls lsp include 4.4.4.9 32 verbose
LSP Information: BGP LSP
No : 1
VrfIndex :
RD Value : 0:0
Fec : 4.4.4.9/32
Nexthop : 2.2.2.9
In-Label : NULL
Out-Label : 1030 //再压入一层标签1030
In-Interface : ----------
Out-Interface : ----------
LspIndex : 4098
Token : 0x5
LsrType : Ingress
Outgoing token : 0x1
Label Operation : PUSH
Mpls-Mtu : ------
TimeStamp : 1388sec
FrrToken : 0x0
FrrOutgoingToken : 0x0
BGPKey : -------
BackupBGPKey : -------
FrrOutLabel : -------

压了标签后发现去往4.4.4.9的下一跳为2.2.2.9,继续查表

[PE1]display mpls lsp include 2.2.2.9 32 verbose 
LSP Information: LDP LSP
No : 1
VrfIndex :
Fec : 2.2.2.9/32
Nexthop : 172.1.1.2
In-Label : NULL
Out-Label : 3 //这里看到是3的标签可以弹出直接发送给172.1.1.2(ASBR),如果这里上连不是ASBR而是P路由器的话,就不是3标签了
In-Interface : ----------
Out-Interface : GigabitEthernet0/0/1
LspIndex : 6144
Token : 0x1
FrrToken : 0x0
LsrType : Ingress
Outgoing token : 0x0
Label Operation : PUSH
Mpls-Mtu : ------
TimeStamp : 1858sec
Bfd-State : ---
BGPKey : ------
No : 2
VrfIndex :
Fec : 2.2.2.9/32
Nexthop : 172.1.1.2
In-Label : 1024
Out-Label : 3
In-Interface : ----------
Out-Interface : GigabitEthernet0/0/1
LspIndex : 6145
Token : 0x2
FrrToken : 0x0
LsrType : Transit
Outgoing token : 0x0
Label Operation : SWAP
Mpls-Mtu : ------
TimeStamp : 1858sec
Bfd-State : ---
BGPKey : ------

查看LSP信息表

[PE1]display mpls lsp
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name
162.1.1.0/24 NULL/1028 -/-
3.3.3.9/32 NULL/1029 -/-
4.4.4.9/32 NULL/1030 -/-
23.23.23.23/32 1025/NULL -/- 1
10.1.1.0/24 1026/NULL -/- 1
LSP Information: LDP LSP //可以看到2.2.2.9是LDP分配的
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 NULL/3 -/GE0/0/1
2.2.2.9/32 1024/3 -/GE0/0/1
1.1.1.9/32 3/NULL -/-

PE1到ASBR1总共是压入了三层标签。在ASBR上查LFIB表,发现是swap,改为1026标签。ASBR1-ASBR2之间总是两层标签。数据包到了ASBR2,会把第二层标签弹出,进入AS200打上通过LDP协议分发的标签,ASBR2-PE2总共是两层标签,之后的过程就和普通的MP-BGP解标签一样了

[ASBR-PE1]display mpls lsp 
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 1024/NULL -/-
172.1.1.0/24 1025/NULL -/-
3.3.3.9/32 NULL/1024 -/-
162.1.1.0/24 NULL/1025 -/-
1.1.1.9/32 1026/NULL -/-
4.4.4.9/32 NULL/1026 -/-
162.1.1.0/24 1028/1025 -/-
3.3.3.9/32 1029/1024 -/-
4.4.4.9/32 1030/1026 -/-
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 3/NULL -/-
1.1.1.9/32 NULL/3 -/GE0/0/0
1.1.1.9/32 1027/3 -/GE0/0/0

还有一种为BGP路由分配标签的方法,等有时间再补上吧,咕咕咕咕


1 条评论

冰冰 · 2024年8月17日 上午8:27

感谢分享。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注