SR技术应用
- 广域网络,以MPLS VPN为例(需要部署IGP、BGP、MPLS LDP等协议) 也需要部署MPLS-TE(通过RSVP协议,在端到端设备之间维护大量的状态信息来保留资源)
- 数据中心网络,VxLAN网络转发
- 传统IP网络,IP报文交互
- 网络发展,SDN
- SR可以支持以上所说的三种网络,统一控制平面(简化了控制平面,不存在LDP和IGP同步问题)
::: tip SR-MPLS BE(尽力而为)对标MPLS LDP,在控制平面移除了LDP协议。 SR-MPLS TE(流量工程)对标MPLS TE,在控制平面移除了RSVP协议。 :::
网络架构:
- 现有网络通过SPF计算最优路径做为基础网络架构, 容易出现如下问题:
- 所有的业务数据都走最优路径进行数据转发(容易产生网络拥塞)
- 可以规划标签转发、隧道转发,但是不能根据业务精确的规划访问路径和方式
- SR网络基于业务来定义网络的架构:
- 不存在唯一最优路径的说法,根据业务特点分配最合适的路径
- 删除IGP的SPF计算得到最优路径的方案
SR的实现思想:
- 网络由多个路由器设备(节点)、路由器连接的接口(网段)、设备之间的互联链路(节点间路径)组成。
- SR为节点、网段、节点间路径进行标识(SR的三种Segment ID)。
- 源设备根据目标来组合不同的SID (只有源设备进行组合,中间的设备只识别SID进行转发)。
::: tip SR分段路由:设备把网络每个节点、链路理解为一个个片段,即SID,使用OSPF、ISIS、BGP扩展实现SID的分配、携带、传递。 :::
SR的网络编程是根据节点、链路、网段生成的标识SID进行有规律的、有目标的组合排列,可以让数据具有业务上的转发意义。 如果设备收到的是节点ID,则根据识别到的节点ID对应的地址进行最短路径计算,如下设备1收到设备4的节点ID(4.4.4.4),设备1去往设备4的路径按照SPF计算: (源到目的不会使用SPF计算,但访问路径的节点间会进行SPF计算选择最短路径)
::: warning SR的倒数第二段弹出 :::
源路由:源节点选择一条路径并在报文中压入一个有序的Segment List,网络中的其他节点按照报文封装的Segment List进行转发。(segment list中包含多个SID值)
分段路由:
段分类: SR三种类别的Segment ID:
1.Prefix-SID(前缀段ID):设备连接终端的网段
1.手工配置
2.标识网络中的某一个目的地址前缀
3.通过IGP扩散,全网可见,全局有效
2.Adj-SID(邻接段ID):设备间互联的网段
1.手工配置或者动态生成
2.标识网络中两台设备之间的网段
3.通过IGP扩散,全网可见,全局有效
4.邻接SID的范围是除SRGB以外的值
3.Node-SID(节点段ID):属于前缀段,设备环回口可以设置为节点段,用来标识本设备
1.手工配置
2.标识一个环回口地址(通过环回口地址唯一标识设备)
3.环回口视图下配置prefix-sid,即为node-sid
::: tip SRGB(SR全局标签栈):设置SR prefix-sid可以分配的标签范围。 ::: ::: warning Prefix SID代表目的地址,Adjacency SID代表数据包的外发链路,可以分别类似于传统IP转发中的目的IP地址和出接口。Node SID是目的设备内环回口地址。 节点设备的环回口Prefix SID实际就是Node SID。实际使用时前缀可以当作是节点。 :::
邻接段SID
[NE1]segment-routing 进入邻接段视图
[NE1-segment-routing]ipv4 adjacency local-ip-addr 1.1.1.1 remote-ip-addr 2.2.2.2 sid xxxxx 在1.1.1.1和2.2.2.2之间手工配置邻接段SID值(取值范围321536-331775)
前缀段SID
[NE1-ospf-1]segment-routing global-block ? IBG协议视图下设置标签范围(每一个协议视图下都有标签范围设置),OSPF还需要其他配置才可以完成SRGB设置
INTEGER<16000-321534, 524288-1048574> Beginning of Segment Routing global block (SRGB) 标签范围中间缺少的部分为邻接段标签手工指定和邻接段动态生成标签取值使用
节点段SID
[NE1-LoopBack0]ospf prefix-sid index ? Node-SID值就是index索引值
INTEGER<0-65534> The index value 与SRGB取值范围冲突,但配置时实际取值为0-16000,避免和SRGB冲突
[NE1-LoopBack0]ospf prefix-sid index 10 节点段一般与设备编号有明显关联,取值较为明显
Prefix SID是发布端通告的SRGB范围内的偏移值,接收端会根据自己的SRGB计算实际标签值用于生成MPLS转发表项。
设备的Node-SID值随着扩展后的IGP协议扩散,去往自身时需要对端将index值加在前缀SID内,即SRGB+index: 如上,设备A的SRGB的范围最小值 + 设备B的Node-SID即为设备A对于设备B的环回口生成的前缀SID。 ::: warning 实际部署中,建议设备采用统一的SRGB,以便每台设备的Prefix SID值都相同。 如上,AR1和AR2访问AR3环回口时都采用相同的入标签,方便查看管理。 :::
Segment Routing可以直接应用在MPLS架构,转发机制没有变化。代表段的SID被编码为MPLS标签。段序列被编码为标签栈。要处理的段位于栈顶。一个段处理完成后,相关标签从标签栈中弹出。 基于MPLS转发机制的SR,通常也称为SR-MPLS。
Prefix SID通过手工配置生成,不同设备上的配置可能会发生标签冲突。 标签冲突分为前缀冲突和同SID冲突:
- 前缀冲突:相同的前缀关联了两个不同SID。
- 同SID冲突:相同的同SID关联了不同的前缀。
标签冲突处理原则:当冲突产生后,优先处理前缀冲突,之后根据处理结果再进行SID冲突处理,并按如下规则进行优选:
- 前缀掩码值更大优先。(最长匹配原则,掩码越长越精确)
- 前缀地址小的更优先。(掩码相等时)
- SID值更小的优先。(前缀完全相同)
SR实验(IGP)
底层OSPF配置完成
[NE1]segment-routing 全局使能SR
[NE1-ospf-1]opaque-capability enable OSPF视图下开启透明路由能力
[NE1-ospf-1]segment-routing mpls 使能OSPF SR功能,使用MPLS做标签数据转发
[NE1-ospf-1]segment-routing global-block 16000 18000 设置SRGB标签空间
[NE1-LoopBack0]ospf prefix-sid index 100 环回口设置节点段
[NE2]segment-routing
[NE2-ospf-1]opaque-capability enable
[NE2-ospf-1]segment-routing mpls
[NE2-ospf-1]segment-routing global-block 16000 18000
[NE2-LoopBack0]ospf prefix-sid index 200
[NE3]segment-routing
[NE3-ospf-1]opaque-capability enable
[NE3-ospf-1]segment-routing mpls
[NE3-ospf-1]segment-routing global-block 16000 18000
[NE3-LoopBack0]ospf prefix-sid index 300
[NE4]segment-routing
[NE4-ospf-1]opaque-capability enable
[NE4-ospf-1]segment-routing mpls
[NE4-ospf-1]segment-routing global-block 16000 18000
[NE4-LoopBack0]ospf prefix-sid index 400
上述配置完成后OSPF会发送10类LSA: 查看SR前缀标签转发表项: 如上表项中的标签信息,由于每台设备的SRGB范围设置都相同,各台设备的标签值都要相同,都为SRGB范围的最小值和节点SID之和。 NE1 ping NE4时在NE2的ETH1/0/1口抓包,可以看到携带标签16400: 如上,SR简化了控制平面,不需要LDP,通过IGP支持SR功能,传递type 10 LSA,传递了400的节点SID: RID为10.4.4.4的设备(AR4)通告4.4.4.4的前缀时会携带标签400,通告给全网IGP设备。 ::: tip NE4设备通告的三个update报文:
:::
OSPF针对SR-MPLS的TLV扩展:
NE1查看OSPF LSDB中的10类LSA(三个子类): 10类LSA的子类4: 10类LSA的子类7: 10类LSA的子类8(8.0.0.0): 10类LSA的子类8(8.0.0.1): 10类LSA的子类8(8.0.0.2):
[NE4-isis-1]is-level level-2
[NE4-isis-1]cost-style wide
[NE4-isis-1]network-entity 49.0001.0000.0000.0004.00
[NE4-isis-1]segment-routing mpls
[NE4-isis-1]segment-routing global-block 16000 18000
[NE4-LoopBack1]ip address 10.4.4.4 4 32
[NE4-LoopBack1]isis enable 1
[NE4-LoopBack1]isis prefix-sid index 4000
[NE5]segment-routing
[NE5-isis-1]is-level level-2
[NE5-isis-1]cost-style wide
[NE5-isis-1]network-entity 49.0001.0000.0000.0005.00
[NE5-isis-1]segment-routing mpls
[NE5-isis-1]segment-routing global-block 16000 18000
[NE5-Ethernet1/0/0]ip address 10.1.45.5 24
[NE5-Ethernet1/0/0]isis enable 1
[NE5-LoopBack0]ip address 5.5.5.5 32
[NE5-LoopBack0]isis enable 1
[NE5-LoopBack0]isis prefix-sid index 500
ISIS TLV的扩展:
[NE4-ospf-1]import-route isis NE4 OSPF引入ISIS
OSPF LSDB出现11类LSA: 11类LSA携带外部引入设备的换回口节点SID:
[NE4-isis-1]import-route ospf NE4 ISIS引入OSPF
ISIS LSDB出现LSP分片: NE4和NE5的分片LSP携带每台设备的环回口节点SID:
SR (BGP)
BGP for SR-MPLS是BGP针对Segment Routing的扩展,能够针对BGP的Peer相关信息分配BGP Peer SID,并将该信息上报给控制器。
BGP EPE能够针对对等体分配Peer Node Segment(Peer-Node SID)、Peer Adjacency Segment(Peer-Adj SID)和Peer-Set SID。
- Peer-Node SID用于指示一个对等体节点。 每一个BGP会话都会分配Peer-Node SID。 基于Loopback接口建立的EBGP邻居对应的物理链路可能有多条,针对该邻居的Peer-Node SID就会对应多个出接口。
- Peer-Adj SID用于指示到达对等体的一个邻接。 基于Loopback接口建立的EBGP邻居对应的物理链路可能有多条,每个邻接都会分配一个Peer-Adj SID,转发时只能使用指定的链路(对应指定的出接口)进行转发。
- Peer-Set SID用于指示一组邻居。 BGP支持将一组邻居规划为一个Set,然后基于该组分配SID,这个SID称为Peer-Set SID。Peer-Set SID在转发时可以对应多个出接口。 一个Peer-Set由众多Peer-Node和Peer-Adj组成,那么针对该Peer-Set分配的SID就会对应到多个Peer-Node SID和Peer-Adj SID。
建立EBGP邻居
1.使用环回口建立
为建立邻居的会话分配peer-node sid
为建立邻居的链路分配peer-adj sid
2.使用物理接口建立
为建立邻居的会话、链路分配peer-node sid
[NE-bgp]peer xx.xx.xx.xx egress-engineering 使能BGP EPE功能
[NE-bgp]link-state-family unicast 使能标签通告能力
使能BGP EPE功能后,本端设备可以针对对等体分配Peer-node SID和Peer-adj SID。 ::: warning 必须(BGP视图下)执行link-state-family unicast命令使能BGP-LS能力(收集网络拓扑),(全局视图下)执行segment-routing命令使能SR能力,BGP EPE功能才能正常生效。 :::
SR-BE
SR-MPLS BE是指IGP使用最短路径算法计算得到的最优SR LSP(转发尽力而为)。如果有多条开销相等的路径,则执行负载分担。
SR-BE类似MPLS VPN。 基于Prefix Segment(SR-BE):
SR-MPLS BE LSP的扩散: 如上将去往R4的节点SID扩散至全网。
SR-BE实验
底层建立ISIS关系
[NE1]mpls lsr-id 1.1.1.1
[NE1]mpls
[NE1]segment-routing
[NE1-isis-1]segment-routing mpls
[NE1-isis-1]segment-routing global-block 16000 18000
[NE1-LoopBack0]isis prefix-sid index 10
[NE2]mpls lsr-id 2.2.2.2
[NE2]mpls
[NE2]segment-routing
[NE2-isis-1]segment-routing mpls
[NE2-isis-1]segment-routing global-block 16000 18000
[NE2-LoopBack0]isis prefix-sid index 20
[NE3]mpls lsr-id 3.3.3.3
[NE3]mpls
[NE3]segment-routing
[NE3-isis-1]segment-routing mpls
[NE3-isis-1]segment-routing global-block 16000 18000
[NE3-LoopBack0]isis prefix-sid index 30
查看每台设备产生的对应标签信息:
建立MP-BGP邻居
[NE1-bgp]peer 2.2.2.2 as-number 100
[NE1-bgp]peer 2.2.2.2 co lo 0
[NE1-bgp]undo peer 2.2.2.2 enable
[NE1-bgp]ipv4-family vpnv4
[NE1-bgp-af-vpnv4]peer 2.2.2.2 enable
[NE2-bgp]peer 1.1.1.1 as-number 100
[NE2-bgp]peer 1.1.1.1 co lo 0
[NE2-bgp]undo peer 1.1.1.1 enable
[NE2-bgp]peer 3.3.3.3 as-number 100
[NE2-bgp]peer 3.3.3.3 co lo 0
[NE2-bgp]undo peer 3.3.3.3 enable
[NE2-bgp]ipv4-family vpnv4
[NE2-bgp-af-vpnv4]peer 1.1.1.1 enable
[NE2-bgp-af-vpnv4]peer 1.1.1.1 reflect-client
[NE2-bgp-af-vpnv4]peer 3.3.3.3 enable
[NE2-bgp-af-vpnv4]peer 3.3.3.3 reflect-client
[NE2-bgp-af-vpnv4]undo policy vpn-target
[NE3-bgp]peer 2.2.2.2 as-number 100
[NE3-bgp]peer 2.2.2.2 co lo 0
[NE3-bgp]undo peer 2.2.2.2 enable
[NE3-bgp]ipv4-family vpnv4
[NE3-bgp-af-vpnv4]peer 2.2.2.2 enable
配置VPN实例
[NE1-Ethernet1/0/0]ip binding vpn-instance A
[NE3-Ethernet1/0/1]ip binding vpn-instance A
AR1将环回口通告65001,与NE1建立EBGP邻居,AR2将环回口通告65002,与NE3建立EBGP邻居
[NE1-bgp]ipv4-family vpn-instance A
[NE1-bgp-A]peer 10.1.11.1 as-number 65001
[NE3-bgp]ipv4-family vpn-instance A
[NE3-bgp-A]peer 10.1.22.1 as-number 65002
AR1的环回口路由带标签传递: AR2收到AR1的环回口路由:
NE1收到AR2的环回口路由(BGP VPNv4),但不能转换为VPN路由:
[NE2-isis-1]import-route isis level-2 into level-1
::: tip 缺省情况下,Level-2路由器不会将Level-1区域和Level-2区域的路由信息通报给Level-1区域,需要在Level1-2设备执行路由渗透。 :::
标签携带:
NE1 ETH1/0/1抓包AR1访问AR2: (上述MPLS标签值为SR生成。)
SR-MPLS BE的隧道引流:
[NE1]tunnel-policy 1
Info: New tunnel-policy is configured.
[NE1-tunnel-policy-1]tunnel select-seq ? 选择优选隧道
bgp BGP tunnel
cr-lsp CR-LSP tunnel
gre GRE tunnel
ldp LDP tunnel
lsp LSP tunnel
sr-lsp Segment routing LSP SR-BE
sr-te Segment routing TE
te RSVP-TE or Static TE tunnel
[NE1-tunnel-policy-1]tunnel select-seq sr-lsp load-balance-number 1 BE隧道负载分担条目数为1
[NE1-vpn-instance-A]tnl-policy 1 隧道优选策略模板调用到VPN实例
如上AR1发出数据到NE1绑定VPN实例A的接口ETH1/0/0,VPN实例A调用模板优选SR-BE隧道,即NE1使用BE隧道转发VPN实例中的流量。 如果不做指定,则动态默认选择BE隧道。
SR-和LDP互通
[NE2]segment-routing
[NE2]mpls lsr-id 2.2.2.2
[NE2]mpls
[NE2-isis-1]cost-style wide
[NE2-isis-1]is-level level-2
[NE2-isis-1]segment-routing mpls
[NE2-isis-1]segment-routing global-block 16000 18000
[NE2-LoopBack0]ip ad 2.2.2.2 32
[NE2-LoopBack0]isis enable
[NE2-LoopBack0]isis prefix-sid index 20
[NE2-Ethernet1/0/0]ip ad 10.1.12.2 24 SR
[NE2-Ethernet1/0/0]isis enable
[NE2-Ethernet1/0/0]int ethe 1/0/1
[NE2-Ethernet1/0/1]ip ad 10.1.23.2 24 LDP
[NE2-Ethernet1/0/1]isis enable
[NE2-Ethernet1/0/1]mpls
[NE2-Ethernet1/0/1]mpls ldp
NE2的SR转发表没有NE3环回口信息: NE2的MPLS LSP表没有NE1环回口信息:
SR和LDP对接:
在SR和LDP交互的设备上做映射,为3.3.3.3的环回口路由打上30的前缀SID:
[NE2-segment-routing]mapping-server prefix-sid-mapping 3.3.3.3 32 30
[NE2-segment-routing]mapping-server prefix-sid-mapping ? 配置需要做映射的节点IP
X.X.X.X Value of ip prefix
[NE2-segment-routing]mapping-server prefix-sid-mapping 3.3.3.3 32 ? 配置该节点的标签
INTEGER<0-65534> Start of SID index range
[NE2-segment-routing]mapping-server prefix-sid-mapping 3.3.3.3 30 30 只能选择32位掩码
Error: Only the 32-bit mask length is supported currently.
在IGP协议上调用映射模板
[NE2-isis-1]segment-routing mapping-server send IGP使能通告本地SID标签映射能力
SR转发表中出现LDP设备的环回口节点和前缀SID: ISIS数据库中NE2的LSP实节点中绑定映射节点和前缀SID:
NE2上使用MPLS为SR-BE传来的主机路由打标签
[NE2-mpls]lsp-trigger segment-routing-interworking best-effort host
MPLS LSP表中出现SR设备的环回口节点和前缀SID:
::: warning 上述拓扑中IGP协议为ISIS,只需要配置segment-routing mapping-server send IGP通告本地SID标签。 OSPF协议还需要在接收标签信息端配置segment-routing mapping-server receive使能接收标签信息能力。 :::
SR-TE(流量工程)
TE(流量工程)是一套工具方法,对已经安装的网络资源进行优化,使得实际业务以一种最优的方式存在于物理网络之中。 LDP不支持流量工程,AMPLS引入RSVP-TE控制平面。传统路由依据目的IP进行查找转发,只关心下一跳,不关心流量的完整路径。RSVP-TE引入源路由的概念:当流量进入RSVP网络后,在源节点就会计算出完整的每一跳路径(显式路径)。
SR-MPLS TE是使用SR作为控制协议的TE隧道技术,引入控制器计算隧道的转发路径。
严格转发:源节点封装的段列表中的段ID都是邻接段SID
松散转发:源节点封装的段列表中的段ID都是节点SID
严格+松散转发:源节点封装的段列表中的段ID有节点SID,也有邻接段SID
基于Adjacency Segment(SR-TE严格转发): 上图中控制器计算出SR-MPLS TE隧道路径为A->B->C->D->E->F,对应2个标签栈<1003, 1006, 100>和<1005, 1009, 1010>,分别下发给入节点A和粘连节点C。其中,100为粘连标签,与标签栈<1005, 1009, 1010>相关联,其他为邻接标签。转发时每条链路都封装邻接段SID,实现严格转发。 ::: tip 严格路径方式的SR-MPLS TE在存在等价路径的情况下也无法进行负载分担,在SR-MPLS TE路径里引入节点标签后,可以弥补上述不足。 ::: 基于Adjacency Segment + Node Segment: 上图中手工指定混合标签栈,在A节点入隧道的混合标签栈为<1003, 1006, 1005, 101>,其中1003、1006、1005为邻接标签,101为节点标签。设备在处理节点标签时,可以按照最短路径进行转发,也可以进行负载分担,路径并不严格固定。
SR-TE实验
底层配置ISIS、MPLS、SR。 查看到达各个节点的转发标签: 查看邻接段的标签: ::: warning 上述邻接段的SID是动态生成的,设备重启后邻接段会重新计算。 配置TE的显式路径时如果使用Adj-SID,尽量配置静态Adj-SID,防止设备重启后Adj-SID动态替换,原有配置失效。 :::
手工指定各邻接段SID
[NE1-isis-1]segment-routing auto-adj-sid disable 关闭ISIS SR自动分配动态Adj-SID功能
[NE1-segment-routing]ipv4 adjacency local-ip-addr 10.1.12.1 remote-ip-addr 10.1.12.2 sid ?
<321536-331775> The SID value
[NE1-segment-routing]ipv4 adjacency local-ip-addr 10.1.12.1 remote-ip-addr 10.1.12.2 sid 321612 针对本地和对端IP划定的链路分配静态Adj-SID
[NE1-segment-routing]ipv4 adjacency local-ip-addr 10.1.13.1 remote-ip-addr 10.1.13.3 sid 321613
[NE2-isis-1]segment-routing auto-adj-sid disable
[NE2-segment-routing]ipv4 adjacency local-ip-addr 10.1.24.2 remote-ip-addr 10.1.24.4 sid 321624
[NE2-segment-routing]ipv4 adjacency local-ip-addr 10.1.12.2 remote-ip-addr 10.1.12.1 sid 321621
[NE2-segment-routing]ipv4 adjacency local-ip-addr 10.1.23.2 remote-ip-addr 10.1.23.3 sid 321623
[NE3-isis-1]segment-routing auto-adj-sid disable
[NE3-segment-routing]ipv4 adjacency local-ip-addr 10.1.13.3 remote-ip-addr 10.1.13.1 sid 321631
[NE3-segment-routing]ipv4 adjacency local-ip-addr 10.1.23.3 remote-ip-addr 10.1.23.1 sid 321632
[NE3-segment-routing]ipv4 adjacency local-ip-addr 10.1.34.3 remote-ip-addr 10.1.34.4 sid 321634
[NE4-isis-1]segment-routing auto-adj-sid disable
[NE4-segment-routing]ipv4 adjacency local-ip-addr 10.1.24.4 remote-ip-addr 10.1.24.2 sid 321642
[NE4-segment-routing]ipv4 adjacency local-ip-addr 1.1.34.4 remote-ip-addr 10.1.34.3 sid 321643
[NE1-mpls]mpls te
[NE1-isis-1]traffic-eng level-2 使能ISIS-L2的TE特性
配置显式路径
[NE1]explicit-path NE1_NE4 指定NE1到NE4的显式路径(NE1-NE2-NE3-NE4)
[NE1-explicit-path-NE1_NE4]next sid label 321612 type adjacency
[NE1-explicit-path-NE1_NE4]next sid label 321623 type adjacency
[NE1-explicit-path-NE1_NE4]next sid label 321634 type adjacency
::: tip 最后一跳指定NE3-NE4时可以不用Adj-SID,使用NE4环回口节点SID 16040也可以通过最短路径判断:
[NE1-explicit-path-NE1_NE4]next sid label 16040 type prefix
:::
配置NE1-NE4的隧道
[NE1]int Tunnel 1
[NE1-Tunnel1]tunnel-protocol mpls te
[NE1-Tunnel1]ip address unnumbered int lo 0 借用环回口地址配置隧道源地址
[NE1-Tunnel1]destination 4.4.4.4
[NE1-Tunnel1]mpls te signal-protocol segment-routing 使用SR做为MPLS-TE的信令协议(使用SR协议建立维护隧道)
[NE1-Tunnel1]mpls te tunnel-id 1 指定隧道ID值(隧道两端保持一致)
[NE1-Tunnel1]mpls te path explicit-path NE1_NE4 隧道绑定显式路径
绑定站点VPN实例,建立BGP邻居
[NE1]ip vpn-instance A
[NE1-vpn-instance-A]route-distinguisher 1:1
[NE1-vpn-instance-A-af-ipv4]vpn-target 1:1
[NE1-Ethernet1/0/0]ip binding vpn-instance A
[NE1-Ethernet1/0/0]ip ad 10.1.11.2 24
[NE1-bgp]peer 4.4.4.4 as-number 100
[NE1-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[NE1-bgp]undo peer 4.4.4.4 enable
[NE1-bgp]ipv4-family vpnv4
[NE1-bgp-af-vpnv4]peer 4.4.4.4 enable
[NE1-bgp]ipv4-family vpn-instance A
[NE1-bgp-A]peer 10.1.11.1 as-number 65001
[NE4]ip vpn-instance A
[NE4-vpn-instance-A]route-distinguisher 1:1
[NE4-vpn-instance-A-af-ipv4]vpn-target 1:1
[NE4-Ethernet1/0/2]ip binding vpn-instance A
[NE4-Ethernet1/0/2]ip ad 10.2.22.2 24
[NE4-bgp]peer 1.1.1.1 as-number 100
[NE4-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[NE4-bgp]undo peer 1.1.1.1 enable
[NE4-bgp]ipv4-family vpnv4
[NE4-bgp-af-vpnv4]peer 1.1.1.1 enable
[NE4-bgp]ipv4-family vpn-instance A
[NE4-bgp-A]peer 10.2.22.1 as-number 65002
[AR1-GigabitEthernet0/0/0]ip ad 10.1.11.1 24
[AR1-LoopBack0]ip ad 10.1.1.1 32
[AR1]bgp 65001
[AR1-bgp]peer 10.1.11.2 as-number 100
[AR1-bgp]network 10.1.1.1 32
[AR2-GigabitEthernet0/0/0]ip ad 10.2.22.1 24
[AR2-LoopBack0]ip ad 10.2.2.2 32
[AR2]bgp 65002
[AR2-bgp]peer 10.2.22.2 as-number 100
[AR2-bgp]network 10.2.2.2 32
如上配置后,AR1和AR2通信走SR-BE,没有进入隧道: 上述原因是默认优选BE隧道。
[NE1-tunnel-policy-1_4]tunnel select-seq sr-te load-balance-number 1 配置优选SR-TE隧道,路由负载分担条目数为1
[NE1-vpn-instance-A]tnl-policy 1_4 隧道优选策略绑定VPN实例
AR1访问AR2,在NE1的ETH1/0/1接口抓包: 如上,数据包携带NE1的显式路径中的标签(321612在发出NE1时被剥离)。 48180为去往AR2最后一跳携带的私网标签:
SR-BE和SR-TE可以同时存在,上述配置后,AR1访问AR2走SR-TE隧道,AR2访问AR1走SR-BE隧道。
早期的SR-MPLS TE沿用RSVP-TE,使用隧道接口实现SR,当隧道数量过多时,会出现不利于管理,流量引入困难等问题,可以使用SR-Policy解决。 ::: tip SR-Policy可以实现主备路径。 :::
TE隧道保护
如上图,端到端的保护直接切换备路径转发。
TI-LFA FRR在SR某处链路或节点故障时,会快速切换到备份路径继续转发: 上图,TI-LFA算法中R1转发到R2时携带了Adj-SID,帮助流量向R4转发。传统LFA根据目标节点SID,会进行最短路径计算,R1和R3中断瞬间不会迅速切换,需要等待收敛。 ::: tip FRR:快速重路由 LFA FRR:IP网络 RLFA FRR:MPLS TE网络 TI-LFA FRR:SR TE网络 :::
扩展P:以保护链路源端节点(S)为根,去往被保护节点不会出现环路(只有一条路径),这些节点就是P节点 (不会将数据发挥被保护的链路)
扩展Q:以保护链路末端节点(D)为根,去往被保护节点不会出现环路(只有一条路径),这些节点就是Q节点 (不会将数据发挥被保护的链路)
一个设备既属于扩展P也属于扩展Q,就是PQ节点,即该节点去往源节点S和目的节点D时,都不会将数据包转发回保护链路
源端发生故障时,会强制将数据包转发到PQ节点,由PQ节点转发给目的节点
::: warning SR中没有SPF计算。 :::
传统LFA:在网络中找到一个去往任意节点都没有环路的设备(PQ)。
TI-LFA:和R-LFA的相同,但存在约束路径(使用Adji-SID等),所以不依赖PQ节点,有环路时流量转发也不会产生环路。
SR隧道中的指定必经节点(首节点、尾节点、路径约束节点)故障时,TI-LFA无法生成保护。 如下图SR转发路径中,TI-LFA无法对必经节点R1、R4和R6生成保护路径:
使用Anycast FRR可以实现对于指定节点的故障保护。 不同设备设置相同SID (Anycast SID)。 如下图,R4和R5在IGP中发布相同的SID(Anycast SID),R4是Anycast SID的最优节点,R5是备份节点:
SR-TE跨域
配置思路:
OSPF和ISIS域内配置标签转发(静态),NE3和NE4之间配置域间标签转发,NE3和NE4配置本域内隧道和粘连标签
OSPF底层基础配置
[NE3]segment-routing
[NE3]mpls lsr-id 3.3.3.3
[NE3]mpls
[NE3-mpls]mpls te
[NE3]ospf router-id 10.3.3.3
[NE3-ospf-1]opaque-capability enable
[NE3-ospf-1]segment-routing mpls
[NE3-ospf-1]segment-routing global-block 16000 18000
[NE3-ospf-1-area-0.0.0.0]mpls-te enable
ISIS底层基础配置
[NE4]segment-routing
[NE4]mpls lsr-id 4.4.4.4
[NE4]mpls
[NE4-mpls]mpls te
[NE4-isis-1]network-entity 49.0001.0000.0004.00
[NE4-isis-1]cost-style wide
[NE4-isis-1]is-level level-2
[NE4-isis-1]segment-routing mpls
[NE4-isis-1]segment-routing global-block 16000 18000
跨域连接设备配置
[NE3]explicit-path NE3_NE1
[NE3-explicit-path-NE3_NE1]next sid label 321632 type adjacency
[NE3-explicit-path-NE3_NE1]next sid label 321621 type adjacency
[NE3]int Tunnel 1
[NE3-Tunnel1]tunnel-protocol mpls te
[NE3-Tunnel1]ip ad unnumbered int lo 0
[NE3-Tunnel1]destination 1.1.1.1
[NE3-Tunnel1]mpls te tunnel-id 1
[NE3-Tunnel1]mpls te signal-protocol segment-routing
[NE3-Tunnel1]mpls te path explicit-path NE3_NE1
[NE3-Tunnel1]mpls te binding-sid label 300
[NE4]explicit-path NE4_NE6
[NE4-explicit-path-NE4_NE6]next sid label 321645 type adjacency
[NE4-explicit-path-NE4_NE6]next sid label 321656 type adjacency
[NE4]int Tunnel 1
[NE4-Tunnel1]ip ad unnumbered int lo 0
[NE4-Tunnel1]tunnel-protocol mpls te
[NE4-Tunnel1]destination 6.6.6.6
[NE4-Tunnel1]mpls te signal-protocol segment-routing
[NE4-Tunnel1]mpls te tunnel-id 1
[NE4-Tunnel1]mpls te path explicit-path NE4_NE6 隧道绑定显式路径
[NE4-Tunnel1]mpls te binding-sid label 400 设设置粘连标签
域间BGP
[NE3]bgp 100
[NE3-bgp]peer 10.1.34.4 as-number 200
[NE3-bgp]peer 10.1.34.4 egress-engineering 使能BGP EPE功能(标签转发),本端针对对等体分配节点段SID和邻接段SID
[NE3-bgp]link-state-family unicast 使能BGP-LS功能收集网络拓扑
[NE4]bgp 200
[NE4-bgp]peer 10.1.34.3 as-number 100
[NE4-bgp]peer 10.1.34.3 egress-engineering
[NE4-bgp]link-state-family unicast
[NE3]bgp 100
[NE3-bgp]import-route ospf 1
[NE3-ospf-1]import-route bgp
[NE4]bgp 200
[NE4-bgp]import-route isis 1
[NE4-isis-1]import-route bgp
NE1-NE6建立隧道
[NE1-explicit-path-NE1_NE6]next sid label 321612 type adjacency
[NE1-explicit-path-NE1_NE6]next sid label 321623 type adjacency
[NE1-explicit-path-NE1_NE6]next sid label 48120 type adjacency
[NE1-explicit-path-NE1_NE6]next sid label 400 type binding-sid 显式路径绑定粘连标签
[NE6-explicit-path-NE6_NE1]next sid label 321665 type adjacency
[NE6-explicit-path-NE6_NE1]next sid label 321654 type adjacency
[NE6-explicit-path-NE6_NE1]next sid label 48120 type adjacency
[NE6-explicit-path-NE6_NE1]next sid label 300 type binding-sid
[NE1]bgp 100
[NE1-bgp]peer 6.6.6.6 as-number 200
[NE1-bgp]peer 6.6.6.6 co lo 0
[NE1-bgp]peer 6.6.6.6 ebgp-max-hop 10
[NE1-bgp]undo peer 6.6.6.6 enable
[NE1-bgp]ipv4-family vpnv4
[NE1-bgp-af-vpnv4]peer 6.6.6.6 enable
[NE6]bgp 200
[NE6-bgp]peer 1.1.1.1 as-number 100
[NE6-bgp]peer 1.1.1.1 co lo 0
[NE6-bgp]peer 1.1.1.1 ebgp-max-hop 10
[NE6-bgp]undo peer 1.1.1.1 enable
[NE6-bgp]ipv4-family vpnv4
[NE6-bgp-af-vpnv4]peer 1.1.1.1 enable
配置访问策略将流量引导至SR-TE隧道即可
SRv6
SRv6报文没有改变原有IPv6报文的封装结构,在头节点上将数据压入段路由扩展报文头(SRH)来指导数据转发。 SRv6的本地IPv6特质使得SRv6设备能够和普通IPv6设备共同组网,更好兼容现有网络。
SRv6 Segment是IPv6地址形式,也可称为SRv6 SID。 SRv6 SID由Locator、Function和Arguments三部分组成,格式为Locator:Function:Arguments。 (Function也称为Opcode。Arguments字段可选) ::: warning Length(L+F+A) <= 128。当长度和小于128时,保留位用0补齐。 如果没有Arguments字段,格式则是Locator:Function。Locator占据IPv6地址的高比特位,Function部分占据IPv6地址的剩余部分。 :::
Locator是网络拓扑中的一个网络节点的标识,用于路由和转发报文到该节点。 Function用来标识该指令要执行的转发动作。 SRv6网络编程中,不同的转发行为由不同的Function来标识。
SRv6 Segment类型: ::: tip End SID标识网络中的某个目的节点(Node),类似SR-MPLS中的Node SID。End SID通过IGP协议扩散到其他网元,全局可见,本地有效。 End.X SID标识网络中的某条链路,类似SR-MPLS中的Adjacency SID。End.X SID通过IGP协议扩散到其他网元,全局可见,本地有效。 End.DT4 SID标识网络中的某个IPv4 VPN实例。End.DT4 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例路由表转发。 :::
SRv6 SID配置
SRv6 SID是IPv6地址形式,总计128位。SRv6 SID格式为Locator:Function:Args。
Locator字段对应ipv6-prefix ipv6-address参数,长度由prefix-length参数决定
Function字段也称为Opcode,通过IGP协议动态分配或通过opcode命令静态配置
Args字段由args args-length参数决定,Args字段在SRv6 SID内是可选参数,由命令配置决定
- 静态配置SID时,SID只占用静态段范围,静态段取值从1开始,动态段设置为0。
- 动态分配SID时,SID会占用动态段和静态段范围,动态段取值从1开始,静态段取值从0开始,静态段取值到全F后,动态段+1,静态段恢复全0重新开始分配。
分配SRv6 SID时,如果配置了静态Opcode,优先使用静态Opcode构成SID,如果不存在静态Opcode,则动态分配。
SRv6节点
SR三种类型节点: 源节点:生成SRv6报文的源节点。 中转节点:转发SRv6报文但不进行SRv6处理的IPv6节点。 Endpoint节点:接收并处理SRv6报文的目标节点(报文的IP v6目标地址是本地配置SID或本地接口地址。
SRv6转发
SRv6两种转发模式:SRv6 Policy(TE)和SRv6 BE。 SRv6 BE通常不含SRH扩展头,提供尽力而为转发。
SRv6 Policy转发: 如上,R2不是目标IP v6地址,IP v6转发给R3,R3收到后解封装,根据SRH向后转发,同时SL值-1,将SRH中下一个segment值当作目标地址向下转发,直到SL值变为0,弹出SRH,EndpointNode收到的只是IP v6地址。 ::: tip SRv6转发过程中,每经过一个SRv6 Endpoint节点,Segments Left(SL)字段减1,IPv6报文头中的目的IPv6地址变换一次。 :::
SRv6 Flavors附加行为: SL值为0时,默认执行弹出SRH。