在我们的实验室中,我们为所有设备分配了静态 IP。我们有不到 20 台设备,一些是物理的,一些是 ESXi 上的虚拟设备,从服务器到 Android 平板电脑。所有设备都是有线以太网。交换机上有 3 个 VLAN。我们的虚拟 Linux 机器运行良好,因为 vSwitch 似乎应用了标签,但我们的物理 Linux 机器需要将其 ifcfg-eth0 接口更改为 ifcfg-eth0.20 才能参与网络。我们的带有以太网加密狗的 Android 平板电脑无法像 Linux 那样为 vlan 标记创建这个新的以太网配置,因为它没有 root 权限,而且据我所知没有用于有线 vlan 设置的工具。(它是 Android 4.0。)
交换机难道不应该负责根据机器的子网和插入的端口标记网络流量吗?为什么物理 Windows 机器似乎无需额外设置即可处理 VLAN,而 Linux 物理机器需要新的接口配置才能查看流量?物理交换机难道不应该能够像 vSwitch 为我们的虚拟机执行的操作一样执行此操作吗?
我只想让 Android 设备使用来自虚拟机和 Windows 机器的服务,但我甚至无法 ping 通它们或网关,因为无法在设备上手动设置 VLAN。
答案1
交换机难道不应该负责根据机器的子网和插入的端口标记网络流量吗?
VLAN 是第 2 层构造,而 IP 地址是第 3 层构造。VLAN 和 IP 地址之间没有直接关系。
在我看来,您已将交换机端口配置为 VLAN 的标记端口,但您可能不应该这样配置它们。当交换机端口被标记时,交换机会在帧中插入 VLAN 标记,连接到该交换机端口的端点负责处理该 VLAN 标记。通常,除了交换机上的中继端口外,您不需要或不需要 VLAN 标记。大多数 VLAN 流量在未加标记的情况下通过交换机。交换机知道流量属于哪个 VLAN,并将根据 VLAN 在交换机端口之间适当移动它。中继端口通常在交换机之间承载多个 VLAN 的流量,因此需要标记这些帧,以便接收交换机知道流量属于哪个 VLAN。
听起来您在 ESXi vSwitches 上使用 VST(虚拟交换机标记),这可以解释您的虚拟机为何能工作。vSwitch 正在处理 VLAN 标记。
我怀疑 Windows 机器连接到了未标记的本机/默认 VLAN,这解释了它们为什么能正常工作。
总结一下我的假设:
您的物理 Windows 机器正在运行,因为它们连接到本机/默认 VLAN(未标记)中的交换机端口,并且它们在其 NIC 配置中不需要 VLAN 标记。
您的虚拟机能够正常工作,因为 ESXi vSwitch 正在管理 VLAN 标签。
您的其他设备无法工作,因为它们不在本机/默认 VLAN 中,并且您的 VLAN 端口配置为带标记,而这些机器的 NIC 配置未配置适当的 VLAN ID,因此无法处理 VLAN 标记流量。
答案2
您确实不应该在实际客户端设备上设置 VLAN 标签。这会产生太多管理开销,而且根本不具备可扩展性。
相反,您应该将设备的相关交换机端口设置为所需 VLAN 的未标记(或本机)。
VMware 是一个例外,但相似的是,理解为什么在客户操作系统而不是 vswitch 中没有设置标签。