基于Linux内核新特性的网关设计实践
UCloud 外网网关是为了承载外网IP、负载均衡等产品的外网出入向流量,当前基于 Linux 内核的 OVS/GRE 隧道/netns/iptables 等实现,很好地支撑了现有业务。同时,我们也在不断跟踪 Linux 内核社区的新技术发展,并将之用于下一代外网网关的设计。这些新特性可将系统性能和管理能力再提上一档,满足未来几年的需求。在方案设计研发过程中发现,新特性存在不少缺陷和 Bug,为此我们向 Linux 内核社区回馈了 10 多个补丁,并融入到 Linux 内核 5.0 版本中,帮助完善内核功能并提升稳定性。 当前业界的多租户外网网关很多都是基于 OpenFlow 的 OpenvSwitch(OVS)方案,然而随着内核路由转发功能的不断完善,利用内核原生路由转发方式进行设计多租户外网网关系统成为一种可能。在这种方式下能有效的使用传统 iproute2 路由工具以及 iptables、nftables 等防火墙工具,并且随着 SwitchDev 技术的兴起,未来将网关系统迁移到 Linux Switch 上也成为一种可能。 现有 Linux 内核 3.x 的不足当前广泛使用的内核版本为 3.x 系列,例如 CentOS 7 全系列标准支持的内核为 3.10 版本,Fedora/Ubuntu 等 Linux 发行版也有大量使用。在 3.x 系列内核下存在着 IP 隧道管理复杂、租户隔离性能损耗等问题。
三项内核新技术为了解决原有方案存在的困扰,我们调研了大量行业主流方案和内核上游的新动向,发现轻量级隧道(简称 lwtunnel)、虚拟路由转发(简称 VRF)以及 nftable & netfilter 流卸载三项内核新技术的特性,可以帮助规避原方案存在的缺陷。 1、轻量级隧道Linux 内核在 4.3 版本中引入了轻量级隧道,它提供了通过路由方式设置隧道属性的方法,这样可以避免管理大量的隧道设备。
2、虚拟路由转发Linux 内核在 4.3 版本中引入了 VRF 的初步支持,并在 4.8 版本形成完备版本。虚拟路由转发可以将一台 Linux Box 的物理路由器当多台虚拟路由器使用,能很好的解决租户路由隔离问题,避免直接使用策略路由。因此,可以将不同租户的网卡加入租户所属的虚拟路由器中来实现多租户的虚拟路由。
3、流卸载 nftables 是一种新的数据包分类框架,旨在替代现存的 {ip,ip6,arp,eb}_tables。在 nftables 中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)。nftables 的一个高级特性就是映射,可以使用不同类型的数据并映射它们。例如,我们可以映射 iif 设备到专用的规则集合(之前创建的存储在一个链中)。由于是哈希映射的方式,可以完美的避免链式规则跳转的性能开销。 Linux 内核在版本 4.16 引入了流卸载功能,它为 IP 转发提供了基于流的卸载功能。当一条新建连接完成首回合原方向和反方向的报文时,完成路由,防火墙和 NAT 工作后,在处理反方向首报文的
方案设计与优化实践(编辑:ASP站长网) |