本文内容来源于netgate公司tnsr软件系统文档翻译。可文章结尾阅读原文查看。
TNSR 是一个基于开源的数据包处理平台,可提供卓越的安全网络解决方案性能、可管理性和服务灵活性。TNSR 可以在商用 (COTS) 硬件平台上将数据包处理速度从 1 Gbps 扩展到 10 Gbps,甚至 1 Tbps 甚至更高,从而以极低的成本交付路由、防火墙、VPN 和其他安全网络应用程序。TNSR 具有 RESTCONF API(支持对多个实例进行编排管理)以及用于单实例管理的 CLI。
TNSR 在 Linux 主机操作系统(ubuntu系统)上运行。TNSR 的初始配置包括安装关联服务和配置网络接口。网络接口可以由主机操作系统或 TNSR 管理,但不能同时由两者管理。换句话说,一旦网络接口被分配给 TNSR,它就不再对主机操作系统可用,甚至不再可见。TNSR是Netgate研发的成果,使用许多开源技术创建了一个可以在生产环境中支持并轻松部署的高性能网络处理器产品。
默认情况下,Linux 系统将使用驱动程序来探查从硬件接口 (NIC) 到操作系统内核的连接。然后,Linux 内核处理这些 NIC 之间的所有 I/O。内核还处理所有其他 I/O 任务,以及内存和进程管理。
在高 I/O 情况下,内核的任务可能是每秒处理数百万个请求。TNSR 使用两种开源技术来简化此问题并在用户空间中提供太比特级的数据服务。数据平面开发套件 (DPDK) 绕过内核,将网络流量直接传送到用户空间,矢量包处理 (VPP) 加速流量处理。
实际上,这意味着一旦将 NIC 分配给 TNSR,该 NIC 就会连接到快速数据平面,但它不再可供主机操作系统使用。TNSR 的所有管理(包括配置、故障排除和更新)均在控制台或通过 RESTCONF 执行。在云或虚拟环境中,控制台访问可能可用,但建议的配置仍然是专用于 RESTCONF API 访问的主机操作系统接口。
TNSR 系统的建议配置包括用于主机操作系统的一个主机 NIC 以及分配给 TNSR 的所有其他 NIC。
这很重要并且值得重复:
- 主机操作系统无法访问分配给 TNSR 的 NIC
- 为了管理 TNSR,管理员必须能够连接到控制台
主机操作系统和 TNSR 使用单独的网络命名空间来隔离其网络功能,命名dataplane
空间用于TNSR管理的网络环境,命名host
空间用于主机操作系统管理的网络环境。这两个命名空间相互隔离,如果不手动在它们之间创建链接或路由,则无法直接通信。
动态路由守护程序FRR(BGP、OSPF、OSPF6、RIP)、Unbound、DHCP 服务器和 IPsec 等网络相关服务仅在命名空间中运行dataplane
。
默认情况下,面向管理的服务(例如 SSH、RESTCONF API 和 SNMP)在命名 空间中运行host
,但这些服务能够使用单独的实例同时在两个命名空间中运行。
TNSR 是使用开源软件项目从头开始设计和构建的,如下:
- 矢量包处理(VPP)
- 数据平面开发套件(DPDK)
- YANG用于数据建模
- Clixon系统管理
- 命令行界面 (CLI)
- RESTCONF用于nginx提供的 REST API 配置
- 路由协议的FRR
- StrongSwan用于 IPsec 密钥管理
- Kea用于 DHCP 服务。
- net-snmp用于 SNMP
- NTP ntp.org守护进程
- Unbound Unbound 是一个验证、递归、缓存 DNS 解析器。支持DNS-over-TLS和DNS-over-HTTPS,允许客户端加密其通信。
- Ubuntu作为基础操作系统。
产品文档介绍中有很多内容值得我们去学习的。相信很多内容可能在vpp的开发中会遇到的。
在基础配置章节中有QAT硬件兼容问题--vfio-pci
驱动程序与某些 QAT 设备(包括 DH895x、C3xxx 和 C62x 设备)存在兼容性问题。默认情况下它有一个拒绝列表,可防止这些设备在使用驱动程序时被激活 vfio-pci。内核命令行参数可以禁用 VFIO 驱动程序拒绝列表行为vfio_pci.disable_denylist=1
在故障排除章节中介绍ipsec报文不支持大包的问题。大于default-data-size
缓冲区的封装数据包将被数据平面丢弃。VPP数据缓冲区的大小默认是2048
,它将传递大约2000
字节的数据包。由于默认 MTU 为 1500
,因此在许多情况下此问题并不明显(产生分片报文)。然而,当尝试通过 IPsec 传递巨型帧时,这就会成为一个问题。要通过 IPsec 传递9000
字节帧,可以将缓冲区大小16384
并重新启动数据平面。---在一些基于vpp开发高性能DPI产品中,为了解决多mbuf问题处理问题,默认就将缓冲区设置为16384。
另外netgate公司将集成vpp开发的strongswan、FRR以及基于vpp vapi配置定义的yang模型tnsr-yang-models代码也开源了(https://github.com/Netgate)。下面是strongswan通过linux-cp插件协商完SA之后通过vapi下发到vpp 的代码。和vpp主线版本vppswan有很多差异。