VPP中SRv6实验环境搭建及连通性测试

2024-04-27 01:32

本文主要是介绍VPP中SRv6实验环境搭建及连通性测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.概述

  • 前置条件
  1. 设置本地loop循环,并设置IPv6同localsids在同网段,一台;
  2. 设置骨干网直连出口的IPv6地址(vrf默认为0),然后设置出口的IPv6静态路由,方向为对端方向;
  3. 创建vrf表,客户路由表;
  4. 开启并设置端口,绑定VRF以及添加IP;这步属于客户端路由表;
  • 实现SRv6模块需要进行如下一、二、三个主要设置。
  1. 步骤一设置localsid,用于接收方向,对到达本地的报文设置最终解析终点及相关配置,主要设定解析数据包的动作,可以设置多个localsid,通过loop口统一控制;
  2. 步骤二设置policy,用于设置报文路径,即对发送出去的跨域报文进行寻路的路由标签设置;可以设置多条;
  3. 步骤三是设置steering,用于将到达某网段的数据包绑定到某条policy策略上,进行寻址发送;一个fib中的一个网段或端口只能绑定一个policy;相应命令如下:sr steer (del) [l3 <ip_addr/mask>|l2 <sf_if>] via [index <sr_policy_index>|bsid <bsid_ip6_addr>] (fib-table <fib_table_index>)
  • 收发包过程

    • 接收:物理接口IPv6->loopback获取网段数据包->逻辑localsid->解包给对应vrf或网段
    • 发送: 查询fib表的policy->steering给对应网段封包->物理网口IPv6发送
  • 整体网络拓扑如下图所示:

Router_A及Router_B作为骨干网路由,进行骨干网通讯传输。边缘路由器Router_a以及Route_b借助骨干网进行通讯传输。

骨干网(骨干路由):测试Router_A及Router_B中均通过VPP接管网卡,并执行数据转发等相关工作。Router_A通过G0端口与Router_B的G0端口进行IPv6直连,其中设置的外网IPv6地址需要在同一网段,隧道采用IPv6+SRv6协议。Router_A或Router_B中loop0的IPv6地址段需要与本地localsid在同一网段,且值不能相同。

承载网(边缘路由):边缘设备Router_a的wan端口及骨干网Router_A的G1端口均需设置在同一网段,可以采用IPv4,也可采用IPv6。

2.骨干网Router_A设置

vppctl登录进入VPP,进行相关设置。所用的查询命令如下:

vpp# show int
Name               Idx    State  MTU (L3/IP4/IP6/MPLS)  Counter          Count
G0                                1     down         9000/0/0/0
G1                                2     down         9000/0/0/0
G2                                3     down         9000/0/0/0
local0                            0     down          0/0/0/0
//显示SRv6的本地localsids,一台设备可以有多个localsid
vpp# show sr localsids
#sr localsid (del) address XX:XX::YY:YY(fib-table 8) behavior STRING
//显示SRv6支持的转换行为localsids behaviors,DT表示转为某路由表并需指定ID,DX表示转换的具体端口和下一跳IP;
vpp# show 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>'
//显示SRv6的本地policy
vpp# show sr policies
//显示SRv6的本地steering
vpp# show sr steering-policies
//显示不同vrf的路由转发表
vpp# show ip fib table 100
vpp# show ip6 fib table 100
//显示本地地址
vpp# show int addr

//Router_A配置

//0.租户隔离(可选步骤)
//对于租户隔离的需求,可以创建vrf(Virtual Router Forward)表。必须先绑定非0的vrf表,才能设置IP地址,否则将绑定IPv4或IPv6默认的vrf table 0。
//创建vrf表为ip6 table add 100
//端口G0绑定vrf100命令set interface ip6 table G0 100//1.配置骨干网端口状态及端口地址
//G0当作主干路由出口,默认绑定vrf为0端口;
vpp# set int state G0 up
vpp# set int ip address G0 fdab::1/96
//配置默认路由,注意fdab::2地址为对端Router_B直连IPv6地址
vpp# ip route add ::/0 via fdab::2//2.配置承载网端口状态及端口地址
//ip table add 100					//ip4接口VRF表100
//set interface ip table G1 100		//将G1绑定vrf100表
vpp# set int state G1 up
vpp# set int ip address G1 10.10.10.1/24//3.创建回环loopback端口,配置loopback地址和端口状态
vpp# loopback create-interface
vpp# set interface state loop0 up
//这里设置地址需要同本地localsids在同一网段
vpp# set interface ip address loop0 fc10::1/96//4. 配置SRv6的localsid地址
//接收报文方向设置,指定本地具体localsids及其报文解析、转发方向;其中localsids需要与loop同网段,同时出口方向10.10.10.2为下一跳连接IP地址,非本地G1接口地址。
vpp# sr localsid address fc10::1a behavior end.dx4 G1 10.10.10.2
//将欲解析报文发送至对应VRF表,执行动作为转到IPv4的vrf表100 , fib-table 0表示IPv6的vrf表ID号,骨干网默认通过该隧道进行SRv6转发
//sr localsid address fc01::10:1 fib-table 0 behavior end.dt4 100
//欲删除某localsid命令sr localsid del address fc01::10:1//5.配置SRv6的policy策略
//发送报文方向设置,下一跳为Router_B的localsid ,即fc01::1a。这里bsid自行设置,只用于标识该策略方向。
vpp# sr policy add bsid fe10::1a next fc01::1a//6.配置SRv6的steer网段引导方向
//10.10.1.0/24为发送目标网段ip地址
vpp# sr steer l3 10.10.1.0/24 via bsid fe10::1a

3.骨干网Router_B设置

//1.配置骨干网端口状态及端口地址
// G0当作主干路由出口,默认绑定IPv6的id为0的vrf表;
vpp# set int state G0 up
vpp# set int ip address G0 fdab::2/96
vpp# ip route add ::/0 via fdab::1//2.配置承载网端口状态及端口地址
vpp# set int state G1 up
vpp# set int ip address G1 10.10.1.1/24//3.创建回环loopback端口,配置loopback地址和端口状态
vpp# loopback create-interface
vpp# set interface state loop0 up
//这里设置地址需要同本地localsids在同一网段
vpp# set interface ip address loop0 fc01::1/96//4. 配置SRv6的localsid地址
vpp# sr localsid address fc01::1a behavior end.dx4 G1 10.10.1.2//5.配置SRv6的policy策略
vpp# sr policy add bsid fe01::1a next fc10::1a//6.配置SRv6的steer网段引导方向
vpp# sr steer l3 10.10.10.0/24 via bsid fe01::1a//7.测试联通性
//在Router_B的vpp中测试ping另一端Router_a网络接口
vpp# ping 10.10.1.2 source G1
//ping 10.10.10.2 table-id 100//若SRv6成功路由,则通过show sr localsids命令查看正常接收转化的Good Traffic。

4.承载网Router_a及Router_b设置

//1. 配置Router_a的wan口地址
ifconfig wan 10.10.10.2 netmask 255.255.255.0
//2.若路由未设置默认网关,手动添加路由规则
route add -net 0.0.0.0/0 dev wan
//ip route add 10.10.1.0/24 via 10.10.10.1
//3.测试连通性
ping 10.10.10.1//1. 配置Router_b的wan口地址
ifconfig wan 10.10.1.2 netmask 255.255.255.0
//2.添加路由规则
route add -net 0.0.0.0/0 dev wan
//ip route add 10.10.10.0/24 via 10.10.1.1
//3.测试连通性
ping 10.10.1.1

** srv6配置注意说明: **

  • 如果通过vpp-agent配置srv6模块,本地标签localsid必须在逻辑端口状态是up(如果绑定installation_vrf_id非零,需要创建并指定该ip6为非0的vrf表)后才能下发!!!否则会出现下发失败问题!!!在此之前一定要通过该json下发的方式,启动逻辑端口等相关配置,同时创建或拥有非0的vrf表。

5.总结

通过上述配置,测试实现基于VPP的SRv6连通性实验。其中loop网段设置、localsid设置、默认路由设置都是需要重点注意的地方。如果添加vrf以及encap等其他配置,将进一步丰富功能,同时复杂度也将进一步增大。

这篇关于VPP中SRv6实验环境搭建及连通性测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939183

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

高并发环境中保持幂等性

在高并发环境中保持幂等性是一项重要的挑战。幂等性指的是无论操作执行多少次,其效果都是相同的。确保操作的幂等性可以避免重复执行带来的副作用。以下是一些保持幂等性的常用方法: 唯一标识符: 请求唯一标识:在每次请求中引入唯一标识符(如 UUID 或者生成的唯一 ID),在处理请求时,系统可以检查这个标识符是否已经处理过,如果是,则忽略重复请求。幂等键(Idempotency Key):客户端在每次

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex