hale
Published on 2024-11-22 / 12 Visits
0
0

SRv6 BE 模拟实验

SRv6(Segment Routing IPv6)是一种基于IPv6的分段路由技术,它通过在IPv6数据包头部的扩展字段中嵌入路由信息来实现灵活而高效的数据包转发。SRv6借鉴了分段路由(Segment Routing)的概念,将其应用于IPv6网络中。

SRv6的核心思想是使用IPv6地址空间中的可编程段(Segment)来表示网络路径。每个段代表了网络中的一个特定节点或者链路。SRv6通过将这些段按照特定的顺序编排组成路径,从而指定数据包的转发路径。

SRv6的优势包括以下几个方面:

1. 灵活性:SRv6允许管理员在网络中定义和配置灵活的路径,以适应各种应用和业务需求。通过将不同的段组合,管理员可以指定数据包的具体路径,实现精确的流量控制和定制化的路由。

2. 简化网络:SRv6避免了传统路由协议中需要维护大量状态信息的问题,使网络更加简洁高效。SRv6节点只需要关注下一个段的信息,而不需要了解整个路径,这降低了节点的复杂性。

3. 网络编程:SRv6提供了一种基于网络的编程模型,使得网络可以根据应用需求进行编程和自动化操作。管理员可以使用SRv6来定义各种服务链、流量工程和路径优化策略,从而实现网络的动态调整和优化。

4. 可扩展性:SRv6采用了IPv6地址空间作为路径标识符,IPv6具有充足的地址资源,可以支持大规模网络部署和快速扩展。

SRv6的应用场景非常广泛,包括:

1. 流量工程:SRv6可以用于实现灵活的流量工程,根据应用需求和网络状态优化数据包的转发路径,实现负载均衡、拥塞避免等功能。

2. 服务链路:SRv6可以用于定义和管理服务链,将不同的网络服务(如防火墙、负载均衡器等)组合在一起,构建灵活的服务链路。

3. 网络切片:SRv6可以用于实现网络切片,将物理网络划分为多个逻辑网络,为不同的应用或用户提供独立的网络资源。

4. 数据中心互连:SRv6可以用于实现数据中心之间的互连,构建高效、灵活的云网络。

需要注意的是,SRv6是一个较新的技术,在广泛部署。

实验过程

拓扑图

如图所示,接口IPv6地址已经在图中进行标注,对设备的Loactor进行手动添加,Function(也叫Opcode)静态配置,Arguments不进行配置。

注:静态配置SID时,SID只占用静态段范围,静态段取值从1开始,动态段设置为0;动态分配SID时,SID会占用动态段和静态段范围,动态段取值从1开始,静态段取值从0开始。使用动态生成的SID的话,如果设备重启,SID会变化,不利于维护。

本次实验所使用的IGP使用ISIS来承载,ISIS即支持IPv4,也支持IPv6。

1、首先配置ISIS并开启IPv6,然后为相应的接口添加IPv6地址,最后在接口上开启ISIS协议

[CX1]isis 1 //进入isis 1视图
[CX1-isis-1] is-level level-2 //配置is区域级别为level2
[CX1-isis-1] cost-style wide //配置开销类型为wide
[CX1-isis-1] network-entity 49.0001.0000.0001.00 //发布网络区域实体
[CX1-isis-1] is-name CX1 //将isis名称修改为CX1
[CX1-isis-1] ipv6 enable topology standard //开启IPv6(默认为多topo)
 
[CX1]undo dcn
[CX1]interface Ethernet1/0/0
[CX1-Ethernet1/0/0] undo shutdown
[CX1-Ethernet1/0/0] ipv6 enable //开启接口IPv6功能
[CX1-Ethernet1/0/0] ipv6 address 2013::1/124 //为接口添加IPv6地址
[CX1-Ethernet1/0/0] isis ipv6 enable 1 //开启基于IPv6的ISIS功能
 
[CX1]interface LoopBack0
[CX1-LoopBack0] ipv6 enable //开启环回口IPv6功能
[CX1-LoopBack0] ipv6 address 2001::1/128 //为环回口添加IPv6地址
[CX1-LoopBack0] isis ipv6 enable 1 //开启基于IPv6的ISIS功能
[CX2] undo dcn
[CX2]isis 1
[CX2-isis-1] is-level level-2
[CX2-isis-1] cost-style wide
[CX2-isis-1] network-entity 49.0001.0000.0002.00
[CX2-isis-1] is-name CX2
[CX2-isis-1] ipv6 enable topology standard
[CX2-isis-1]quit
 
[CX2]interface Ethernet1/0/0
[CX2-Ethernet1/0/0] undo shutdown
[CX2-Ethernet1/0/0] ipv6 enable
[CX2-Ethernet1/0/0] ipv6 address 2023::2/124
[CX2-Ethernet1/0/0] isis enable 1
[CX2-Ethernet1/0/0] isis ipv6 enable 1
[CX2-Ethernet1/0/0]quit
 
[CX2]interface Ethernet1/0/1
[CX2-Ethernet1/0/1] undo shutdown
[CX2-Ethernet1/0/1] ipv6 enable
[CX2-Ethernet1/0/1] ipv6 address 2024::2/124
[CX2-Ethernet1/0/1] isis ipv6 enable 1
 
[CX2]interface LoopBack0
[CX2-LoopBack0] ipv6 enable
[CX2-LoopBack0] ipv6 address 2001::2/128
[CX2-LoopBack0] isis ipv6 enable 1
[CX3] undo dcn
[CX3]isis 1
[CX3-isis-1] is-level level-2
[CX3-isis-1] cost-style wide
[CX3-isis-1] network-entity 49.0001.0000.0003.00
[CX3-isis-1] is-name CX3
[CX3-isis-1] ipv6 enable topology standard
[CX3-isis-1] quit
 
[CX3]interface Ethernet1/0/0
[CX3-Ethernet1/0/0] undo shutdown
[CX3-Ethernet1/0/0] ipv6 enable
[CX3-Ethernet1/0/0] ipv6 address 2013::3/124
[CX3-Ethernet1/0/0] isis ipv6 enable 1
[CX3-Ethernet1/0/0]quit
 
[CX3]interface Ethernet1/0/1
[CX3-Ethernet1/0/1] undo shutdown
[CX3-Ethernet1/0/1] ipv6 enable
[CX3-Ethernet1/0/1] ipv6 address 2023::3/124
[CX3-Ethernet1/0/1] isis ipv6 enable 1
[CX3-Ethernet1/0/1]quit
 
[CX3]interface Ethernet1/0/2
[CX3-Ethernet1/0/2] undo shutdown
[CX3-Ethernet1/0/2] ipv6 enable
[CX3-Ethernet1/0/2] ipv6 address 2034::3/124
[CX3-Ethernet1/0/2] isis ipv6 enable 1
[CX3-Ethernet1/0/2] quit
 
[CX3]interface LoopBack0
[CX3-LoopBack0] ipv6 enable
[CX3-LoopBack0] ipv6 address 2001::3/128
[CX3-LoopBack0] isis ipv6 enable 1
[CX4]isis 1
[CX4-isis-1] is-level level-2
[CX4-isis-1] cost-style wide
[CX4-isis-1] network-entity 49.0001.0000.0004.00
[CX4-isis-1] is-name CX4
[CX4-isis-1] ipv6 enable topology standard
 
[CX4] undo dcn
[CX4]interface Ethernet1/0/0
[CX4-Ethernet1/0/0] undo shutdown
[CX4-Ethernet1/0/0] ipv6 enable
[CX4-Ethernet1/0/0] ipv6 address 2024::4/124
[CX4-Ethernet1/0/0] isis ipv6 enable 1
 
[CX4]interface Ethernet1/0/1
[CX4-Ethernet1/0/1] undo shutdown
[CX4-Ethernet1/0/1] ipv6 enable
[CX4-Ethernet1/0/1] ipv6 address 2034::4/124
[CX4-Ethernet1/0/1] isis ipv6 enable 1
 
[CX4]interface Ethernet1/0/2
[CX4-Ethernet1/0/1] undo shutdown
[CX4-Ethernet1/0/1] ipv6 enable
[CX4-Ethernet1/0/1] ipv6 address 2045::4/124
[CX4-Ethernet1/0/1] isis ipv6 enable 1
 
[CX4]interface LoopBack0
[CX4-LoopBack0] ipv6 enable
[CX4-LoopBack0] ipv6 address 2001::4/128
[CX4-LoopBack0] isis ipv6 enable 1
[CX5]isis 1
[CX5-isis-1] is-level level-2
[CX5-isis-1] cost-style wide
[CX5-isis-1] network-entity 49.0001.0000.0005.00
[CX5-isis-1] is-name CX5
[CX5-isis-1] ipv6 enable topology standard
 
[CX5] undo dcn
[CX5]interface Ethernet1/0/0
[CX5-Ethernet1/0/0] undo shutdown
[CX5-Ethernet1/0/0] ipv6 enable
[CX5-Ethernet1/0/0] ipv6 address 2045::5/124
[CX5-Ethernet1/0/0] isis ipv6 enable 1
 
[CX5]interface LoopBack0
[CX5-LoopBack0] ipv6 enable
[CX5-LoopBack0] ipv6 address 2001::5/128
[CX5-LoopBack0] isis ipv6 enable 1

配置完成后查看ISIS邻居及路由情况。

可以看到已经全部建立成了Level2的邻居。

为了保险起见我们可以使用下面这条命令来查看有没有漏掉接口关于发布ISIS的配置。

接着查看ISIS路由,然后验证可达性。

可以看到已经学习到了所有设备的接口以及环回口的路由,接下来我们配置SRv6

2、开启SRv6并进入该视图,在视图内创建SRv6 SID,此次配置我们通过静态配置,下面我们先讲解SRv6 ID的组成,然后通过一张表来理解end、end-x的作用。

Locator配置格式:

Locator作用:

Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点,实现网络指令的可寻址。

Function配置格式:

Funtion作用:

Function用来标识该指令要执行的转发动作。在SRv6网络编程中,不同的转发行为由不同的Function来标识,例如在RFC中定义了公认的End、End.X、End.DX4、End.DX6等。

类型

功能描述

发布协议

类型

End

表示Endpoint SID,用于标识网络中的某个目的节点Node)。对应的转发动作(Function)是:更新IPv6 DA,查找IPv6 FIB进行报文转发。

IGP

路径SID

End.X

表示三层交叉连接的Endpoint SID,用于标识网络中的某条链路。对应的转发动作是:更新IPv6 DA,从End.X SID绑定的出接口转发报文。

IGP

路径SID

End.DT4

表示PE类型的Endpoint SID,用于标识网络中的某个IPv4 VPN实例。对应的转发动作是:解封装报文,并且查找IPv4 VPN实例路由表转发。End.DT4 SID在L3VPNv4场景使用,等价于IPv4 VPN的标签。

BGP

业务SID

End.DT6

表示PE类型的Endpoint SID,用于标识网络中的某个IPv6 VPN实例。对应的转发动作是:解封装报文,并且查找IPv6 VPN实例路由表转发。 End.DT6 SID在L3VPNv6场景使用,等价于IPv6 VPN的标签

BGP

业务SID

End就相当于我们在SR中的节点的SID,End.X就相当于SR中的链路的SID,而这些SID是通过我们的ISIS路由表来进行承载转发的。

接着我们进行Locator的配置。

注:Locator具有定位功能,所以一般要在SR域内唯一。

[CX1]segment-routing ipv6 //开启并进入SRv6的视图
[CX1-segment-routing-ipv6] encapsulation source-address 2001::1 //封装原地址为环回口地址
[CX1-segment-routing-ipv6] locator huawei ipv6-prefix C100:: 96 static 16 //新建名为huawei的locator,ipv6前缀为C100:: 掩码为96位,静态和动态各占16位
[CX1-segment-routing-ipv6-locator]  opcode ::1 end //配置节点的SID,function为::1,此时没有Arguments,那么SRv6 SID的值为C100::1
[CX1-segment-routing-ipv6-locator]  opcode ::13 end-x interface Ethernet1/0/0 nexthop 2013::3 //配置链路的SID,此Function的行为表示将报文从指定接口(G1/0/0),转发给对应的邻居节点(2013::3)。
[CX2-segment-routing-ipv6]segment-routing ipv6
[CX2-segment-routing-ipv6] encapsulation source-address 2001::2
[CX2-segment-routing-ipv6] locator huawei ipv6-prefix C200:: 96 static 16
[CX2-segment-routing-ipv6-locator]  opcode ::1 end
[CX2-segment-routing-ipv6-locator]  opcode ::23 end-x interface Ethernet1/0/0 nexthop 2023::3
[CX2-segment-routing-ipv6-locator]  opcode ::24 end-x interface Ethernet1/0/1 nexthop 2024::4
[CX3]segment-routing ipv6
[CX3-segment-routing-ipv6] encapsulation source-address 2001::3
[CX3-segment-routing-ipv6] locator huawei ipv6-prefix C300:: 96 static 16
[CX3-segment-routing-ipv6-locator]  opcode ::1 end
[CX3-segment-routing-ipv6-locator]  opcode ::31 end-x interface Ethernet1/0/0 nexthop 2013::1
[CX3-segment-routing-ipv6-locator]  opcode ::32 end-x interface Ethernet1/0/1 nexthop 2023::2
[CX3-segment-routing-ipv6-locator]  opcode ::34 end-x interface Ethernet1/0/2 nexthop 2034::4
[CX4]segment-routing ipv6
[CX4-segment-routing-ipv6] encapsulation source-address 2001::4
[CX4-segment-routing-ipv6] locator huawei ipv6-prefix C400:: 96 static 16
[CX4-segment-routing-ipv6-locator]  opcode ::1 end
[CX4-segment-routing-ipv6-locator]  opcode ::42 end-x interface Ethernet1/0/0 nexthop 2024::2
[CX4-segment-routing-ipv6-locator]  opcode ::43 end-x interface Ethernet1/0/1 nexthop 2034::3
[CX4-segment-routing-ipv6-locator]  opcode ::45 end-x interface Ethernet1/0/2 nexthop 2045::5
[CX5]segment-routing ipv6
[CX5-segment-routing-ipv6] encapsulation source-address 2001::5
[CX5-segment-routing-ipv6] locator huawei ipv6-prefix C500:: 96 static 16
[CX5-segment-routing-ipv6-locator]  opcode ::1 end
[CX5-segment-routing-ipv6-locator]  opcode ::54 end-x interface Ethernet1/0/0 nexthop 2045::4

配置完成后我们查看节点的SID和链路的SID。

从节点的SID我们可以看到两条,第一条是我们静态配置的,第二条是动态生成的,我们静态配置的附加行为为PSP,那么我们先了解一下PSP的动作是什么。

附加行为

功能描述

附着的End指令

PSP

在倒数第二个Endpoint节点执行移除SRH操作。

End、End.X、End.DT2、End.DT4、End.DT6

USP

在最后一个Endpoint节点执行移除SRH操作。

End、End.X、End.DT2、End.DT4、End.DT6

USD

在最后一个Endpoint节点执行解封装外层IPv6报文头操作。

End、End.X、End.DT2、End.DT4、End.DT6

从表中可以看到,在第二个Endpoint节点执行移除SRH操作,类似于MPLS中的倒数第二条弹出。

接着我们查看链路的SID。

在链路的SID上我们同样也能看到两条SID一条为动态生成的一条为静态配置的,我们只是在CX5上产看了关于链路、节点的SID相关信息,因为CX5只启用了一条链路,所以只会存在一条静态和动态,这个数量是根据启用的接口数量来判断的。

前面我们说过SRv6的SID是通过IGP协议来扩散的,那么我们将刚才创建的Locator发布到ISIS区域内,使其扩散到全网并关闭动态生成的SID。

[CX1]isis 1 //进入isis区域1的视图下
[CX1-isis-1] segment-routing ipv6 locator huawei auto-sid-disable //配置isis SRv6的locator并取消SID自动分配功能
[CX2]isis 1
[CX2-isis-1] segment-routing ipv6 locator huawei auto-sid-disable
[CX3]isis 1
[CX3-isis-1] segment-routing ipv6 locator huawei auto-sid-disable
[CX4]isis 1
[CX4-isis-1] segment-routing ipv6 locator huawei auto-sid-disable
[CX5]isis 1
[CX5-isis-1] segment-routing ipv6 locator huawei auto-sid-disable

接着我们再次查看链路和节点的SID。

可以看到动态分配的SID已经消失了,接着我们查看ISIS IPv6的路由表。

可以看到Locator成功通过ISIS进行扩散。

接着我们测试一下SID的连通性,我们按照途中的路径1-3-2-4-5来测试。

可以看到,所有的节点SID以及链路SID都正常访问。

3、在CX1和CX5模拟互联,创建VPN实例并绑定到环回口1,接着创建BGP邻居,使用IPv6地址来建立VPNv4的邻居关系,接着在VPN实例下关联SRv6的Locator并启动BE隧道。

首先创建VRF并绑定到LoopBack1口。

[CX1]ip vpn-instance huawei //创建名为huawei的vrf
[CX1-vpn-instance-huawei] ipv4-family //进入ipv4的地址族
[CX1-vpn-instance-huawei-af-ipv4]  route-distinguisher 100:1 //配置RD值为100:1
[CX1-vpn-instance-huawei-af-ipv4]  vpn-target 100:1 export-extcommunity //配置出方向RT值
[CX1-vpn-instance-huawei-af-ipv4]  vpn-target 100:1 import-extcommunity //配置入方向RT值
 
[CX1]interface LoopBack1 //进入环回口1
[CX1-LoopBack1] ip binding vpn-instance huawei //绑定VRF
[CX1-LoopBack1] ip address 11.11.11.11 255.255.255.255 //添加地址
[CX5]ip vpn-instance huawei
[CX5-vpn-instance-huawei] ipv4-family
[CX5-vpn-instance-huawei-af-ipv4]  route-distinguisher 100:1
[CX5-vpn-instance-huawei-af-ipv4]  vpn-target 100:1 export-extcommunity
[CX5-vpn-instance-huawei-af-ipv4]  vpn-target 100:1 import-extcommunity
 
[CX5]interface LoopBack1 
[CX5-LoopBack1] ip binding vpn-instance huawei
[CX5-LoopBack1] ip address 55.55.55.55 255.255.255.255

接着建立BGP邻居关系。

[CX1]bgp 100 //进入BGP100的视图下
[CX1-bgp] router-id 1.1.1.1 //配置BGP的Router-id
[CX1-bgp] peer 2001::5 as-number 100
[CX1-bgp] peer 2001::5 connect-interface LoopBack0 //配置使用环回口与对端创建邻居
[CX1-bgp] ipv4-family vpnv4 //进入VPNv4地址族视图
[CX1-bgp-af-vpnv4]  policy vpn-target
[CX1-bgp-af-vpnv4]  peer 2001::5 enable //启用邻居关系
[CX1-bgp-af-vpnv4]  peer 2001::5 prefix-sid //指定SID模式为中继模式,对路由进行迭代
[CX1-bgp-af-vpnv4] quit
[CX1-bgp] ipv4-family vpn-instance huawei //进入VPN实例的视图
[CX1-bgp-huawei]  import-route direct //引入直连
[CX1-bgp-huawei]  segment-routing ipv6 locator huawei //关联SRv6中创建的Locator
[CX1-bgp-huawei]  segment-routing ipv6 best-effort //启用SRv6-BE的功能
[CX5]bgp 100 //进入BGP100的视图下
[CX5-bgp] router-id 1.1.1.5 //配置BGP的Router-id
[CX5-bgp] peer 2001::1 as-number 100
[CX5-bgp] peer 2001::1 connect-interface LoopBack0 //配置使用环回口与对端创建邻居
[CX5-bgp] ipv4-family vpnv4 //进入VPNv4地址族视图
[CX5-bgp-af-vpnv4]  policy vpn-target
[CX5-bgp-af-vpnv4]  peer 2001::1 enable //启用邻居关系
[CX5-bgp-af-vpnv4]  peer 2001::1 prefix-sid //指定SID模式为中继模式
[CX5-bgp-af-vpnv4] quit
[CX5-bgp] ipv4-family vpn-instance huawei //进入VPN实例的视图
[CX5-bgp-huawei]  import-route direct //引入直连
[CX5-bgp-huawei]  segment-routing ipv6 locator huawei //关联SRv6中创建的Locator
[CX5-bgp-huawei]  segment-routing ipv6 best-effort //启用SRv6-BE的功能

接着我们查看BGP邻居关系已经学习到的路由情况。

可以看到邻居关系已经建立成功,并且学习到一条路由。

接着我们查看vpn实例路由表。

可以看到路由成功加表。

最后我们测试连通信并抓包验证。

可以看到连通性没有问题,从获取的数据包来看,封装的内层地址为双方的环回口地址,外层源地址则是CX1的环回口地址,目的地址CX5为该路由分配的Prefix-id。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/zero_number/article/details/131390040


Comment