05-SRv6配置
本章节下载: 05-SRv6配置 (266.50 KB)
目 录
SR(Segment Routing,段路由)采用源节点路径选择机制,预先在源节点封装好路径所要经过段的SID(Segment Identifier,段标识),当报文经过SR节点时,该节点根据报文的SID对报文进行转发。除源节点外,其它节点无需维护路径状态。SRv6是指在IPv6网络中使用SR、将IPv6地址作为SID对报文进行转发。
按照功能的不同,SRv6网络中的节点分为三种角色:
· 源节点:负责在IPv6报文的IPv6头中插入SRH扩展头,或者在报文外加上IPv6头并插入SRH扩展头。该节点将报文流引入SRH中Segment List定义的SRv6路径。
¡ 如果Segment List中只包含一个SID,并且不需要在SRH中携带信息或TLV,则只需要将IPv6头的目的地址设置为这个SID,不需要插入SRH。
¡ 如果Segment List中包含多个SID,则需要插入SRH。
源节点可以是产生SRv6报文的主机,也可以是SRv6域的边缘设备。
· 中转节点:在报文的SRv6路径上,不参与SRv6处理,只执行普通的IPv6报文转发。中转节点可以是支持SRv6的节点,也可以是不支持SRv6的节点。
· Endpoint节点:对接收到的SRv6报文进行SRv6相关处理。接收到的SRv6报文的IPv6目的地址必须是Endpoint节点上配置的SRv6 SID,该节点需要按SRv6 SID的指令进行处理,并更新SRH。
同一个节点可以是不同的角色,比如节点在某个SRv6路径里可能是源节点,在其他SRv6路径里可能就是中转节点或者Endpoint节点。
在SRv6中,定义某种网络功能、代表网络指令的SID。这种SID采用IPv6地址形式,但不与任何设备上的接口地址对应。该SID被称为SRv6 SID。
如图1-1所示,SRv6 SID由Locator、Function、Arguments和MBZ四部分组成:
· Locator:标识SID所属的网段。Locator在SR域内唯一。
· Function:标识与SID绑定的本地操作指令,SR域内指定节点收到流量后,根据SRv6 SID的Function字段执行相关操作。
· Arguments:定义报文的流和服务等信息。
· MBZ(Must be zero):当Locator、Function和Arguments的位数之和小于128bits时,其他位使用0补齐。
根据不同配置方式,SRv6 SID各个字段的关系分为以下几种:
· 普通SRv6 SID
图1-2 普通SRv6 SID示意图
普通SRv6 SID分为静态SRv6 SID和动态SRv6 SID,其格式分别为:
¡ 静态SRv6 SID=ipv6-prefix+0+opcode+0。其中ipv6-prefix为locator命令中由ipv6-address和prefix-length指定的IPv6地址前缀,所占位数为prefix-length;0所占位数位为128减去prefix-length、static-length再减去args-length;opcode为Function字段中的静态段,所占位数为static-length;0所占位数为args-length。
¡ 动态SRv6 SID=ipv6-prefix+dynamic+static+0。其中ipv6-prefix为locator命令中由ipv6-address和prefix-length指定的IPv6地址前缀,所占位数为prefix-length;dynamic为Function字段中的动态段,取值不能为全0,所占位数位为128减去prefix-length、static-length再减去args-length;static为Function字段中的静态段,所占位数为static-length,可以取任意值;0所占位数为args-length。
例如,配置locator test1 ipv6-prefix 100:200:DB8:ABCD:: 64 static 24 args 32时,表示:
¡ Locator为100:200:DB8:ABCD::,长度为64
¡ 静态段占用24位
¡ Args占用32位
¡ 动态段占用8位
由此可以计算出静态SRv6 SID范围和动态SRv6 SID范围:
¡ 静态SRv6 SID起始值=100:200:DB8:ABCD:0:1::
¡ 静态SRv6 SID结束值=100:200:DB8:ABCD:FF:FFFF::
¡ 动态SRv6 SID起始值=100:200:DB8:ABCD:100::
¡ 动态SRv6 SID结束值=100:200:DB8:ABCD:FFFF:FFFF::
根据SRv6 SID功能的不同,SRv6 SID分为:
· End.DT4 SID:用于标识网络中的某个IPv4 VPN。End.DT4 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例路由表转发。End.DT4 SID用于IP L3VPN和EVPN L3VPN场景。
· End.DT6 SID:用于标识网络中的某个IPv6 VPN。End.DT6 SID对应的转发动作是解封装报文,并且查找IPv6 VPN实例路由表转发。End.DT6 SID用于IPv6 L3VPN和IPv6 EVPN L3VPN场景。
· End.DT2M SID:End.DT2M SID表示二层交叉连接且进行广播泛洪的SID,用于标识一个端点。End.DT2M SID对应的转发动作是去掉IPv6报文头及其扩展头,然后将剩余报文在VSI内广播泛洪。End.DT2M SID可以用于EVPN VPLS BUM流量场景。
· End.DT2U SID:End.DT2U SID表示二层交叉连接且进行单播MAC表查找功能的SID,用于标识一个端点。End.DT2U SID对应的转发动作是去掉IPv6报文头及其扩展头,然后使用剩余报文的目的MAC地址查找MAC表,根据MAC表项将报文转发到对应的出接口。End.DT2U SID可以用于EVPN VPLS单播场景。
通过IGP协议通告SR节点的SRv6 SID后,其他SR节点可以根据收到的路由协议报文生成到达该SRv6 SID的路由转发表项。
运行SRv6的节点维护一个Local SID表,记录本节点生成的SRv6 SID信息。Local SID表主要用于:
· 保存本地生成的SRv6 SID转发信息。
· 存储对SRv6 SID的操作方式。
Segment List是包含报文转发路径信息的SID列表。
SRv6通过在源节点对IPv6数据报文进行封装,使封装后的报文在开启SRv6功能的网络中进行传输。封装后的数据报文在网络中传输的路径,称为SRv6隧道。SRv6隧道是从源节点到尾节点的一个虚拟的点对点连接,其两端的设备分别对数据报文进行封装及解封装。
SRv6的报文封装格式为:在原始三层数据报文前面添加新的IPv6基本头和SRH(Segment Routing Header,SRv6报文头)。SRH是路由类型取值为4的一种路由扩展头。如图1-3所示,IPv6基本头中Next Header取值为43,表明下一个报文头为路由扩展头。路由扩展头的路由类型字段取值为4,表明该路由扩展头为SRH。SRH主要包含以下几个部分:
· Next Header:8bits,用来标识下一个报文头的类型。
· Hdr Ext Len:8bits,表示以8个字节为单位的SRH头的长度,不包括前8个字节。
· Routing Type:8bits,路由类型字段,取值为4,表示携带的是SRH。
· Segments Left:8bits,标识需要查看的下一个SID的编号,初始取值为n-1(n表示路由扩展头中SID的数目),每经过一个节点减1。
· Last Entry:8bits,SRH头中报文实际转发路径的第一个SID的编号。
· Flags:8bits,标志位信息。
· Tag:16bits,用来标记具有相同特性的一组报文。
· Segment List:SID列表。按照报文转发路径上节点从远到近的顺序进行排列,即Segment List [0]表示路径的最后一个SID,Segment List [1]表示路径的倒数第二个SID,以此类推。
图1-3 SRv6的报文封装示意图
如图1-4所示,SRv6隧道报文转发过程如下:
(1) 源节点Device A收到IPv6报文后,查找路由表判定此报文需要通过SRv6隧道模式的Tunnel接口转发,并将报文发给相应的Tunnel接口。
(2) Tunnel接口收到此IPv6报文后,执行如下操作对报文进行封装:
¡ 封装SRH头。由于从Ingress到Egress的跳数为3,因此,SRH中SL为跳数-1,即SL=2。封装的SID列表信息为Segment List [0]=D、Segment List [1]=C、Segment List [2]=B,即按照节点由远及近的顺序进行排列。
¡ 封装IPv6头。IPv6头中的源地址为隧道的源端地址,目的地址为SL指示的地址,即SL为2时表示SRH中Segment List [2]对应的地址(本例中为Device B的地址)。
(3) Device A根据封装的IPv6头中的目的地址查找路由表,将封装后的报文转发给Device B。
(4) Device B收到报文后,首先检查IPv6头中目的地址的SID类型,然后检查SRH头中的SL值,并将SL值减1,同时查找Segment List [1]对应的地址,即Device C的地址,并使用Device C的地址替换IPv6头中的目的地址。
(5) Device B根据封装的IPv6头中的目的地址查找路由表,将封装后的报文转发给Device C。
(6) Device C收到报文后,执行(4)、(5)步的操作,将报文发给Device D。
(7) 尾节点Device D收到报文后,检查SRH头中的SL值,发现SL=0。对报文进行解封装,删除封装报文头,根据原始报文的目的地址进行报文转发。
图1-4 SRv6隧道报文转发示意图
与IPv6 segment routing相关的协议规范有:
· draft-previdi-6man-segment-routing-header
· draft-ietf-6man-segment-routing-header
· draft-filsfils-spring-segment-routing
· draft-filsfils-spring-srv6-network-programming
仅S5580X-HI系列交换机支持本功能。
SRv6配置任务如下:
(1) 配置SRv6 SID
(2) 配置封装的IPv6报文头的源地址
在配置SRv6之前,需完成以下任务:
· 确定SRv6隧道的源节点、中间节点和尾节点。
· 规划节点的IP地址。
配置普通SRv6 SID时,指定的Locator段的IPv6地址必须是接口的主IPv6地址。
不同Locator的名称不能相同。
不能为不同Locator配置相同的IPv6地址前缀和前缀长度,且不同Locator的IPv6地址前缀不能有重叠部分。
SRv6视图下的Locator段内存在正在被使用的动态SRv6 SID时,不能关闭SRv6功能和删除该Locator段。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 配置Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length [ args args-length | static static-length ] * ]
(4) 配置Opcode段。
¡ 配置End.DT4 SID。
opcode opcode end-dt4 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ]
指定的VPN实例必须已经存在。不同VPN实例不能配置相同End.DT4 SID。
¡ 配置End.DT6 SID。
opcode opcode end-dt6 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ]
指定的VPN实例必须已经存在。不同VPN实例不能配置相同End.DT6 SID。
¡ 配置End.DT2M SID。
opcode opcode end-dt2m vsi vsi-name
指定的VSI必须已经存在。不同VSI不能配置相同End.DT2M SID。
¡ 配置End.DT2U SID。
opcode opcode end-dt2u vsi vsi-name
指定的VSI必须已经存在。不同VSI不能配置相同End.DT2U SID。
在SRv6组网环境中,必须指定封装的IPv6报文头的源地址。否则,无法通过SRv6转发数据流量。
配置源地址时,不能为环回地址、链路本地地址、组播地址和未指定地址。指定的源地址必须为本机地址,且已经由路由协议发布,建议指定本设备的Loopback接口地址。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置封装的IPv6报文头的源地址。
encapsulation source-address ipv6-address [ ip-ttl ttl-value ]
缺省情况下,未指定封装的IPv6报文头的源地址。
通过引用Locator段,IGP协议可以通告Locator段内的SRv6 SID。
配置通过IS-IS通告SRv6 SID前,需要确保IS-IS开销值的类型为wide、compatible或wide-compatible。关于IS-IS开销值类型的配置请参见“三层技术-IP路由配置指导”中的“IS-IS”。
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis [ process-id ] [ vpn-instance vpn-instance-name ]
(3) 进入IS-IS IPv6地址族视图。
address-family ipv6 [ unicast ]
(4) 引用Locator段。
segment-routing ipv6 locator locator-name [ level-1 | level-2 ]
缺省情况下,未引用Locator段。
多次配置本功能,可以引用多个Locator段,从而通告多个SRv6 SID。
可在任意视图下执行以下命令:
· 显示SRv6简要信息。
display segment-routing ipv6 brief
· 显示SRv6转发信息。
display segment-routing ipv6 forwarding [ entry-id [ relation ] | forwarding-type { srv6be | srv6sids } ] [ slot slot-number ]
· 显示SRv6的Local SID转发表信息。
display segment-routing ipv6 local-sid [ locator locator-name ] [ end-dt2m | end-dt2u ] [ owner owner ] [ sid ]
display segment-routing ipv6 local-sid [ locator locator-name ] [ end-dt4 | end-dt6 ] [ owner owner ] [ sid | vpn-instance vpn-instance-name ]
· 显示各协议分配的SRv6 SID的数目。
display segment-routing ipv6 local-sid statistics [ locator [ locator-name ] ]
· 显示SRv6的Locator信息。
display segment-routing ipv6 locator [ locator-name ]
· 显示指定Locator中可用的静态SRv6 SID。
display segment-routing ipv6 available-static-sid locator locator-name [ from begin-value ]
· 显示SRv6的Locator的配置信息和Locator已分配SRv6 SID的统计信息。
display segment-routing ipv6 locator-statistics [ locator-name ]
· 显示IS-IS SRv6能力信息。
display isis segment-routing ipv6 capability [ level-1 | level-2 ] [ process-id ]
· 显示IS-IS SRv6的Locator路由信息。
display isis segment-routing ipv6 locator [ ipv6-address prefix-length ] [ [ level-1 | level-2 ] | verbose ] * [ process-id ]
· 显示IS-IS发布的SRv6 SID信息。
display isis segment-routing ipv6 sid-info sid [ sid-value | [ end-dt4 | end-dt6 ] ] [ level-1 | level-2 ] [ process-id ]
· 显示IS-IS发布的Locator段内的SRv6 SID信息。
display isis segment-routing ipv6 sid-info locator [ ipv6-prefix prefix-length ] [ end-dt4 | end-dt6 ] [ level-1 | level-2 ] [ process-id ]
· 显示发布源发布的SRv6 SID信息。
display isis segment-routing ipv6 sid-info system-id [ system-id ] [ end-dt4 | end-dt6 ] [ level-1 | level-2 ] [ process-id ] [ is-name isname ]
· 显示冲突的SRv6 SID信息。
display isis segment-routing ipv6 sid-info conflict [ sid-value ] [ level-1 | level-2 ] [ process-id ]
· 显示SRv6 SID统计信息。
display isis segment-routing ipv6 sid-info statistics [ system-id system-id ] [ level-1 | level-2 ] [ process-id ]
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!