VPP中SRv6的使用

https://docs.fd.io/vpp/20.01/dd/db5/clicmd_src_vnet_srv6.html
https://www.sdnlab.com/23218.html
VPP版本:20.01

0.前言

  VPP(Vector Packet Processing)是思科旗下的一款可拓展的开源框架,提供容易使用的、高质量的交换、路由功能。

  VPP全称Vector Packet Processing(矢量数据包处理),最早是Cisco 于 2002年开发的商用代码。之后在2016年Linux基金会创建FD.io开源项目,Cisco将VPP代码的开源版本加入该项目,目前已成为该项目的核心。现在一般来讲的VPP特指 FD.io VPP,即Linux基金会发起的开源项目。这个项目在通用硬件平台上提供了具有灵活性、可扩展强、组件化等特点的高性能IO服务框架。该框架支持高吞吐量、低延迟、高资源利用率的IO服务,并可适用于多种硬件架构(x86/ARM/PowerPC)以及各种部署环境(裸机/VM/容器)。

  VPP对于SRv6有着非常好的支持,并且提供高性能。关于SRv6原理及Linux SRv6常见功能VPN、流量工程、服务链。如上图所示,VPP原生已经支持了SRv6,包括常见的SRv6操作。在性能方面,VPP同样出色,比Linux 内核原生支持的SRv6吞吐能力要超出很多;成本方面相比智能网卡则有着巨大优势。目前很多开源项目以及商业项目也选用了VPP,其整体的稳定性和性能得到了广泛的验证。

1. SRv6控制命令归纳

  • show sr localsids: 显示所有本地段id号。
vpp#show sr localsids
SRv6 - My LocalSID Table:
=========================
        Address:        fd01:1::1a
        Behavior:       DX4 (Endpoint with decapsulation and IPv4 cross-connect)
        Iface:          eth5
        Next hop:       10.1.0.2
        Good traffic:   [0 packets : 0 bytes]
        Bad traffic:    [0 packets : 0 bytes]
--------------------
        Address:        fd01::1:1:a0a:102
        Behavior:       DX4 (Endpoint with decapsulation and IPv4 cross-connect)
        Iface:          eth5
        Next hop:       10.10.1.2
        Good traffic:   [0 packets : 0 bytes]
        Bad traffic:    [0 packets : 0 bytes]

  • show sr localsids behaviors: 显示所有本地段id号。
vpp#show sr localsids behaviors
SR LocalSIDs behaviors:
 -----------------------
Default behaviors:
        End     -> Endpoint.
        End.X   -> Endpoint with Layer-3 cross-connect.
                Parameters: '<iface> <ip6_next_hop>'
        End.T   -> Endpoint with specific IPv6 table lookup.
                Parameters: '<fib_table>'
        End.DX2 -> Endpoint with decapsulation and Layer-2 cross-connect.
                Parameters: '<iface>'
        End.DX6 -> Endpoint with decapsulation and IPv6 cross-connect.
                Parameters: '<iface> <ip6_next_hop>'
        End.DX4 -> Endpoint with decapsulation and IPv4 cross-connect.
                Parameters: '<iface> <ip4_next_hop>'
        End.DT6 -> Endpoint with decapsulation and specific IPv6 table lookup.
                Parameters: '<ip6_fib_table>'
        End.DT4 -> Endpoint with decapsulation and specific IPv4 table lookup.
                Parameters: '<ip4_fib_table>'
Plugin behaviors:
        End.AD  -> Endpoint with dynamic proxy to SR-unaware appliance.
                Parameters: 'nh <next-hop> oif <iface-out> iif <iface-in>'
        End.AM  -> Endpoint to SR-unaware appliance via masquerading.
                Parameters: 'nh <next-hop> oif <iface-out> iif <iface-in>'
        End.AS  -> Endpoint with static proxy to SR-unaware appliance.
                Parameters: 'nh <next-hop> oif <iface-out> iif <iface-in> src <src-addr> next <sid> [next <sid> ...]'

  • show sr policies: 显示所有sr策略。
vpp#show sr policies
SR policies:
[0].-   BSID: fd01::1:2:a0a:200
        Behavior: Encapsulation
        Type: Default
        FIB table: 0
        Segment Lists:
        [0].- < fd01::1:1:a0a:102 > weight: 1

  • show sr steering-policies: 显示所有steer引流和对应策略bsid。
vpp# show sr steering-policies
SR steering policies:
Traffic         SR policy BSID
L3 10.10.2.0/24 fd01::1:2:a0a:200

  • sr localsid: 设置本地段标签,以及终端解析转发的行为

范式:

vpp# sr localsid (del) address XX:XX::YY:YY(fib-table 8) behavior STRING.

  创建段路由SG的localSID并绑定一个特殊行为参数:一种格式是localSID IPv6_addr(128b),或者是lSID IPv6 address (fib-table X)。VRF 通过SRv6本地localsid的行为字符串指定行为。
  行为:End -> Endpoint. End.X -> Endpoint,表示解压缩和3层交叉连接;参数:' ' End.DX2 -> Endpoint表示解压缩和二层交叉连接;参数:'' End.DX6 -> Endpoint表示解压缩和IPv6的交叉连接;参数:' ' End.DX4 -> Endpoint表示解压缩和ipv4的交叉连接;参数:' ' End.DT6表示终点解压缩并指定IPv6表查询;参数' End.DT4 -> Endpoint表示解压缩并指定ipv4的表查询;参数: '';


  • sr policy:设置转发策略标签以及每跳标签等
    范式:
sr policy [add||del||mod] [bsid 2001::1||index 5] next A:: next B:: next C:: (weight 1) (fib-table 2) (encap|insert)

举例:
        SR策略的操作。SR策略可能包含多个SID列表。每个SID列表都有一个权重,默认为1,并用于wECMP (uECMP)。段路由SR策略可能有封装类型或;
        一个绑定BindingSID是本地分配的SegmentID。对每个接收的IPv6_DA:BSID包,这种流通信将被引导到SR策略中。add命令将通过第一段列表sl创建一个SR策略;mod命令允许在SR策略中增加、删除或修改已有的段列表标签;del命令允许删除一个SR策略和所有相关的SID列表。


  • sr steer:设置转发策略标签以及每跳标签等
    范式:
sr steer (del) [l3 <ip_addr/mask>|l2 <sf_if>] via [index <sr_policy_index>|bsid <bsid_ip6_addr>] (fib-table <fib_table_index>).

举例:

Steer a L2 or L3 traffic through an existing SR policy.
    Examples:
            sr steer l3 2001::/64 via sr_policy index 5
            sr steer l3 2001::/64 via sr_policy bsid 2010::9999:1
            sr steer l2 GigabitEthernet0/5/0 via sr_policy index 5
            sr steer del l3 2001::/64 via sr_policy index 5

  • set interface ip table:设置ip接口绑定vrf表
    范式:
set interface ip table <interface> <table-id>.

描述:将指定网口加入支持的IPv4 FIB表中(VRF)。这个FIB表必须已通过ip table add 创建。如需显示当前的IPv4 FIB表,使用命令show ip fib。仅在有路由信息被加入该表中,或是表中网口已绑定IP地址(自动添加路由),才会显示该FIB表信息。通过命令show int address 查看端口和vrf表绑定状态。

注意:
        在网口IP表被加入指定的FIB表后,再设置IP地址时,需要注意。如果表中加入IP地址后再改变table,这将会产生错误。控制台必须先删除这些地址,再改变表。VPP将不会自动将这些地址从旧表移到新表,因为它不知道该变化是否有效。

范例:
如何将网口增加到IPv4的FIB表中(其中2表示表ID号):

vpp# set ip fib table 2           //1.创建vrf表2
vpp# set interface ip table GigabitEthernet2/0/0 2      //2.将端口绑定vrf表ID号2
vpp# set int state  GigabitEthernet2/0/0 2 up    //3.启动端口
vpp# set int ip address GigabitEthernet2/0/0 2 10.10.10.1/24      //4.设置端口网段,必须在绑定vrf之后
  • show ip6 fib :显示fib信息
    范式:
show ip6 fib       show ip6 fib [summary] [table <table-id>] [index <fib-id>] [<ip6-addr>[/<width>]] [detail]

概述:

    show ip6 fib summary显示概略信息。
    show ip6 fib table 显示table表信息,此处设置SRv6策略表不在策略中。
    show ip6 fib index 显示指定策略信息路径,可以显示srv6策略,通过fib索引号查询。

2.SRv6测试用例

配置SRv6实现访问控制步骤:

##1.定义Segment fd01:1::1a的操作为End.DX4,将内部的IPv4包转发到eth5的10.1.1.2机器下(即Tester2)
ip table add 1                //创建vrf虚拟路由转发表,用于指定ip4 vrf表1
ip6 table add 1                //创建vrf虚拟路由转发表,用于指定ip6 vrf表1
set interface ip table eth5 1    //将接口绑定vrf表,需要在分配IPv4之前绑定,否则默认绑定vrf id 0.
set interface ip table eth6 1 
set int state eth5 up
set int state eth6 up
set int ip address eth5 10.10.1.0/24
set int ip address eth6 10.10.2.0/24
sr localsid address fd01::1:1:0a0a:0a02 behavior end.dx4 eth5 10.10.1.0

//绑定指定索引表vrf的id号
// sr localsid address fd01::1:1:0a0a:0a02 fib-table 1 behavior end.dx4 eth5 10.10.1.0

##2\. #添加一个新的路由策略,包含2个标签Segment fd01::1:1:0a0a:0b01 fd01::1:1:0a0a:0c01
sr policy add bsid fd01::1:1:0a0a:0a01 next fd01::1:1:0a0a:0b01 next fd01::1:1:0a0a:0c01 encap

##3\. # 将去往10.10.2.0/24的包引导至新定义的SRv6 Policy
sr steer l3 10.10.2.0/24 via bsid fd01::1:1:0a0a:0a01

《VPP中SRv6的使用》有1个想法

  1. sr policy和sr steer看起来像是跟TE有关,SRv6 BE是不是不需要配置sr policy 和 sr steer

发表评论

邮箱地址不会被公开。 必填项已用*标注