我有一个 Hyper-V 盒,它可以记录 IP 电话的通话,并具有以下连接功能:
- 接入端口(本机 VLAN 42)上的 PBX,插入交换机上的端口 22(它没有 VLAN 设置,因此我们设置本机接入 VLAN,以便其所有流量都在 VLAN 42 上)。
- 混合端口上的电话(本机 VLAN 1 用于工作站,标记为 42 用于电话)
- Hyper-V 计算机上用于客户虚拟机的专用 NIC
- Hyper-V 机器上的专用 NIC,用于监控交换机上的端口 21。
- 在 Hyper-V 上启用端口镜像
HP ProCurve 2610-24 交换机配置如下:
mirror-port 21
vlan 1
name "DEFAULT"
untagged 1-17,19-21,23-28
no untagged 18,22
exit
vlan 42
name "VOICE"
untagged 22
tagged 1-20,23,26
exit
interface 22
monitor
exit
我已经在 Hyper-V 主机上启用了监控:
- 在 Hyper-V 主机上,创建一个名为 Monitor 的新虚拟交换机,它物理连接到专用监控 NIC(也为一般流量创建一个单独的交换机)。
- 启用扩展 Microsoft NDIS Capture。
$portFeature=Get-VMSystemSwitchExtensionPortFeature -FeatureName "Ethernet Switch Port Security Settings"
$portFeature.SettingData.MonitorMode = 2
Add-VMSwitchExtensionPortFeature -ExternalPort -SwitchName Monitor -VMSwitchExtensionFeature $portFeature
- 创建新的虚拟机,添加以下虚拟网卡:
- 连接到客户虚拟交换机的用于一般数据流量的网卡
- 连接到监控虚拟交换机的流量监控网卡
- 在客户虚拟机的监视虚拟网卡下,进入
Advanced Features
,将端口镜像模式设置为Destination
。
当我在客户监控虚拟机上运行 wire-shark 时,我只看到从 PBX(源)到电话(目的地)的单向流量,而不是从电话到 PBX 的单向流量。
原则上,由于 PBX 可以发送/接收未标记的数据(在端口 22 上显示),因此这应该在端口监视端口上逐字显示为未标记的数据帧(对于本机 VLAN 42),还是我搞错了方向?
我已经完成了相同的 Hyper-V 设置,但使用的是 Cisco,并且没有出现任何问题,运行正常。
不确定这是我做错了什么,还是 Windows 出了问题,或者是 HP 的问题。非常感谢指点。
答案1
根据上述配置,端口镜像是正确的(HP 在其 25xx 和 26xx 型号上声明,无论被监控的端口是否设置为未标记,其监控都会保留 VLAN 标记 - 请注意,这是用于端口监控的,不确定新型号上的 VLAN 类型是否不同,因为无法在此固件上进行测试)。
我的初始步骤是使用默认监控设置来捕获虚拟机上的流量:
// On Hyper-V host, create a new virtual switch called Monitor, this
// physically connects to the dedicated monitoring NIC (create a separate switch for general traffic also).
// Also Enable extension Microsoft NDIS Capture for this NIC.
$portFeature=Get-VMSystemSwitchExtensionPortFeature -FeatureName "Ethernet Switch Port Security Settings"
$portFeature.SettingData.MonitorMode = 2
Add-VMSwitchExtensionPortFeature -ExternalPort -SwitchName Monitor -VMSwitchExtensionFeature $portFeature
// final step i did through GUI => Under the monitor virtual network adapter
// of the guest VM, go to Advanced Features, and set the port mirror mode to Destination.
我可以看到我获得了所有从 PBX 出来的未标记帧(它没有标记帧的概念)。
然后,我尝试将中继设置为交换机以接收标记的 42 和本机 vlan 42 Set-VMNetworkAdapterVlan -VMName MonitorVM -VMNetworkAdapterName Monitor -Trunk -Allowed VlanIdList 813 -NativeVlanId 42
,此时发现我不再接收 PBX 数据(未标记的帧)。
在网上阅读后我发现Hyper-V 将未标记(VLAN 已禁用)定义为 VLAN ID 0。
将主干设置为虚拟机接受带标签的 42 帧和未带标签的帧(重命名界面以便我只能针对该界面):
$a = Get-VMNetworkAdapter -vmname MonitorVM
$a[1] -NewName Monitor // referenced the monitor NIC, you will need to search array to check
Set-VMNetworkAdapterVlan -VMName MonitorVM -VMNetworkAdapterName Monitor -Trunk -Allowed VlanIdList 813 -NativeVlanId 0
然后我就能看到双向交通了!
答案2
我无法评论 ProCurve 设置,但由于您在 HV 上有一个专用 NIC 用于监控,您是否也需要在虚拟交换机上进行额外的镜像配置?此时流量可以像往常一样传递到 VM。
您是否能够确认 ProCurve 是否正确镜像流量并且至少到达专用 NIC?
答案3
谢谢你的帖子,它对我帮助很大。
我可以确认这也解决了我的情况。我注意到 PowerShell 中的代码片段有点错误(可能是由于某些格式问题),这是我使用的脚本
#Get all network interface reference for a virtual machine
$a = Get-VMNetworkAdapter -vmname testmirror
# Visualize all the virtual network adapters to identify by virtual switch name
$a
#Rename the cards so you can distinguish them, in my situation
#first one is the LAN card and second one is the one connected
#to the SPAN port of the switck
rename-VMNetworkAdapter -VMNetworkAdapter $a[0] -newname "LAN"
rename-VMNetworkAdapter -VMNetworkAdapter $a[1] -newname "LAN_Mirror"
#Finally enable trunking on mirror port
Set-VMNetworkAdapterVlan -VMName testmirror -VMNetworkAdapterName LAN_Mirror -Trunk -AllowedVlanIdList 1-100 -NativeVlanId 0