为 Hyper-v 创建虚拟交换机会阻止主机接收 udp 多播

Creating a virtual switch for Hyper-v stops host from receiving udp multicast

基本上我的问题是,一旦我通过 Hyper-V 管理器创建了一个外部虚拟交换机,我就无法接收多播 udp 数据包(流媒体视频),这需要提供来宾 OS 完整的网络.

如果我使用 VLC 并在没有虚拟交换机的情况下在我的主机上播放 RTSP url 那么它可以毫无问题地播放,一旦我添加了虚拟交换机我就无法再播放多播 RTSP url.

背景故事

我通过 Hyper-v 在 Windows 10 Pro 主机上的 Ubuntu 16.04 VM 环境中为 运行 创建了几个 docker 服务。我的 docker 服务需要能够接收多播 udp 数据包,我已经使用 VirtualBox 成功地完成了……但我想使用 Hyper-v。一旦我解决了我的主机无法接收多播的原因,我将继续进行测试以确保我的容器也能够接收。

信息

在尝试流式传输多播 RTSP url 时执行此 show joins 命令时,虚拟交换机上的 239.168.1.75 地址会适当增加其引用计数,然后在 VLC 关闭后,引用计数会恢复下来,所以它看起来像是 joining/leaving 正确的组。

netsh 接口 ip 显示连接

Interface 1: Loopback Pseudo-Interface 1

Scope       References  Last  Address
----------  ----------  ----  ---------------------------------
0                    0  Yes   224.0.0.251
0                    4  Yes   239.255.255.250

Interface 28: vEthernet (New Virtual Switch)

Scope       References  Last  Address
----------  ----------  ----  ---------------------------------
0                    0  Yes   224.0.0.1
0                    3  Yes   224.0.0.251
0                    1  Yes   224.0.0.252
0                    0  Yes   239.168.1.75
0                    4  Yes   239.255.255.250

Interface 15: Local Area Connection* 5

Scope       References  Last  Address
----------  ----------  ----  ---------------------------------
0                    0  Yes   224.0.0.1

路线打印

===========================================================================
Interface List
 15...00 ff 10 60 55 c4 ......Juniper Network Connect Virtual Adapter
 28...9c eb e8 35 1a 1e ......Hyper-V Virtual Ethernet Adapter
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.138     25
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      192.168.1.0    255.255.255.0         On-link     192.168.1.138    281
    192.168.1.138  255.255.255.255         On-link     192.168.1.138    281
    192.168.1.255  255.255.255.255         On-link     192.168.1.138    281
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link     192.168.1.138    281
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link     192.168.1.138    281
===========================================================================
Persistent Routes:
  None

igmpquery (https://code.google.com/archive/p/igmpquery)

使用此工具时,我可以在删除虚拟交换机时查询网络并获得响应,但是一旦再次添加,它就会失败。

使用虚拟交换机

IGMP query generator V1.4
    Project web site: http://code.google.com/p/igmpquery/
    Requires WinPcap

\Device\NPF_{807EAC56-4C04-424D-9DDE-4411FB900E3C}
    Description: Juniper Network Connect Virtual Adapter

    Address Family Name: AF_INET
    Address: 0.0.0.0
    Netmask: 255.0.0.0
    Broadcast Address: 0.0.0.0
IGMPv2 general query 0.0.0.0 -> 224.0.0.1

listening for responses ...


\Device\NPF_{27895664-EDF7-44E0-9753-E549EDCAD6E7}
    Description: Realtek USB NIC

没有虚拟交换机

IGMP query generator V1.4
    Project web site: http://code.google.com/p/igmpquery/
    Requires WinPcap

\Device\NPF_{807EAC56-4C04-424D-9DDE-4411FB900E3C}
    Description: Juniper Network Connect Virtual Adapter

    Address Family Name: AF_INET
    Address: 0.0.0.0
    Netmask: 255.0.0.0
    Broadcast Address: 0.0.0.0
IGMPv2 general query 0.0.0.0 -> 224.0.0.1

listening for responses ...


\Device\NPF_{27895664-EDF7-44E0-9753-E549EDCAD6E7}
    Description: Realtek USB NIC

    Address Family Name: AF_INET
    Address: 192.168.1.138
    Netmask: 255.255.255.0
    Broadcast Address: 0.0.0.0
IGMPv2 general query 192.168.1.138 -> 224.0.0.1

listening for responses ...
15:44:06.551   192.168.1.85      ->   224.0.0.252       IGMP Rpt 224.0.0.252
15:44:06.593   192.168.1.71      ->   224.0.0.251       IGMP Rpt 224.0.0.251
15:44:06.624   192.168.1.79      ->   224.0.0.252       IGMP Rpt 224.0.0.252
15:44:06.828   192.168.1.89      ->239.255.255.250       IGMP Rpt 239.255.255.250

我不是 100% 确定灵丹妙药是什么,尽管它现在起作用了。

  • 删除虚拟交换机
  • 重置网络设置
    • netsh winsock 重置
    • netsh int ip 重置
    • ipconfig /release
    • ipconfig /更新
    • ipconfig /flushdns
    • netsh advfirewall 将所有配置文件状态设置为关闭
  • 重启
  • 添加虚拟交换机
  • 重启
  • 现在,当 运行 igmp 工具时,我从虚拟交换机中收到来自我自己的 PC 的响应,但我的主网络上没有其他设备
  • 已卸载 VirtualBox
    • 貌似没有帮助
  • 沮丧,去睡觉
  • 第二天醒来后,运行我开始使用 igmp 工具从虚拟交换机外的主网络上的设备接收回复
  • 已测试流式组播,一切正常