我在 vSphere 设置中遇到了一些虚拟机非常奇怪的情况,我无法弄清楚发生了什么。
最初,我使用的192.168.9.0/24
网络192.168.9.254
是 DHCP 服务器,192.168.9.43
是网关,192.168.9.82
是我的工作站(它从 DHCP 服务器获得 IP),192.168.9.15
是我同事的工作站。
这工作得很好,网络上的每台机器都可以与其他机器一起工作,它们都能够通过网关相互 ping 通,也可以 ping 通世界其他地方。
已安装 VSphere 6.5 集群,其中三台主机分别具有192.168.9.1
、192.168.9.2
和192.168.9.3
静态地址。这些机器运行 ESXi 版本 6.0.0,3380124,每台都有四个 NIC,连接到一对堆叠的 Dell N1524 交换机,所述交换机连接到网络192.168.9.0/24
。在该集群上,有一个Production
与每台主机 NIC 绑定的网络,因此虚拟机从 DHCP 获取其 IP 192.168.9.254
。这也可以正常工作,但由于虚拟机使用量增加,DHCP 服务器提供的 IP 范围现在非常拥挤,以至于一些普通用户如果在下午到达,就无法获取 IP 地址。
为了避免这种情况,我在 vSwitch 上为每个主机添加了一个新端口组,并为这些端口组赋予了相同的名称 ( VLAN
) 和相同的 VLAN 值,即 42。
戴尔物理交换机已重新配置为允许该 VLAN 以及主机网卡所连接端口上的默认 VLAN(中继模式)。我决定将此 VLAN 设置为一个10.10.10.0/24
网络,以便它很容易从常规网络中识别出来,因此为交换机提供了10.10.10.252
该 VLAN 上的静态 IP。
然后,我创建了一台有两个接口的 Windows 2012 虚拟机,一个在Production
(192.168.9.110),一个在VLAN
( ),并激活了 RRAS 角色,这样这台机器现在就充当了与世界其他地方10.10.10.254
之间的网关。 我创建了第二台只有一个接口的 Windows 2012 虚拟机,使用静态地址,并将其命名为。我激活了域控制器、DHCP 和 DNS 角色。DHCP 在范围内提供租约,而 DNS 只是从网络转发到 DNS10.10.10.0/24
VLAN
10.10.10.253
MDC
10.10.10.50 - 10.10.10.200
192.168.9.0/24
然后,我创建了两个虚拟机,一个在第一台主机上,与 MDC 和 Gateway 一起,另一个在第三台主机上,两者都连接到网络VLAN
。由于连接似乎正常工作,我决定使用以下 PowerCLI 命令将现有虚拟机从文件夹移动Temporary
到VLAN
网络:
Get-Folder Temporary | Get-VMs | Get-networkadapater | set-networkadapter -NetworkName VLAN
我还借此机会确保所有网络适配器都vmxnet3
使用此命令
Get-Folder Temporary | Get-VMs | Get-networkadapater | set-networkadapter -Type vmxnet3
由于连接仍然正常,我创建了另一组虚拟机,也连接到网络VLAN
,放置在所有三个主机上,从而提供以下拓扑:
主持人 1
MDC ( 10.10.10.253
)
网关 ( 10.10.10.254
– 192.168.9.110
)
Machine1_H1 ( 10.10.10.64
)
Machine2_H1 ( 10.10.10.57
)
主持人 2
机器3_H2(10.10.10.65
)
主持人 3
机器4_H3(10.10.10.50
)
机器5_H3(10.10.10.51
)
当谈到网络连接时,无论是内部VLAN
还是连接到外部世界,我都会得到非常奇怪的结果:
- MDC 可以 ping 除交换机之外的所有人(
10.10.10.252
) - 网关可以 ping 除 Machine5_H3 之外的所有人
- Machine1_H1 可以 ping 除 Machine3_H2 之外的所有人
- Machine2_H1 可以 ping 除交换机之外的所有人(
10.10.10.252
) - Machine3_H2 可以 ping 除 Host 1 和 Machine1_H1 之外的所有人
- Machine4_H3 可以 ping 除 之外的所有人
192.168.9.43
,192.168.9.15
并且google.fr
(名称解析正常) - Machine5_H3 可以 ping 除 之外的所有人
192.168.9.254
,192.168.9.82
(我自己的工作站)和10.10.10.254
- 我自己的计算机 (
192.168.9.82
) 可以 ping 通除 Machine5_H3 (10.10.10.51
)之外的所有人
在进行这些测试之前,我确保所有机器上的防火墙都已关闭,并且我还在arp -a
MDC 上运行以查看是否存在 MAC 地址冲突并且没有重复。Temporary
为了以防万一,文件夹中的所有机器也都关闭了,但这并没有改变上述结果。为了安全起见,我使用此代码段强制为这些机器生成新的 MAC 地址:
foreach ($VM in (Get-Folder Temporary | Get-VM))
{
$NetworkAdapter = $VM | Get-NetworkAdapter
$NetworkAdapter | Set-NetworkAdapter -MacAddress 00:50:56:1a:ff:ff -Confirm:$false
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec[] (1)
$spec.deviceChange[0] = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].operation = "edit"
$spec.deviceChange[0].device = $NetworkAdapter.ExtensionData
$spec.deviceChange[0].device.addressType = "generated"
$spec.deviceChange[0].device.macAddress = $null
$VM.ExtensionData.ReconfigVM_Task($spec)
}
这并没有改变任何情况。
然后我在网关上安装了 Wireshark,开始监控流量10.10.10.254
,我可以看到与该机器相关的所有流量。例如,如果我的工作站 ( 192.168.9.82
) 被 Machine5_H3 ( 10.10.10.51
) ping,我可以看到 PING 请求,然后是 PING 回复,但 Machine5_H3 却抱怨它没有收到任何回复。如果我反过来做,我可以看到来自的请求,192.168.9.82
但网关永远看不到任何回复。
因此,我相信一些数据包在某处被丢弃,我主要怀疑是交换机(10.10.10.252
),但我不确定我能做些什么来证实这个理论。
链路聚合最初是在 DELL 交换机堆栈上激活的,但它在从我们的工作站连接到具有网络中 IP 的虚拟机时出现了问题192.168.9.0/24
,所以我们将其关闭了。
不过,在交换机堆栈上更改此设置并没有改变上述情况。
我肯定做错了什么,或者错过了一些配置细节,但我不知道它是什么,并希望任何建议来帮助解决对我来说是个谜的问题。
答案1
根据 Zac67 的评论,我们验证了所有三台主机上的 NIC 组合配置,发现前两台主机使用“基于 IP 哈希的路由”参数,而第三台主机使用“基于原始虚拟端口的路由”。
然后,我们将第三个主机设置为与其他主机相同的值,并阅读与第一个选项相关的警告,即“应在物理交换机上设置链路聚合”。
因此,我们回到交换机并重新激活相应端口的链路聚合,但这导致整个连接变得不稳定,网络中的机器192.168.9.0/24
部分变得无法访问,但对于网络中的机器而言却没有任何改变10.10.10.0/24
。
因此,我们决定反其道而行之,禁用交换机上的链路聚合,并在所有三个主机上使用“基于原始虚拟端口的路由”选项。
这样就可以恢复192.168.9.0/24
网络的正常行为和更好的10.10.10.0/24
网络连接。我说更好是因为有些机器仍然无法访问,也就是说,那些机器Host3
甚至无法访问 DHCP 服务器来检索 IP。
使用 Wireshark 观察流量,我们发现 ARP 广播有时会被过滤,这解释了为什么有些机器无法相互通信,但仍然没有给我们任何可能的解决方案的线索。
经过几个星期的苦苦挣扎却依然没有找到答案之后,我们聘请了最初帮助安装基础设施的顾问,他们告诉了我们两件事:
- LACP 与 VLAN 不兼容
- 交换机的一个端口禁止使用 VLAN 42
因此,确保配置根本不使用 LACP,并且消除端口上的限制以实现完全正常工作的情况。
现在,我们不禁想知道如何设法仅在交换机的一个端口上禁止 VLAN 42。
至于 LACP 和 VLAN 不兼容,我们从未想到这可能是问题的根源,但现在他们告诉我们了,这似乎是堆叠 DELL 交换机时的一个众所周知的问题,但我找不到有关这个问题的任何明确答案。但由于没有它它也能正常工作,所以对我来说一切都很好。