网络虚拟化

概述

网络虚拟化是一种脱离专用网络硬件抽象出的虚拟网络技术。底层硬件仅需提供基础的数据包转发服务,网络虚拟化可提供多种网络服务,包括交换、路由、安全组和防火墙等,使网络体验同物理网络一样。

云平台将网络模型抽象为二层网络和三层网络。二层网络对应于二层广播域,提供一种二层网络隔离的方式。三层网络主要与OSI七层模型中第4层~第7层网络服务相对应。可提供二层隔离技术的NoVLAN、VLAN、VXLAN、SDN等均可作为二层网络。创建二层网络,相当于在二层网络所挂载的集群内所有物理机上,创建对应的虚拟交换机来提供广播域。在二层网络之上,创建的三层网络类型包括:扁平网络、公有网络、VPC网络。基于三层网络可提供各种网络服务,包括:DHCP、DNS、弹性IP、端口转发、负载均衡等。

图 1所示:
图 1. 二层网络与三层网络


技术特性

三层网络

三层网络包括:扁平网络、公有网络、VPC网络。

扁平网络可给云主机分配私有网络地址,同时云主机可通过分布式EIP访问公有网络。扁平网络支持DHCP、User Data、弹性IP、安全组、端口镜像等网络服务。

VPC网络是一块可由租户自定义的网络空间,其目的是让租户在云平台上构建出一个隔离的、可自行管理配置及策略的虚拟网络环境,从而进一步提升租户在云环境中的资源安全性。VPC网络和服务由VPC路由器提供,一个VPC路由器下可提供多个相互隔离的VPC网络,给云主机提供DHCP、DNS、SNAT、路由表、弹性IP、端口转发、负载均衡、IPsec、安全组、动态路由、组播路由、VPC防火墙、Netflow等网络服务。

图 1所示:
图 1. 三层网络


VPC路由器

VPC路由器是一种专用的云主机,运行着定制的Linux操作系统,以及管理服务代理程序。一个VPC路由器下可提供多个相互隔离的VPC网络,每个VPC路由器中包含一个管理服务代理程序,通过HTTP协议接收来自管理节点的命令来配置网络服务,可为云主机提供DHCP、DNS、SNAT、路由表、弹性IP、端口转发、负载均衡、IPsec、安全组、动态路由、组播路由、VPC防火墙、Netflow等网络服务。

图 1所示:
图 1. VPC路由器


安全组

安全组实质是一个分布式防火墙,专注东西向流量管控,防护某张虚拟网卡。每次安全组规则变化、加入/删除网卡,均会导致多台云主机的安全组规则被更新。一张云主机虚拟网卡可加入多个安全组。若将某台云主机的某张虚拟网卡加入至安全组,云平台会自动向该云主机所在物理机下发Iptables规则,并主要使用Filter表。

新建安全组时,默认已配置四条规则(即:协议类型为ALL、IP地址类型为IPv4/IPv6的入口规则和出口规则),用于设置组内互通,默认规则不支持修改或删除,但支持停用,用户可按需停用默认规则,取消组内互通。此外,默认所有外部访问均禁止进入安全组内云主机,安全组内云主机访问外部不受限制。例如,用户创建两个安全组:安全组-1、安全组-2,并将虚拟网卡:vnic 1.0、vnic 2.0、vnic 5.0、vnic 6.0加入安全组-1,vnic 3.0、vnic 4.0、vnic 5.0、vnic 6.0加入安全组-2。缺省情况下规则示意见下。

图 1所示:
图 1. 安全组规则示意-1


安全组同时支持白名单/黑名单模式,用户可按需配置安全组允许/拒绝规则。例如,用户配置安全组-1的规则,允许外部网络访问安全组-1;配置安全组-2的规则,允许安全组-1访问安全组-2。规则示意见下。

图 2所示:
图 2. 安全组规则示意-2


弹性IP

扁平网络的弹性IP由云主机所在的物理机通过Namespace和Iptables实现。

例如,用户为云主机VM1(网关10.1.1.1/24)配置了弹性IP(172.20.18.100),系统将自动在VM1所在物理机创建Namespace(br_bond1_172_20_18_100,对应NS2),并且在NS2中模拟扁平网络的网关,使用Iptables的NAT表实现NAT转换。

当外部网络访问VM1的弹性IP时,首先通过公有网络VLAN2010转发至NS2,在NS2中将目的IP地址转换成VM1的扁平网络IP地址,再将数据包通过网桥br_bond1_100转发给VM1。反之,当VM1访问外部网络时,首先通过网桥br_bond1_100转发至网关(位于NS2中),在NS2中完成源IP地址转换,再经公有网络VLAN2010转发至外部网络。

图 1所示:
图 1. 扁平网络弹性IP原理


VPC网络的弹性IP由云主机所属的VPC路由器使用Iptables的NAT表实现。

例如,用户为云主机VM1配置了弹性IP。当外部网络访问弹性IP时,首先通过弹性IP所属公有网络VLAN2010转发至VPC路由器,由VPC路由器将目的IP地址转换成VM1的私网IP地址,再通过VPC网络VLAN100转发至VM1。反之,当VM1访问外部网络时,首先经过VPC网络VLAN100转发至VPC路由器,由VPC路由器将源IP地址转换成弹性IP地址,再经公有网络VLAN2010转发至外部网络。

图 2所示:
图 2. VPC网络弹性IP原理


端口转发

端口转发是基于VPC路由器提供的三层转发服务,可将指定公有网络的IP地址端口流量转发到云主机对 应协议的端口,在公网IP地址紧缺的情况下,通过端口转发可提供多个云主机对外服务,节省公网IP地址资源。

启用SNAT服务的私有网络中,云主机可访问外部网络但不能被外部网络所访问。使用端口转发规则,允许外部网络访问SNAT后面云主机的某些指定端口。端口转发规则可动态绑定到云主机,或从云主机解绑。端口转发服务限于VPC路由器提供。

端口转发基于Iptables的NAT表实现。云平台部署端口转发服务,将自动在VPC路由器中下发Iptables规则配置。端口转发指定端口映射有两种方法:单个端口到单个端口的映射、端口区间的映射。

图 1所示:
图 1. 端口转发原理


负载均衡

负载均衡提供各种灵活分配算法将全部网络请求均衡分布至后端服务器组上,通过合理管理流量分发以减轻单个服务器的负担,从而应对大流量、高并发的访问,满足客户业务场景需求。

负载均衡同时支持四层负载均衡协议(TCP/UDP)和七层负载均衡协议(HTTP/HTTPS)。

负载均衡转发前端流量至后端服务器时,支持以下算法:
  • 轮询算法:按照顺序轮流分配访问请求至后端服务器。轮询是最简单的一个算法,无须关注后端服务器本身的连接数和系统负载等状态,主要应用于各个后端服务器性能差异不大的场景。
  • 加权轮询算法:根据后端服务器权重转发访问请求。一般情况下,权重基于硬件配置进行设置,为静态值。权重值越高,被轮询的次数(概率)越高。加权轮询是轮询的一种特殊形式,主要应用于各个后端服务器性能差异较大的场景。
  • 源地址哈希:使用客户端请求的源 IP 地址与目标 IP 地址生成唯一的哈希密钥,将请求分配给特定的后端服务器,适合后端服务器需处理客户端请求差异较大的场景。
  • 最小连接算法:将新的连接请求分配到当前连接数最小的后端服务器,适用于请求占用后端服务器时间相差较大的场景,常用于长连接服务。
云平台支持基于TCP/UDP协议的四层会话保持机制,以及基于HTTP/HTTPS协议的七层会话保持机制。可识别客户端与后端服务器之间的交互关联性,将客户端访问请求定向转发至特定的后端服务器,从而保证业务会话连续性。
  • 四层会话保持机制:负载均衡将同一个源IP地址的访问请求都转发至一台后端服务器上。
  • 七层会话保持机制:不同负载均衡算法下,七层会话保持机制不同。轮询算法或加权轮询算法使用基于Cookie的会话保持机制,负载均衡可通过Cookie将访问请求定向转发至之前记录的后端服务器。源地址哈希算法通过哈希函数计算客户端源IP地址,同一个源IP地址的访问请求都将转发至一台后端服务器上。
图 1所示:
图 1. 负载均衡


VPC防火墙

VPC防火墙主要用于VPC网络环境下的南北向流量管控。VPC防火墙基于Iptables实现,其规则部署在VPC路由器中。为VPC路由器开启VPC防火墙,云平台自动向VPC路由器下发默认规则(编号10000)和系统规则(编号4000- 9999)。默认规则和系统规则可保证缺省情况下VPC网络与外部网络的互访。

默认规则支持且仅支持修改,系统规则均不支持修改。此外,系统规则不支持添加或删除,但支持停用。用户配置自定义规则后,可按需修改默认规则、停用系统规则。在修改默认规则、停用系统规则前,请务必检查确认自定义规则符合预期,否则可能影响业务。

用户配置自定义规则,支持在公有网络或VPC网络上按需配置。

VPC网络与外部网络之间的安全规则建议配置在公有网络上。例如,不允许云主机-1访问外部网络,以及允许外部网络访问云主机-2,此时建议在公有网络的出方向配置规则。

图 1所示:
图 1. VPC防火墙规则示意-1


VPC网络之间的安全规则需配置在VPC网络上。例如,不允许VPC网络-1访问VPC网络-2,此时可在VPC网络-1的入方向配置拒绝规则,也可在VPC网络-2的出方向配置拒绝规则。

图 2所示:
图 2. VPC防火墙规则示意-2


IPsec

用户在多个地域部署ZStack Cloud,或既部署ZStack Cloud私有云,又购买公有云服务。为将多云打通,IPsec是一个简单易部署方案,它可使多云网络实现三层互通,并可实现多云之间数据传输的机密性和安全性。

IPsec包含以下要点:
  • ESP协议:定义了IP数据的安全传输方式。详见:ESP协议
  • IKE协议:定义了ESP使用的Key和IKE自身使用的Key的协商产生机制,以及IPsec的认证机制。详见:IKE协议

ESP协议

IPsec有两种模式:
  • 传输模式(Transport Mode):在该模式下,通常仅IP数据包的有效载荷部分会被加密或认证。由于IP报头没有被修改或加密,因此路由保持不变。然而,当使用身份验证头时,IP地址不能通过网络地址转换(NAT)进行修改,因为这样总是会使哈希值失效。传输层和应用层总是通过哈希进行安全保护,因此它们不能以任何方式被修改,例如通过转换端口号。
  • 隧道模式(Tunnel Mode):在该模式下,整个IP数据包均会被加密和认证。它会被封装到一个新的IP数据包中,并附加一个新的IP头。隧道模式用于创建虚拟专用网络,用于网络到网络通信(例如:连接各个站点的路由器)、主机到网络通信(例如:远程用户访问)以及主机到主机通信。隧道模式支持NAT穿越。

ZStack Cloud IPsec支持隧道模式,不支持传输模式。

IKE协议

IKE有两个版本:IKEv1、IKEv2。ZStack Cloud IPsec推荐使用IKEv2。IKEV2可使用四条消息完成IKEv2 SA和IPsec SA的协商,简化了IKEv1的协商过程。

IKEv2定义了三种交换:
  • 初始交换(Initial Exchanges)
  • 创建子SA交换(Create_Child_SA Exchange)
  • 通知交换(Informational Exchange)
其中,初始交换包含两次两对消息交换:
  • 第一对消息交换,以明文方式完成IKE SA的参数协商。包括协商加密和验证算法、交换临时随机数和DH交换,据此可算出加密后续IKE消息的Key。
  • 第二次消息交换,以加密方式完成身份认证和IPsec SA的参数协商。IKEv2支持三种认证方式:证书认证、预配值密码(PSK)、EAP认证。ZStack Cloud支持PSK认证方式。

Netflow

Netflow实质是流量监控,即针对网络通信数据包进行管理与控制,同时进行优化与限制。流量监控的目的是允许并保证有用数据包的高效传输,同时禁止或限制非法数据包的传输,一保一限是流量监控的本质。

为了更好地收集分析网络数据包,可将一系列具有相同规则的网络数据包(Packet)分为逻辑的流(Flow)。目前业界有以下Flow相关的流量控制协议:
  • Juniper® (Jflow)
  • Huawei® (NetStream)
  • Nokia® (Cflow)
  • Ericsson® (Rflow)
  • 3Com/HP® , Dell® , and Netgear® (s-flow)

Netflow是Cisco®提出的网络数据包交换技术,其对流经网络设备的IPFlow进行测量和统计的功能非常成熟,提供网络流量的会话级视图,记录下每个TCP/IP事务的信息,易于管理和易读,并成为当今互联网领域公认的最主要的IP流量分析、统计和计费行业标准。

ZStack Cloud支持使用Netflow技术对VPC路由器网卡的进出流量进行分析和监控。目前支持两种数据流输出格式:V5、V9。用户可通过自定义配置选择不同的流量格式。Netflow统计经过VPC路由器的流量,可以是VPC网络内的流量,也可以是VPC路由器所在公网的流量。

技术特性

在VPC路由器内部,使用Pmacct包实现Netflow。ZStack Cloud主要使用Pmacct的Nflog模块进行流量统计。当用户下发Netflow配置之后,Pmacct会在Iptables Raw表中添加Nflog规则,用于收集VPC网卡上所有流量,之后再根据配置信息,对指定IP进行过滤和统计。

关于Nflog的说明。
  • Iptables Nflog是一种Linux内核模块,它可将网络流量日志发送到用户空间的应用程序,以便进行进一步分析和处理。当Iptables规则匹配到一条流量时,它可将该流量发送到Nflog模块,然后该模块会将该流量的一些元数据(如源IP、目标IP、端口等)和原始数据包发送至用户空间的应用程序。用户空间的应用程序可以使用libnetfilter_log库来接收这些日志,并进行进一步处理。
  • Nflog模块通过一个称为Nfnetlink的机制与用户空间的应用程序进行通信。当Iptables规则触发时,内核会向用户空间发送一个Nfnetlink消息,该消息包含有关触发规则的流量的元数据和原始数据包。应用程序可使用libnetfilter_log库来接收这些消息,并进行进一步处理。
  • Nflog模块可用于实现各种网络安全应用程序,如IDS(入侵检测系统)、IPS(入侵防御系统)和网络流量分析工具等。通过使用Nflog模块,这些应用程序可实时监视网络流量,并对潜在安全威胁进行快速响应。
关于Pmacct Nflog的说明。
  • Pmacct是一个开源的网络流量监控工具,支持使用多种方式收集和分析网络流量数据。其中,Pmacct支持使用Nflog模块收集网络流量数据。
  • 当Pmacct使用Nflog模块收集网络流量数据时,它会创建一个Nflog Socket,并将其与Iptables规则绑定。于是,当Iptables规则匹配到一条流量时,它会将该流量发送至Nflog模块,并将该流量的一些元数据(如源IP、目标IP、端口等)和原始数据包发送至Pmacct的Nflog Socket中。
  • Pmacct会使用libnetfilter_log库来接收这些Nflog消息,并将它们转换为Pmacct可以理解的格式。然后,Pmacct会将这些流量数据记录到一个流量数据库中,并可使用Pmacct的命令行工具来查询和分析这些数据。

统计指标

ZStack Cloud Netflow服务默认统计的流量指标:
  1. src_mac:流量的源MAC地址。
  2. dst_mac:流量的目的MAC地址。
  3. vlan:流量的VALN ID。
  4. src_host:流量的源IP地址。
  5. dst_host:流量的目的IP地址。
  6. src_port:流量的源端口。
  7. dst_port:流量的目的端口。
  8. proto:流量的协议类型。
  9. tos:流量的服务类型。
  10. flows:流量的Entry信息。

端口镜像

端口镜像将某个端口的数据报文复制一份并转发至另一端口,再在第二个端口进行数据/流量分析。也可将流量继续转发至更远处再进行分析,从而最大程度降低对原始报文转发处理流程的影响。

原始报文通过的端口称为镜像端口,也称为被监控端口。上述第二个端口,即数据被复制到的端口,称为监控端口,也称为采集端口或观察端口。

数据报文在端口上有进/出两种方向。对于端口镜像,需复制转发以下三种方向的数据包:
  1. 入方向,仅对从镜像端口收到的报文进行复制转发。
  2. 出方向,仅对从镜像端口发出的报文进行复制转发。
  3. 对从镜像端口收到和发出的报文都进行复制转发。
端口镜像适用于以下场景:
  • 当怀疑有攻击或有网络故障时,需获取某个端口的报文进行分析,从而排除威胁和找出故障原因。
  • 需对某个端口的流量进行监控与观察,同时还需做到尽量不影响原报文转发。

技术特性

端口镜像技术最初来源于物理交换机,有SPAN(Switched Port Analyzer)、RSPAN(Remote Switched Port Analyzer)、ERSPAN(Encapsulated Remote Switched Port Analyzer)等多种镜像技术,也有多种镜像源。
  1. 端口:将指定端口接收或发送的报文复制到观察端口,此时的镜像被称为端口镜像。
  2. VLAN:将指定VLAN内所有活动接口接收的报文复制到观察端口,此时的镜像被称为VLAN镜像。
  3. MAC地址:将指定VLAN内源MAC地址或目的MAC地址为指定MAC地址的报文复制到观察端口,此时的镜像被称为MAC镜像。
  4. 报文流:将符合指定规则的报文流复制到观察端口,此时的镜像被称为流量镜像。

关于云平台端口镜像的说明。在云计算时代,基于网络虚拟化技术,在物理机上演化出许多虚拟网络设备,用户的虚拟网卡不再直接插在物理交换机上,且可能由于迁移等活动导致网卡位置频繁变动,原始在物理机上配置实现的端口镜像功能也需迁移至软件上实现,以适应上述业务变化。

ZStack Cloud网络虚拟化基于开源Linux操作系统实现,对应的端口镜像功能也基于Linux系统生态工具/库来实现。

云平台对弱化用户资源的物理位置十分重视,因此类似于交换机的ERSPAN技术,云平台的端口镜像经常需将用户某个端口的报文/流量复制转发至任意位置的设备(很多情况下使用的是虚拟资源,例如云主机),再在远端进行检测和分析。

OSPF

ZStack Cloud中,VPC路由器至少有一个下行VPC网络用于连接云主机,至少有一个上行网络用于连接外部网络。在某些场景下,VPC路由器可能需要多个上行网络。假定VPC路由器有两个上行网络,一个连接互联网区域,一个连接专线区域。VPC路由器需要知道外部路由,才能进行路由转发。ZStack Cloud提供以下三种解决方案:
  1. 静态路由。路由表功能,可给VPC路由器配置外部路由,保证VPC路由器进行正确的路由转发。该方案简单,不依赖外部组件,但存在以下制约:需配置VPC路由器以及外部路由器,维护复杂。若网络Topo变化,需手动修改路由表。
  2. OSPF路由协议。通过在路由器之间交换路由信息,实现路由信息的自动同步。该方案可完美解决静态路由上述制约,但需维护更多功能模块,增加软件的设计开发复杂度。
    • OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的动态路由协议。OSPFv2用于解决IPv4路由同步, OSPFv3用于解决IPv6路由同步。ZStack Cloud支持OSPFv2。
    • OSPF路由协议包含以下要点:
  3. 源进源出。假定VPC路由器的两个上行网络是电信专线和联通专线,但运营商不会同步路由信息到云平台。在该场景下,VPC路由器将选择一条专线作为默认路由,内部主动访问外部流量使用默认路由上网,外部主动访问进来的流量(例如:EIP访问、端口转发、负载均衡、IPsec隧道等)使用源进源出功能保证流量打通。否则,可能出现联通专线进来的流量,从电信专线出去,造成网络不通。

RouterID

RouterID(路由器ID)是一个32位整数,在OSPF系统中唯一标识一台OSPF路由器。

邻居关系和邻接关系

路由器启动OSPF协议后,会定时通过打开OSPF功能的接口发送OSPF Hello报文。收到Hello报文的设备,比较Hello报文中的参数和接口参数,例如:area ID,若参数一致,则形成邻居关系。

形成邻居关系后,若两端设备成功交换DD报文和LSA报文,才建立邻接关系。不是所有的邻居关系都会变成邻接关系。

DR/BDR/DROther

在广播网或NBMA网络中,可能同时存在很多OSPF路由器,不需要两两之间形成邻接关系。因此,需要选举出DR(指定路由器)和BDR(备份指定路由器),其它的路由器则称为DRother(非指定路由器)。仅当DR、BDR、以及全部路由器形成邻接关系时,才可减少OSPF报文交换,加速路由计算。

DR和BDR通过选举算法产生,选举参数包含:OSPF接口优先级、RouterID等。在实践中尽量让物理路由器选举为DR和BDR,因为VPC路由器可能因为云平台操作导致关机,从而影响整个数据中心的网络抖动。

区域

在一个大型网络系统中,可能会出现很多问题,例如:路由信息过多、路由计算时间过长、路由收速度敛慢等。任何一个网络变化,都会导致所有路由器重新计算路由,从而引发路由震荡。

OSPF通过将大型网络划分成多个区域来解决这一问题,每个区域有一个Area ID(区域ID)。

根据LSA分发情况,区域可分为:普通区域、Stub区域、NSSA区域、Totally NSSA区域。

LSA

OSPF是基于网络Topo信息计算路由信息的协议。LSA(链路状态)用于描述网络Topo状态。
LSA类型 描述
Type 1 每个OSPF路由器产生一条Type 1 LSA,描述了设备的链路状态和开销,在所属的区域内传播。
Type 2 由DR(指定路由器)生产,描述一个广播网连接的OSPF路由器,在所属的区域内传播。
Type 3 ABR(区域边界路由器)产生,把区域内网段的路由发布到其它区域。
Type 4 ABR(区域边界路由器)产生,描述到ASBR的路由信息。
Type 5 ASBR(自治域边界路由器)产生,把区域外路由发布到相关区域。

组播

在众多网络业务场景中,存在这样一种业务场景:一份数据需要发给多个接收者。可提供的解决方案:
  • 发送源复制数据,发送多份数据。缺陷:若接收者成千上万,将给发送源造成巨大负载压力,同时发送端的网络带宽也承受巨大压力。
  • 发送源发送一份广播数据,让交换机来复制。缺陷:不能跨三层进行转发,且对不是接收者的设备带来额外的CPU和网络压力。

组播技术可有效解决单点发送、多点接收的问题。事实上该技术在有线电视、实时视频会议等领域已有广泛应用。

组播技术包含以下要点:

组播地址

组播地址范围:224.0.0.0 ~ 239.255.255.255。与单播地址一样,组播地址也按用途进行了划分。
范围 用途
224.0.0.0 ~ 224.0.0.255 保留地址。例如:OSPF使用224.0.0.5,VRRP使用224.0.0.18
224.0.1.0 ~ 238.255.255.255 用户可用的组播地址
239.0.0.0 ~ 239.255.255.255 本地组播地址

组播成员管理

组播注册协议用来在交换机和路由器上维护组播组和组播接收者之间关系。

IPv4组播注册成员管理使用IGMP协议。IGMP协议有以下三个版本:
  • IGMPv1:定义了基本的组成员查询和报告过程。
  • IGMPv2:增加了组成员快速离开的机制等。
  • IGMPv3:增加对SSM模型的支持等。

组播转发树

由于组播是单点发送、多点接收,需在组播源和组播接收者之间生成一个转发树。
  • 源树(SPT):以组播源作为树根转发树。网络要为任何一个向该组发送报文的组播源建立一棵树,路由表的规模非常大。SPT同时适用于PIM-DM网络和PIM-SM网络。
  • 共享树(RPT):以某个路由器作为树根,该路由器称为汇集点(RP),以RP到所有接收者的最短路路径所共同构成的转发树。每个组播组,网络中只维护一棵树。组播源先向树根(RP)发送数据报文,再按照共享树转发到达所有的接收者。RPT适用于PIM-SM网络。

组播路由协议

常用的组播路由协议为PIM协议。PIM协议有三种工作模式:PM-DM、PM-SM、PIM-SSM模式。