最近看到一些人问 NSX-T 支不支持混杂模式,于是写这篇文章来做一说明。
本文内容可以概况为:NSX-T 不支持混杂模式,但可以满足混杂模式常见的两种使用场景:即流量监控和虚拟化嵌套。
关于混杂模式
混杂模式在 vSphere 环境下是个很常用的特性,无论是标准虚拟交换机还是分布式虚拟交换机均支持。
“下图为标准虚拟交换机的端口组配置截图”
“下图为分布式虚拟交换机的端口组配置截图”
事实上,混杂模式并不是 vSphere 环境下独有的特性,而是一个通用的网络术语。
在传统网络中,混杂模式一般是个网卡层面的属性,未开启混杂模式的网卡仅会接受发给其 MAC 地址的单播报文(以及广播报文),而开启此模式后,只要是网卡接收到的流量,都可以传送给操作系统驱动进行处理。通常这种模式可以用于流量监控,在容器环境下,部分网络插件,例如 MACVLAN 也需要网卡混杂模式才能正常运行。
“临时为 Linux 网卡开启混杂模式截图”
在 vSphere 虚拟化中,混杂模式是个端口组级别的设置,当为端口组开启混杂模式后,所有连接到同一端口组的虚拟机均能看到其他虚拟机的所有流量,通过这种配置,可以轻松在虚拟化中实现两种功能:
1、流量监控:在同一个端口组下部署业务虚拟机和监控虚拟机,监控虚拟机可以直接看到业务虚拟机的流量并进行监控分析;
2、虚拟化嵌套:学习 vSphere 的朋友经常会在物理服务器上安装 ESXi,然后在此 ESXi 上再安装多台 ESXi,实现嵌套 vSphere 环境来完成各种复杂的实验(VMware 的 Hands-on-Labs 就是基于虚拟化嵌套构建的)。在这种场景下嵌套 ESXi 的端口组就需要开启混杂模式,这样在其上面运行的虚拟机才能正常和外部通信。
除了混杂模式之外,端口组级别也有另外两个配置一般也需要开启:
- MAC 地址更改:指是否允许 VM 修改其 MAC 地址,如果禁用此特性,一般 VM 只能使用其 vNIC 的 MAC 地址发送流量;
- 伪传输:指是否接收 VM 上除了 vNIC 之外的 MAC 地址发出的数据。一般置备好虚拟机之后,vSphere 会为 VM 分配一个 vNIC,此 vNIC 会随机生成一个 MAC 地址,通常 VM 内的操作系统会使用此 MAC 来封包发包,但在某些特殊场景下,虚拟机会发出非此 MAC 的包(例如针对上图的 dvpg-Trunk 端口组,会收到来自上游嵌套 ESXi 的多个 MAC 地址的包),这种特殊场景下,就需要打开“伪传输”。
混杂模式之外
前面讲了一大堆,提到混杂模式可以满足两个常见的使用场景:流量监控和虚拟化嵌套。那混杂模式一定是必须的吗?答案是“否”。
流量监控
针对流量监控,网络中最常见的手段是端口镜像(Port Mirroring)。在物理网络中,端口镜像功能一般由交换机实现,可以实现将 A 物理口的流量镜像发送给 B 物理口(一般称作本地 SPAN),也可以实现将 A 物理口的流量发送给其他设备,其他设备再将相应流量发送器其 B 物理口(一般称作远程 SPAN)。
在虚拟化中,vSphere 的 vDS 很早就支持这些特性,在官方文档中也有详细的配置说明:
虚拟化嵌套
针对虚拟化嵌套的场景,要使得嵌套环境中的 VM 能和外部通信,理论上只需要使得外部网络(包含宿 ESXi 主机及物理网卡等)接受 VM 的流量,且能够转发流量即可。这时候仅需要下列功能即可:
- MAC 地址更改/伪传输:允许嵌套虚拟机的 MAC 发给宿 ESXi 的端口组;
- MAC 地址学习:熟悉网络的人可能知道,二层网络通信靠 ARP 解析目标 MAC 地址,如果一个嵌套 VM 的 ARP 包能被正常发送到其他位置,并能正确收到回应,那就可以完成二层通信。在虚拟化中,vSwitch 默认只会转发 VM vNIC MAC 的报文,这就使得嵌套 VM 的报文不能被上层的 ESXi 处理。要使得上层 ESXi 能够处理这样的报文,在 vSphere 6.7 之前的版本中,只能用混杂模式来解决,而在 vSphere 6.7 及之后的版本,则可以使用 MAC 地址学习功能来解决。
目前 MAC 地址学习功能仅支持在 vDS 上配置,同时需要通过 API (及 PowerCLI 等工具)开启:
开启方法可以参考下列博客:
NSX 支持
了解清楚了混杂模式的场景和原理,再回头看 NSX 支持情况。
流量监控
NSX 和 vDS 一样,支持多种端口镜像的方式,曾经整理过一页思维导图,直接粘贴过来:
虚拟化嵌套
NSX 具备比 vDS 更多、更细的二到七层安全策略,其中关于二层的安全配置均放在分段配置文件中:
NSX 共有 5 中分段配置文件,其功能如下图所示:
其中前面提到的“MAC 更改/MAC发现”均可在 MAC 发现策略中配置。当开启 MAC 学习后,直接具备类似 vDS 的伪传输功能,因此完全可以满足虚拟化嵌套这一场景。
具体配置使用上非常简单:
1、新增一个 MAC 发现配置文件,开启 MAC 更改和 MAC 学习;
2、创建一个 VLAN 分段(仅有 VLAN 分段支持嵌套 VLAN 网络,Overlay 分段上不支持多 VLAN),为分段关联 MAC 发现配置文件(下图中创建了一个 Trunk 类型的分段,放行多个 VLAN);
3、为嵌套虚拟机(例如 ESXi)关联此分段。
之后如果此 VM 内有多个 MAC/IP,在外部网络就绪的情况下和外部可以互通。(例如下图中,在 VM 内使用 Antrea 部署了多个容器,分别在不同的 VLAN 网段内,每个容器有不同的 MAC 地址,和外部通信均正常。)
---本文完---
更多精彩文章欢迎关注微信公众号“NSX很可爱的”查看。