使用EVE-NG实现MPLS-VPN Option C 方案
起因是《segment routing 卷一》看到了MPLS-BGP控制层面有点糊涂了,大概是考完试就没有碰MPLS的原因,把大部分的理论都忘光光,然后把Option A、B、C重新复习了一边。
1.前言
MPLS-VPN Option C 方案的优缺点这里就不提了,让我们直接实验的过程中回想起MPLS和跨域的工作方法吧。
2.实验环境
- 模拟器 EVE-NG社区版 (下载地址)
3.镜像
- vios-adventerprisek9-m
- 镜像系统版本Version 15.7(3)M3, RELEASE SOFTWARE (fc2)
镜像资源可以从这搜寻,按需下载并导入:链接
4.拓扑图
说明
角色定义
PE:每个AS域内与外部客户所连接的路由器,类如vISO2、vIOS7;
P:不参与MPLS-VPN转发的路由器,类如vIOS3~6;
ASBR:和其他AS域互联的路由器,类如:vIOS4、vIOS5
CE:代表客户的路由器,类如vIOS1、vIOS8;
接口及命名规则
每个vIOS(路由器)采用R+数字的命名方法,即vIOS1=R1、vIOS2=R2,诸如类推;
每个路由器建立loopback 0接口,并且ip格式为1.1.1.1/32,R2即2.2.2.2/32,诸如类推;
每个路由器互联接口IP根据其名词来决定,即R1和R2互联地址是12.1.1.1/24和12.1.1.2/24,R2和R3的互联地址为23.1.1.2/24和23.1.1.3/24,诸如类推。
路由设定
每个AS域内启用OSPF并且进程号为110,互联接口设定成PTP模式,使用loopback 0 作为router-id;
而与CE路由器则使用EBGP互联。
5.配置过程
5.1接口
这里略高
5.2IGP/LDP
这里也略过,毕竟都谈到Option C了,BGP作为TCP路由协议需要依靠IGP来作为底层打通可达才能建立邻居,这一点你该不会不知道吧。
所以这里就给每个AS内的三台路由器建立OSPF邻居,并且把环回口、互联口宣告进OSPF进程,但是不需要把两个AS之间的互联口、连接PE的接口也宣告进OSPF。
同时MPLS的L代表labels,那也就是需要开启LDP协议来分发标签,我想你应该也知道,所以需要在每个启用OSPF的接口上同时启用MPLS IP。
MPLS 配置
mpls label protocol ldp
mpls ldp router-id Loopback0 force
interface [接口]
mpls ip
5.3VRF
两台PE需要建立VRF来接收CE发过来的路由,打上标签后形成VPNV4路由并装入VRF 路由表。fuckstp是VRF的名字,rd10:10 用来区分CE发过来的私网路由,route-target(RT)则用来区分从PE发过来的vpnv4路由,这里由于是代表同一个客户的两个分支点之间的路由,所以RD\RT都是一样。
VRF 配置(两台PE R2\R7 配置均一样)
vrf definition fuckstp
rd 10:10
!
address-family ipv4
route-target export 10:10
route-target import 10:10
exit-address-family
!
将接口划入VRF,配置后会删除接口下的所有配置,所以需要重新配置一下。
interface GigabitEthernet0/0
vrf forwarding fuckstp
!
5.4BGP
CE需要发送路由到PE,方法有可以选择静态、IGP、BGP,这里选用BGP来和PE建立邻居发送路由
R1
router bgp 10
bgp router-id 1.1.1.1
redistribute connected
neighbor 12.1.1.2 remote-as 100
R8
router bgp 20
bgp router-id 8.8.8.8
redistribute connected
neighbor 78.1.1.7 remote-as 200
#我偷懒将所有直连路由重分发进入BGP,正常应该选择network进行宣告或则重分发IGP路由。
AS100/200 中的ASBR路由器(R4、R5)配置BGP只需要建立eBGP邻居,但是同时需要和IGP互相重分发来达成两个AS内的路由可达,之后再启动send-labels功能来给BGP分发标签(由于LDP默认是不给BGP路由分发标签的)。
R4
router ospf 110
router-id 4.4.4.4
redistribute bgp 100 subnets#重分发路由进入OSPF记得要加subnets参数
!
router bgp 100
bgp router-id 4.4.4.4
neighbor 45.1.1.5 remote-as 200
!
address-family ipv4
redistribute ospf 110 match internal external 1 external 2
neighbor 45.1.1.5 activate
neighbor 45.1.1.5 send-label#为BGP路由分发标签
exit-address-family
////////////////////////////
R5
router ospf 110
router-id 5.5.5.5
redistribute bgp 200 subnets#重分发路由进入OSPF记得要加subnets参数
!
router bgp 200
bgp router-id 5.5.5.5
neighbor 45.1.1.4 remote-as 100
!
address-family ipv4
redistribute ospf 110 match internal external 1 external 2
neighbor 45.1.1.4 activate
neighbor 45.1.1.4 send-label#为BGP路由分发标签
exit-address-family
PE路由器(R2、R7)先和CE路由器(R1、R8)建立基于VRF的iBGP邻居,接收客户发过来路由,再互相建立VPNv4邻居来发送VPNv4路由,通过RT(router-tager)来区分客户,该例子中由于是相同客户所以选择一样的RT。
R2
router bgp 100
bgp router-id 2.2.2.2
neighbor 7.7.7.7 remote-as 200
neighbor 7.7.7.7 ebgp-multihop 255#因为跨域所以需要配置该参数
neighbor 7.7.7.7 update-source Loopback0
!
address-family vpnv4
neighbor 7.7.7.7 activate
neighbor 7.7.7.7 send-community extended
exit-address-family
!
address-family ipv4 vrf fuckstp
neighbor 12.1.1.1 remote-as 10
neighbor 12.1.1.1 activate
exit-address-family
///////////////////
R7
router bgp 200
bgp router-id 7.7.7.7
neighbor 2.2.2.2 remote-as 100#因为跨域所以需要配置该参数
neighbor 2.2.2.2 ebgp-multihop 255
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
!
address-family ipv4 vrf fuckstp
neighbor 78.1.1.8 remote-as 20
neighbor 78.1.1.8 activate
exit-address-family
5.5验证配置
使用下面的命令来验证邻居是否建立成功、路由表是否有路由
show bgp vpnv4 unicast all summary
R2
BGP router identifier 2.2.2.2, local AS number 100
BGP table version is 7, main routing table version 7
4 network entries using 624 bytes of memory
4 path entries using 336 bytes of memory
3/2 BGP path/bestpath attribute entries using 504 bytes of memory
2 BGP AS-PATH entries using 48 bytes of memory
1 BGP extended community entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1536 total bytes of memory
BGP activity 4/0 prefixes, 4/0 paths, scan interval 60 secs
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
7.7.7.7 4 200 266 264 7 0 0 03:57:11 2
12.1.1.1 4 10 264 264 7 0 0 03:58:09 2
如果你的配置没错,那么返回结果就如上,建立的7.7.7.7是对方AS内的PE路由,而12.1.1.1则是CE的eBGP路由邻居,相反R7也应该如此。
show bgp vpnv4 uni vrf fuckstp #查看vrf fuckstp下的vpnv4路由表
R2
BGP table version is 7, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 10:10 (default for vrf fuckstp)
*> 1.1.1.1/32 12.1.1.1 0 0 10 ?
*> 8.8.8.8/32 7.7.7.7 0 200 20 ?
r> 12.1.1.0/24 12.1.1.1 0 0 10 ?
*> 78.1.1.0/24 7.7.7.7 0 200 20 ?
你可以看到路由表内装有R8的环回口路由,因为我们刚刚在R8上直接redistribution connect,会把环回口也包括在内分发到BGP,并且通过vpnv4发送到R2上,相反R7也应该如此。
来再看看两个CE是否收到了对方的路由,细心的可以留意到双方都有对方的环回口路由和出口路由。
R1
R1#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
C 1.1.1.1 is directly connected, Loopback0
8.0.0.0/32 is subnetted, 1 subnets
B 8.8.8.8 [20/0] via 12.1.1.2, 04:02:30
12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 12.1.1.0/24 is directly connected, GigabitEthernet0/0
L 12.1.1.1/32 is directly connected, GigabitEthernet0/0
78.0.0.0/24 is subnetted, 1 subnets
B 78.1.1.0 [20/0] via 12.1.1.2, 04:02:30
/////////
R8#show ip rou
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
1.0.0.0/32 is subnetted, 1 subnets
B 1.1.1.1 [20/0] via 78.1.1.7, 04:03:08
8.0.0.0/32 is subnetted, 1 subnets
C 8.8.8.8 is directly connected, Loopback0
12.0.0.0/24 is subnetted, 1 subnets
B 12.1.1.0 [20/0] via 78.1.1.7, 04:03:08
78.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 78.1.1.0/24 is directly connected, GigabitEthernet0/0
L 78.1.1.8/32 is directly connected, GigabitEthernet0/0
6.测试连通性
Ping和tracert一下~
从图中的traceroute结果可以得知在报文的传递过程中是含有双重标签的,内层标签一直是“25”,而外层标签一直随着传递的过程而不停改变。
标签的分配(R1视角):
- 内部标签“25”,由对方PE路由器分配()并通过VPNv4传递到我方PE路由器上。
- 外部标签由本地分配,是目的地的下一跳路由IP的标签,在LDP邻居中互相传递。
由于两个AS之间建立的是EBGP邻居、传递EBGP路由,并且LDP不会为EBGP路由通过标签,所以需要使用Send-labels特性使其能够强制传递。本实验的例子中,R1去往目的地8.8.8.8的下一跳地址是7.7.7.7,在两个AS边界的路由器上传递的时候若没启用该特性会导致LSP路径中断而使MPLS网络断开。
我希望这样表述能让你看懂,Option C的重点就是如何使对方的ASBR路由器能够得知有关目的地的下一跳路由的标签,从而使整条转发路径的LSP能够建立起来。