为 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 工具从虚拟交换机外的主网络上的设备接收回复
- 已测试流式组播,一切正常
基本上我的问题是,一旦我通过 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 工具从虚拟交换机外的主网络上的设备接收回复
- 已测试流式组播,一切正常