现在 SR 已经成为了底层网络架构的趋势,所以我这次在 SR-MPLS 的基础上来做 MPLS 跨域 Option-C.2 VPN.
由于网上的教程已经一抓一大把了,所以我们这次着重来描述 SR 域内跨域标签的传递过程。
网络拓扑如下:
图中 AS 65000 和 AS 65001 各为一组自治域,R3, R6 各为其边界的 ASBR. 自治域内各开启了 SR-MPLS 作为 Underlay(无 LDP 协议,全部都是 SR)。R1 和 R10 各作为 PE 和各自域内的 RR 建立 VPNv4 IBGP 邻居, RR 之间建立 EBGP 邻居(但不改变下一跳),通过在 RR 上重写 ext-community 的方式来实现本自治域内的路由器导入对方自治域 VPNv4 路由的功能。
如果想了解在 LDP 网络下的配置,请访问思科的官网:
Configure Inter-AS Option C MPLS VPN With Cisco IOS and Cisco IOS-XR
由于 SR 网络内不能像 LDP 一样自动为重分布进来的路由产生标签,所以我们使用 BGP Labeled-unicast 来传递对端 PE 的标签。
配置前检查:
RP/ 0 /RP0/CPU0:XTC-PCE-AS65000 #show isis segment-routing label table // 查看 segment-routing table
Wed Jun 30 13 : 05 : 24.264 UTC
---------- ---------------- ---------
16101 10.0 . 1 . 1 / 32 Loopback0
RP/ 0 /RP0/CPU0:XTC-PCE-AS65000 #show bgp vpnv4 unicast summary // 查看 RR 和 PE 的 VPNv4 邻居关系
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
10.0 . 0.1 0 65000 225 197 3 0 0 02 : 40 : 16 1
RP/0/RP0/CPU0:XTC-PCE-AS65000#show isis segment-routing label table // 查看 segment-routing table
Wed Jun 30 13:05:24.264 UTC
IS-IS 1 IS Label Table
Label Prefix Interface
---------- ---------------- ---------
16001 10.0.0.1/32
16002 10.0.0.2/32
16003 10.0.0.3/32
16004 10.0.0.4/32
16005 10.0.0.5/32
16101 10.0.1.1/32 Loopback0
RP/0/RP0/CPU0:XTC-PCE-AS65000#show bgp vpnv4 unicast summary // 查看 RR 和 PE 的 VPNv4 邻居关系
{..snip..}
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
10.0.0.1 0 65000 225 197 3 0 0 02:40:16 1
RP/0/RP0/CPU0:XTC-PCE-AS65000#show isis segment-routing label table // 查看 segment-routing table
Wed Jun 30 13:05:24.264 UTC
IS-IS 1 IS Label Table
Label Prefix Interface
---------- ---------------- ---------
16001 10.0.0.1/32
16002 10.0.0.2/32
16003 10.0.0.3/32
16004 10.0.0.4/32
16005 10.0.0.5/32
16101 10.0.1.1/32 Loopback0
RP/0/RP0/CPU0:XTC-PCE-AS65000#show bgp vpnv4 unicast summary // 查看 RR 和 PE 的 VPNv4 邻居关系
{..snip..}
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
10.0.0.1 0 65000 225 197 3 0 0 02:40:16 1
我们开始来配置 ASBR 之间的 labeled-unicast 邻居关系:
R3 #show run | sec router bgp
neighbor 10.0 . 1 . 1 remote-as 65000 // 与路由反射器的邻居关系
neighbor 10.0 . 1 . 1 update-source Loopback0
neighbor 10.10 . 36 . 6 remote-as 65001 // 与对端 ASBR 的邻居关系
network 10.0 . 0.1 mask 255.255 . 255 . 255
network 10.0 . 1 . 1 mask 255.255 . 255 . 255
neighbor 10.0 . 1 . 1 activate
neighbor 10.0 . 1 . 1 next-hop-self // 发送 labeled-unicast 路由时,将下一跳改为自己
neighbor 10.0 . 1 . 1 prefix-list foreign_prefixes out // 只给路由反射器发送从对端接收到的路由(这个配不配无所谓)
neighbor 10.0 . 1 . 1 send-label // 给 RR 的邻居关系激活 labeled-unicast NLRI
neighbor 10.10 . 36 . 6 activate
neighbor 10.10 . 36 . 6 route-map set-label out // 向对方 ASBR 发送路由时,指定 PE 的环回口路由携带 label,其余不携带
neighbor 10.10 . 36 . 6 send-label // 激活 labeled-unicast NLRI
ip prefix-list foreign_prefixes: 2 entries
seq 5 permit 10.0 . 0.10 / 32 // 匹配对方 PE 的环回口路由
seq 10 permit 10.0 . 1 . 2 / 32 // 匹配对方的 RR 环回口路由
ip prefix-list set-label: 1 entries
seq 5 permit 10.0 . 0.1 / 32 // 发送给对方的时候,只有该路由(我方 PE 的环回口路由)携带 label
R3 #show route-map set-label
route-map set-label, permit, sequence 100
ip address prefix-lists: set-label
mpls label // match prefix-list 后设置 mpls 标签
Policy routing matches: 0 packets, 0 bytes
route-map set-label, permit, sequence 200
Policy routing matches: 0 packets, 0 bytes
R3#show run | sec router bgp
router bgp 65000
bgp router-id 10.0.0.3
bgp log-neighbor-changes
neighbor 10.0.1.1 remote-as 65000 // 与路由反射器的邻居关系
neighbor 10.0.1.1 update-source Loopback0
neighbor 10.10.36.6 remote-as 65001 // 与对端 ASBR 的邻居关系
!
address-family ipv4
network 10.0.0.1 mask 255.255.255.255
network 10.0.1.1 mask 255.255.255.255
neighbor 10.0.1.1 activate
neighbor 10.0.1.1 next-hop-self // 发送 labeled-unicast 路由时,将下一跳改为自己
neighbor 10.0.1.1 prefix-list foreign_prefixes out // 只给路由反射器发送从对端接收到的路由(这个配不配无所谓)
neighbor 10.0.1.1 send-label // 给 RR 的邻居关系激活 labeled-unicast NLRI
neighbor 10.10.36.6 activate
neighbor 10.10.36.6 route-map set-label out // 向对方 ASBR 发送路由时,指定 PE 的环回口路由携带 label,其余不携带
neighbor 10.10.36.6 send-label // 激活 labeled-unicast NLRI
exit-address-family
R3#show ip prefix-list
ip prefix-list foreign_prefixes: 2 entries
seq 5 permit 10.0.0.10/32 // 匹配对方 PE 的环回口路由
seq 10 permit 10.0.1.2/32 // 匹配对方的 RR 环回口路由
ip prefix-list set-label: 1 entries
seq 5 permit 10.0.0.1/32 // 发送给对方的时候,只有该路由(我方 PE 的环回口路由)携带 label
R3#show route-map set-label
route-map set-label, permit, sequence 100
Match clauses:
ip address prefix-lists: set-label
Set clauses:
mpls label // match prefix-list 后设置 mpls 标签
Policy routing matches: 0 packets, 0 bytes
route-map set-label, permit, sequence 200
Match clauses:
Set clauses:
Policy routing matches: 0 packets, 0 bytes
R3#show run | sec router bgp
router bgp 65000
bgp router-id 10.0.0.3
bgp log-neighbor-changes
neighbor 10.0.1.1 remote-as 65000 // 与路由反射器的邻居关系
neighbor 10.0.1.1 update-source Loopback0
neighbor 10.10.36.6 remote-as 65001 // 与对端 ASBR 的邻居关系
!
address-family ipv4
network 10.0.0.1 mask 255.255.255.255
network 10.0.1.1 mask 255.255.255.255
neighbor 10.0.1.1 activate
neighbor 10.0.1.1 next-hop-self // 发送 labeled-unicast 路由时,将下一跳改为自己
neighbor 10.0.1.1 prefix-list foreign_prefixes out // 只给路由反射器发送从对端接收到的路由(这个配不配无所谓)
neighbor 10.0.1.1 send-label // 给 RR 的邻居关系激活 labeled-unicast NLRI
neighbor 10.10.36.6 activate
neighbor 10.10.36.6 route-map set-label out // 向对方 ASBR 发送路由时,指定 PE 的环回口路由携带 label,其余不携带
neighbor 10.10.36.6 send-label // 激活 labeled-unicast NLRI
exit-address-family
R3#show ip prefix-list
ip prefix-list foreign_prefixes: 2 entries
seq 5 permit 10.0.0.10/32 // 匹配对方 PE 的环回口路由
seq 10 permit 10.0.1.2/32 // 匹配对方的 RR 环回口路由
ip prefix-list set-label: 1 entries
seq 5 permit 10.0.0.1/32 // 发送给对方的时候,只有该路由(我方 PE 的环回口路由)携带 label
R3#show route-map set-label
route-map set-label, permit, sequence 100
Match clauses:
ip address prefix-lists: set-label
Set clauses:
mpls label // match prefix-list 后设置 mpls 标签
Policy routing matches: 0 packets, 0 bytes
route-map set-label, permit, sequence 200
Match clauses:
Set clauses:
Policy routing matches: 0 packets, 0 bytes
由于 SR 不支持自动产生标签(都是靠手动配置 SRGB + Index 来实现标签分发) 所以我们需要用 BGP 来传递中间标签( BGP-LU 标签 )以保证数据包能跨越 ASBR 到达对方网内。之前都是通过 LDP 自动生成的 LSP 来跨越,但是 SR 自治域内不行,必须通过 BGP-LU 将标签包送到 PE 以保证对端 PE/RR 可达性。
RR *不需要* 将 BGP-LU 路由再次反射给其他的 ASBR,只需要反射给 PE 即可。要达到这一点,只需要和 ASBR 之间的邻居不启动 Route-reflector-client 即可( 路由反射器关系之间,非客户端不会传非客户端)
我们将自己的本自治域内的 PE/RR 环回口路由发给对方,并接收对方 RR/PE 环回口路由后,在 RR 上和对方 RR 建立 EBGP VPNv4 邻居,并配置 ext-community 重写:
RP/ 0 /RP0/CPU0:XTC-PCE-AS65000 #show run router bgp
Wed Jun 30 15 : 03 : 10.852 UTC
address-family ipv4 unicast // 激活 BGP 进程的 IPv4 Unicast AF
address-family vpnv4 unicast // 激活 BGP 进程的 VPNv4 Unicast AF
address-family ipv4 labeled-unicast // 激活和 PE 的 Labeled-Unicast NLRI,将从 ASBR 收到的标签信息传送给 PE
route-reflector-client // 激活路由反射器,以保证从 ASBR 收到的信息能反射给 iBGP 邻居 ( RR 非客户端可传客户端 )
address-family vpnv4 unicast // 激活 VPNv4 Unicast AF,传送 L3VPN 路由信息
route-policy pass in // IBGP 其实可以不用配置,但是这是我个人习惯
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
neighbor 10.0 . 1 . 2 // 与对方的域内的 RR 建立邻居关系
ebgp-multihop 255 // 开启 ebgp multihop 功能,因为 ebgp ttl 默认为 1
update-source Loopback0 // 使用 loopback 0 接口和对方建立邻居关系
address-family vpnv4 unicast
route-policy rt_rewrite in // 调用 RPL Policy,重写收到的 ext-community,保证 PE 能收到对方域内的 VPNv4 信息后能导入
route-policy pass out // 发送我方的 VPNv4 信息。因为在 IOS-XR 内,邻居关系是 ebgp 的话,如果不写就不会发送任何信息
// 不要改变下一跳信息。默认情况下,传送给 ebgp 邻居的 BGP 路由信息会改变成自己,这里让系统保持下一跳信息依旧是 PE 环回口,不改变下一跳。
RP/ 0 /RP0/CPU0:XTC-PCE-AS65000 # show rpl
Wed Jun 30 15 : 03 : 15.127 UTC
if extcommunity rt matches- within ( 65001 : 100 ) then
set extcommunity rt ( 65000 : 100 )
end -policy // 简单的 RT 重写规则
// 配置 AS 65000 域内的路由反射器:
RP/0/RP0/CPU0:XTC-PCE-AS65000#show run router bgp
Wed Jun 30 15:03:10.852 UTC
router bgp 65000
bgp router-id 10.0.1.1
address-family ipv4 unicast // 激活 BGP 进程的 IPv4 Unicast AF
!
address-family vpnv4 unicast // 激活 BGP 进程的 VPNv4 Unicast AF
!
neighbor 10.0.0.1
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活和 PE 的 Labeled-Unicast NLRI,将从 ASBR 收到的标签信息传送给 PE
route-reflector-client // 激活路由反射器,以保证从 ASBR 收到的信息能反射给 iBGP 邻居 ( RR 非客户端可传客户端 )
!
address-family vpnv4 unicast // 激活 VPNv4 Unicast AF,传送 L3VPN 路由信息
route-policy pass in // IBGP 其实可以不用配置,但是这是我个人习惯
route-reflector-client
route-policy pass out
!
!
neighbor 10.0.0.3
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
!
!
neighbor 10.0.0.5
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
!
!
neighbor 10.0.1.2 // 与对方的域内的 RR 建立邻居关系
remote-as 65001
ebgp-multihop 255 // 开启 ebgp multihop 功能,因为 ebgp ttl 默认为 1
update-source Loopback0 // 使用 loopback 0 接口和对方建立邻居关系
address-family vpnv4 unicast
route-policy rt_rewrite in // 调用 RPL Policy,重写收到的 ext-community,保证 PE 能收到对方域内的 VPNv4 信息后能导入
route-policy pass out // 发送我方的 VPNv4 信息。因为在 IOS-XR 内,邻居关系是 ebgp 的话,如果不写就不会发送任何信息
next-hop-unchanged
// 不要改变下一跳信息。默认情况下,传送给 ebgp 邻居的 BGP 路由信息会改变成自己,这里让系统保持下一跳信息依旧是 PE 环回口,不改变下一跳。
!
!
!
RP/0/RP0/CPU0:XTC-PCE-AS65000# show rpl
Wed Jun 30 15:03:15.127 UTC
route-policy pass
pass
end-policy
!
route-policy rt_rewrite
if extcommunity rt matches-within (65001:100) then
set extcommunity rt (65000:100)
pass
else
pass
endif
end-policy // 简单的 RT 重写规则
!
// 配置 AS 65000 域内的路由反射器:
RP/0/RP0/CPU0:XTC-PCE-AS65000#show run router bgp
Wed Jun 30 15:03:10.852 UTC
router bgp 65000
bgp router-id 10.0.1.1
address-family ipv4 unicast // 激活 BGP 进程的 IPv4 Unicast AF
!
address-family vpnv4 unicast // 激活 BGP 进程的 VPNv4 Unicast AF
!
neighbor 10.0.0.1
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活和 PE 的 Labeled-Unicast NLRI,将从 ASBR 收到的标签信息传送给 PE
route-reflector-client // 激活路由反射器,以保证从 ASBR 收到的信息能反射给 iBGP 邻居 ( RR 非客户端可传客户端 )
!
address-family vpnv4 unicast // 激活 VPNv4 Unicast AF,传送 L3VPN 路由信息
route-policy pass in // IBGP 其实可以不用配置,但是这是我个人习惯
route-reflector-client
route-policy pass out
!
!
neighbor 10.0.0.3
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
!
!
neighbor 10.0.0.5
remote-as 65000
update-source Loopback0
address-family ipv4 labeled-unicast // 激活与 ASBR 的 Labeled-Unicast NLRI,从 ASBR 接受标签信息
!
!
neighbor 10.0.1.2 // 与对方的域内的 RR 建立邻居关系
remote-as 65001
ebgp-multihop 255 // 开启 ebgp multihop 功能,因为 ebgp ttl 默认为 1
update-source Loopback0 // 使用 loopback 0 接口和对方建立邻居关系
address-family vpnv4 unicast
route-policy rt_rewrite in // 调用 RPL Policy,重写收到的 ext-community,保证 PE 能收到对方域内的 VPNv4 信息后能导入
route-policy pass out // 发送我方的 VPNv4 信息。因为在 IOS-XR 内,邻居关系是 ebgp 的话,如果不写就不会发送任何信息
next-hop-unchanged
// 不要改变下一跳信息。默认情况下,传送给 ebgp 邻居的 BGP 路由信息会改变成自己,这里让系统保持下一跳信息依旧是 PE 环回口,不改变下一跳。
!
!
!
RP/0/RP0/CPU0:XTC-PCE-AS65000# show rpl
Wed Jun 30 15:03:15.127 UTC
route-policy pass
pass
end-policy
!
route-policy rt_rewrite
if extcommunity rt matches-within (65001:100) then
set extcommunity rt (65000:100)
pass
else
pass
endif
end-policy // 简单的 RT 重写规则
!
将 AS 65001 内的路由反射器也按类似配置进行配置,我们在 PE 上看一下标签信息以及路由信息:
R1 # show bgp vpnv4 unicast vrf client 192.168.1.0/24 // 查看 VPNv4 路由
BGP routing table entry for 10.0 . 0.1 : 100 : 192.168 . 1 . 0 / 24 , version 12
Paths: ( 1 available, best #1, table client)
Not advertised to any peer
65001 , imported path from 10.0 . 0.10 : 100 : 192.168 . 1 . 0 / 24 ( global )
10.0 . 0.10 ( metric 25 ) ( via default ) from 10.0 . 1 . 1 ( 10.0 . 1 . 1 )
Origin IGP, localpref 100 , valid, internal, best
Extended Community: RT: 65000 : 100 // 重写 RT
mpls labels in /out nolabel/ 19 // VPN label
rx pathid: 0 , tx pathid: 0x0
Updated on Jun 30 2021 10 : 59 : 35 UTC
R1 # show ip route 10.0.0.10 // VPNv4 下一跳路由
Routing entry for 10.0 . 0.10 / 32
Known via "bgp 65000" , distance 200 , metric 25
Last update from 10.0 . 0.5 04 : 24 : 48 ago
Routing Descriptor Blocks:
* 10.0 . 0.5 , from 10.0 . 1 . 1 , 04 : 24 : 48 ago // 下一跳为 ASBR
opaque_ptr 0x7F5D8B19ED28
Route metric is 25 , traffic share count is 1
MPLS label: 18 // 通过 BGP 学习到的下一跳标签( BGP-LU )
R1 #show ip route 10.0.0.5 // 查看 ASBR 的路由
Routing entry for 10.0 . 0.5 / 32
Known via "isis" , distance 115 , metric 25 , type level- 2
Redistributing via isis 1
Last update from 10.10 . 14 . 4 on GigabitEthernet6, 2d18h ago
Routing Descriptor Blocks:
* 10.10 . 14 . 4 , from 10.0 . 0.5 , 2d18h ago, via GigabitEthernet6, prefer-non-rib-labels, merge-labels
Route metric is 25 , traffic share count is 1
MPLS label: 16005 // SR Label
R1# show bgp vpnv4 unicast vrf client 192.168.1.0/24 // 查看 VPNv4 路由
BGP routing table entry for 10.0.0.1:100:192.168.1.0/24, version 12
Paths: (1 available, best #1, table client)
Flag: 0x100
Not advertised to any peer
Refresh Epoch 1
65001, imported path from 10.0.0.10:100:192.168.1.0/24 (global)
10.0.0.10 (metric 25) (via default) from 10.0.1.1 (10.0.1.1)
Origin IGP, localpref 100, valid, internal, best
Extended Community: RT:65000:100 // 重写 RT
mpls labels in/out nolabel/19 // VPN label
rx pathid: 0, tx pathid: 0x0
Updated on Jun 30 2021 10:59:35 UTC
R1# show ip route 10.0.0.10 // VPNv4 下一跳路由
Routing entry for 10.0.0.10/32
Known via "bgp 65000", distance 200, metric 25
Tag 65001, type internal
Last update from 10.0.0.5 04:24:48 ago
Routing Descriptor Blocks:
* 10.0.0.5, from 10.0.1.1, 04:24:48 ago // 下一跳为 ASBR
opaque_ptr 0x7F5D8B19ED28
Route metric is 25, traffic share count is 1
AS Hops 1
Route tag 65001
MPLS label: 18 // 通过 BGP 学习到的下一跳标签( BGP-LU )
R1#show ip route 10.0.0.5 // 查看 ASBR 的路由
Routing entry for 10.0.0.5/32
Known via "isis", distance 115, metric 25, type level-2
Redistributing via isis 1
Last update from 10.10.14.4 on GigabitEthernet6, 2d18h ago
SR Incoming Label: 16005
Routing Descriptor Blocks:
* 10.10.14.4, from 10.0.0.5, 2d18h ago, via GigabitEthernet6, prefer-non-rib-labels, merge-labels
Route metric is 25, traffic share count is 1
MPLS label: 16005 // SR Label
MPLS Flags: NSF
R1# show bgp vpnv4 unicast vrf client 192.168.1.0/24 // 查看 VPNv4 路由
BGP routing table entry for 10.0.0.1:100:192.168.1.0/24, version 12
Paths: (1 available, best #1, table client)
Flag: 0x100
Not advertised to any peer
Refresh Epoch 1
65001, imported path from 10.0.0.10:100:192.168.1.0/24 (global)
10.0.0.10 (metric 25) (via default) from 10.0.1.1 (10.0.1.1)
Origin IGP, localpref 100, valid, internal, best
Extended Community: RT:65000:100 // 重写 RT
mpls labels in/out nolabel/19 // VPN label
rx pathid: 0, tx pathid: 0x0
Updated on Jun 30 2021 10:59:35 UTC
R1# show ip route 10.0.0.10 // VPNv4 下一跳路由
Routing entry for 10.0.0.10/32
Known via "bgp 65000", distance 200, metric 25
Tag 65001, type internal
Last update from 10.0.0.5 04:24:48 ago
Routing Descriptor Blocks:
* 10.0.0.5, from 10.0.1.1, 04:24:48 ago // 下一跳为 ASBR
opaque_ptr 0x7F5D8B19ED28
Route metric is 25, traffic share count is 1
AS Hops 1
Route tag 65001
MPLS label: 18 // 通过 BGP 学习到的下一跳标签( BGP-LU )
R1#show ip route 10.0.0.5 // 查看 ASBR 的路由
Routing entry for 10.0.0.5/32
Known via "isis", distance 115, metric 25, type level-2
Redistributing via isis 1
Last update from 10.10.14.4 on GigabitEthernet6, 2d18h ago
SR Incoming Label: 16005
Routing Descriptor Blocks:
* 10.10.14.4, from 10.0.0.5, 2d18h ago, via GigabitEthernet6, prefer-non-rib-labels, merge-labels
Route metric is 25, traffic share count is 1
MPLS label: 16005 // SR Label
MPLS Flags: NSF
学习的信息都是正确的,我们开始从 PE 上测试路径:
R1 #traceroute vrf client 192.168.1.2 source 192.168.0.1
Type escape sequence to abort.
Tracing the route to 192.168 . 1 . 2
VRF info: ( vrf in name/id, vrf out name/id )
1 10.10 . 14 . 4 [ MPLS: Labels 16005 / 18 / 19 Exp 0 ] 20 msec 5 msec 6 msec
2 10.10 . 45 . 5 [ MPLS: Labels 18 / 19 Exp 0 ] 14 msec 4 msec 7 msec
3 10.10 . 58 . 8 [ MPLS: Labels 16010 / 19 Exp 0 ] 5 msec 4 msec 6 msec
4 10.10 . 89 . 9 [ MPLS: Labels 16010 / 19 Exp 0 ] 6 msec 5 msec 4 msec
5 192.168 . 1 . 1 11 msec 3 msec 3 msec
6 192.168 . 1 . 2 4 msec 4 msec 4 msec
R1#traceroute vrf client 192.168.1.2 source 192.168.0.1
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
1 10.10.14.4 [MPLS: Labels 16005/18/19 Exp 0] 20 msec 5 msec 6 msec
2 10.10.45.5 [MPLS: Labels 18/19 Exp 0] 14 msec 4 msec 7 msec
3 10.10.58.8 [MPLS: Labels 16010/19 Exp 0] 5 msec 4 msec 6 msec
4 10.10.89.9 [MPLS: Labels 16010/19 Exp 0] 6 msec 5 msec 4 msec
5 192.168.1.1 11 msec 3 msec 3 msec
6 192.168.1.2 4 msec 4 msec 4 msec
R1#traceroute vrf client 192.168.1.2 source 192.168.0.1
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
1 10.10.14.4 [MPLS: Labels 16005/18/19 Exp 0] 20 msec 5 msec 6 msec
2 10.10.45.5 [MPLS: Labels 18/19 Exp 0] 14 msec 4 msec 7 msec
3 10.10.58.8 [MPLS: Labels 16010/19 Exp 0] 5 msec 4 msec 6 msec
4 10.10.89.9 [MPLS: Labels 16010/19 Exp 0] 6 msec 5 msec 4 msec
5 192.168.1.1 11 msec 3 msec 3 msec
6 192.168.1.2 4 msec 4 msec 4 msec
可以看到标签是三层,我们来分析一下标签组成:
首先 PE 压入最底层的 VPN 标签,19 查看 VPN 路由的下一跳 10.0.0.10,携带 MPLS 标签 18,压入中间标签 再查看 10.0.0.10 的下一跳是 10.0.0.5,lookup 可知 SR 标签为 16005,压入
所以路径标签是 16005 | 18 | 19
再讲一下转发过程:
首先根据 16005 转发到 ASBR R5(倒数第二跳弹掉 16005 后发送给 R5) R5 根据中层标签,查询 MPLS 转发表,发现是下一跳是对端的 ASBR,替换掉标签至 16010 (从 BGP 学习得到 ) 进入 AS 65001 域内,ASBR 根据顶层标签 16010 转发到 R10 (倒数第二跳弹出后发给 PE) 数据包到达 PE,解析 VPN 标签后,根据路由/ARP 表查询,发送给 CE 或自己处理
最后我们在 CE 上做一下 traceroute:
root@Client-A:~ # mtr 192.168.1.2 --report -n
Start: 2021 - 06 -30T16: 17 : 10 + 0000
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1. |-- 192.168 . 0 . 1 0 . 0 % 10 0.9 1.2 0.5 5 . 5 1.5
2. |-- 10.10 . 14 . 4 0 . 0 % 10 6.7 11.7 6.7 16.7 3.5
3. |-- 10.10 . 45 . 5 0 . 0 % 10 6.8 7.6 4.5 16.8 3.6
4. |-- 10.10 . 58 . 8 0 . 0 % 10 5.9 7 . 7 4.9 12.9 2.5
5. |-- 10.10 . 89 . 9 0 . 0 % 10 3.9 7.1 3.6 12.3 2.9
6. |-- 192.168 . 1 . 1 0 . 0 % 10 10.4 9.0 4.6 13.0 3.0
7. |-- 192.168 . 1 . 2 0 . 0 % 10 6.2 6.0 3.6 9.7 2.1
root@Client-A:~# mtr 192.168.1.2 --report -n
Start: 2021-06-30T16:17:10+0000
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.0.1 0.0% 10 0.9 1.2 0.5 5.5 1.5
2.|-- 10.10.14.4 0.0% 10 6.7 11.7 6.7 16.7 3.5
3.|-- 10.10.45.5 0.0% 10 6.8 7.6 4.5 16.8 3.6
4.|-- 10.10.58.8 0.0% 10 5.9 7.7 4.9 12.9 2.5
5.|-- 10.10.89.9 0.0% 10 3.9 7.1 3.6 12.3 2.9
6.|-- 192.168.1.1 0.0% 10 10.4 9.0 4.6 13.0 3.0
7.|-- 192.168.1.2 0.0% 10 6.2 6.0 3.6 9.7 2.1
root@Client-A:~# mtr 192.168.1.2 --report -n
Start: 2021-06-30T16:17:10+0000
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.0.1 0.0% 10 0.9 1.2 0.5 5.5 1.5
2.|-- 10.10.14.4 0.0% 10 6.7 11.7 6.7 16.7 3.5
3.|-- 10.10.45.5 0.0% 10 6.8 7.6 4.5 16.8 3.6
4.|-- 10.10.58.8 0.0% 10 5.9 7.7 4.9 12.9 2.5
5.|-- 10.10.89.9 0.0% 10 3.9 7.1 3.6 12.3 2.9
6.|-- 192.168.1.1 0.0% 10 10.4 9.0 4.6 13.0 3.0
7.|-- 192.168.1.2 0.0% 10 6.2 6.0 3.6 9.7 2.1
基于 SR 的 MPLS VPN Option-C 搭建完成。
《[ BGP ] 搭建基于 Segment Routing 的 MPLS VPN Option-C.2》有1个想法
有人知道他在说什么吗