加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

基于Linux内核新特性的网关设计实践

发布时间:2019-04-02 10:31:29 所属栏目:Windows 来源:UCloud 文旭
导读:UCloud 外网网关是为了承载外网IP、负载均衡等产品的外网出入向流量,当前基于 Linux 内核的 OVS/GRE 隧道/netns/iptables 等实现,很好地支撑了现有业务。同时,我们也在不断跟踪 Linux 内核社区的新技术发展,并将之用于下一代外网网关的设计。这些新特
副标题[/!--empirenews.page--]

基于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 隧道管理复杂、租户隔离性能损耗等问题。

  1. IP 隧道管理复杂
    Linux 内核创建 IP 隧道设备来建立点对点的隧道连接,创建时需指定隧道目标和隧道密钥。因为宿主机之间两两建立连接,面向宿主机的目的地址众多,这样就会导致网关节点上需要创建成千上万的隧道设备,在大规模业务环境下,隧道的管理将变得及其复杂。
  2. 多租户隔离导致的性能下降
  3. 公有云需要实现多租户隔离以确保用户间的安全和隐私
    由于 VPC 网络下不同租户的内网地址可以重合,导致路由也有重合的可能性,此时需要通过大量的策略路由去隔离租户的路由规则,由于策略路由的链表属性,性能会随着链表长度的增加而急剧下降。
  4. 由于防火墙和 NAT 的实现基于同样链式的 iptables,性能损耗同样可观。
  5. netns 带来性能开销
    通过 netns 实现租户路由和防火墙规则的隔离,但是 netns 会引入虚拟网卡和协议栈重入开销,使整体性能下降 20% 左右。

三项内核新技术

为了解决原有方案存在的困扰,我们调研了大量行业主流方案和内核上游的新动向,发现轻量级隧道Lightweight tunneling(简称 lwtunnel)、虚拟路由转发Virtual Routing Forwarding(简称 VRF)以及 nftable & netfilter 流卸载flow offload三项内核新技术的特性,可以帮助规避原方案存在的缺陷。

1、轻量级隧道

Linux 内核在 4.3 版本中引入了轻量级隧道,它提供了通过路由方式设置隧道属性的方法,这样可以避免管理大量的隧道设备。
创建隧道设备时指定 external 模式,利用路由设置的轻量级隧道通过 tun 设备发送报文。

  1. # ip l add dev tun type gretap external
  2. # ifconfig tun 1.1.1.7/24 up
  3. # ip r r 2.2.2.11 via 1.1.1.11 dev tun encap ip id 1000 dst 172.168.0.1 key 

2、虚拟路由转发

Linux 内核在 4.3 版本中引入了 VRF 的初步支持,并在 4.8 版本形成完备版本。虚拟路由转发可以将一台 Linux Box 的物理路由器当多台虚拟路由器使用,能很好的解决租户路由隔离问题,避免直接使用策略路由。因此,可以将不同租户的网卡加入租户所属的虚拟路由器中来实现多租户的虚拟路由。

基于Linux内核新特性的网关设计实践

  1. # ip link add user1 type vrf table1
  2. # ip link add user1 type vrf table2
  3. # ip l set user1 up
  4. # ip l set user2 up
  5. # ip l set dev eth1 master user1
  6. # ip l set dev eth1 master user2
  7. # ip r a default via 192.168.0.1 dev eth1 table 1 onlink
  8. # ip r a default via 192.168.0.1 dev eth1 table 2 onlink

3、流卸载

nftables 是一种新的数据包分类框架,旨在替代现存的 {ip,ip6,arp,eb}_tables。在 nftables 中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)。nftables 的一个高级特性就是映射,可以使用不同类型的数据并映射它们。例如,我们可以映射 iif 设备到专用的规则集合(之前创建的存储在一个链中)。由于是哈希映射的方式,可以完美的避免链式规则跳转的性能开销。

Linux 内核在版本 4.16 引入了流卸载功能,它为 IP 转发提供了基于流的卸载功能。当一条新建连接完成首回合原方向和反方向的报文时,完成路由,防火墙和 NAT 工作后,在处理反方向首报文的 forward 钩子,根据报文路由、NAT 等信息创建可卸载流到接收网卡 ingress 钩子上。后续的报文可以在接收 ingress 钩子上直接转发,不需要再进入 IP 栈处理。此外,将来流卸载还将支持硬件卸载模式,这将极大提高系统转发性能。

基于Linux内核新特性的网关设计实践

  1. # nft add table firewall
  2. # nft add flowtable f fb1 { hook ingress priority 0 ; devices = { eth0, eth1 } ; }
  3. # nft add chain f ftb-all {type filter hook forward priority 0 ; policy accept ; }
  4. # nft add rule f ftb-all ct zone 1 ip protocol tcp flow offload @fb1

方案设计与优化实践

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读