<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[gOxiA=苏繁=SuFan Blog]]></title> 
<link>https://goxia.maytide.net/index.php</link> 
<description><![CDATA[gOxiA,苏繁,sufan,Microsoft MVP]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[gOxiA=苏繁=SuFan Blog]]></copyright>
<item>
<link>https://goxia.maytide.net/read.php/2129.htm</link>
<title><![CDATA[HOWTO: 解决 Windows 11 24H2 Hyper-V VM 中 Windows DHCP Server 无法分发 IP 的问题]]></title> 
<author>gOxiA &lt;sufan_cn@msn.com&gt;</author>
<category><![CDATA[Windows Client]]></category>
<pubDate>Thu, 19 Dec 2024 15:05:17 +0000</pubDate> 
<guid>https://goxia.maytide.net/read.php/2129.htm</guid> 
<description>
<![CDATA[ 
	<p><img alt="troubleshooting" src="http://goxia.maytide.net/ftpup/2016/a2734efd2a17_D06F/troubleshooting_thumb.png"></p><p><strong><font color="#fd3f0d">HOWTO: 解决 Windows 11 24H2 Hyper-V VM 中 Windows DHCP Server 无法分发 IP 的问题</font></strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://goxia.maytide.net" target="_blank">gOxiA</a> 今天要分享的是近期遇到的一个 DHCP Server 和 Hyper-V VM 相关的棘手问题，环境其实很简单！宿主机系统为 Windows 11 24H2，安装了 Hyper-V 并创建了 Private Switch 用于 VM 之间通信，VM 分别是一个 Windows Server 2025（以下简称 WS2025）和一个 Windows 11 24H2（以下简称 Client），其中 WS2025 基于工作组环境，并安装了 DHCP 和 WDS Role，在 DHCP 上配置了一个作用域，WDS 主要提供 PXE Boot。检查各项服务和日志都没有异常，但是很奇怪！通过另一个 VM 执行 PXE Boot 时失败，没有任何服务器响应。之后进入这个 VM 的 Windows 11 24H2 系统，发现无法获取 IP，但是如果手动配置 IP，Client 即可以 Ping 通 WS2025。为了排除 WS2025 DHCP 问题，又导入了以前能够正常使用的 VM 模板，其 DHCP Server 基于 Windows Server 2016，但仍旧无法正常分发 IP，只能手动配置 IP 进行通信。为了进一步的测试验证，又安装了一个 Ubuntu Server 24.04.1，并配置了 DHCP 和 PXE，却能够正常工作。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到底是哪里出了问题呢？！</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 怀疑过 Hyper-V 自身配置，Hyper-V Virtual Switch 是基于软件的第二层以太网网络交换机，包括了以编程方式管理且可扩展的功能，还提供了安全、隔离和服务级别的策略。对应的 Virtual Network Adapter 也提供了丰富的功能选项，在检查并测试了它们的相关功能选项后，均没能解决。</p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_Switch-1.png"><img width="630" height="599" title="Hyper-V_Switch-1" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Hyper-V_Switch-1" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_Switch-1_thumb.png" border="0"></a></p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_Switch-2.png"><img width="630" height="599" title="Hyper-V_Switch-2" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Hyper-V_Switch-2" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_Switch-2_thumb.png" border="0"></a></p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-1.png"><img width="630" height="666" title="Hyper-V_network-1" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Hyper-V_network-1" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-1_thumb.png" border="0"></a></p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-2.png"><img width="630" height="666" title="Hyper-V_network-2" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Hyper-V_network-2" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-2_thumb.png" border="0"></a></p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-3.png"><img width="630" height="665" title="Hyper-V_network-3" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Hyper-V_network-3" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Hyper-V_network-3_thumb.png" border="0"></a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也怀疑过是 Hyper-V 宿主 Windows 11 24H2 自身的问题，但苦于重装系统麻烦，所以最终选择用抓包的方式排查，抓包的方案是直接在 WS2025 中安装 Wireshark 并执行抓包。非常神奇！在进行抓包时 WS2025 竟然能够正常分发 IP 了，从截图可见 DHCP Offer 和 DHCP ACK，其中 DHCP Offer 表示 DHCP Server 正确接收到请求并发出响应，DHCP ACK 表示 DHCP Server 确认 IP 租用成功。</p><p><a href="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Wireshark.png"><img width="630" height="316" title="Wireshark" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Wireshark" src="http://goxia.maytide.net/ftpup/2018/426362d2bf8a_127E6/Wireshark_thumb.png" border="0"></a></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么 Wireshark 抓包时 DHCP 就能工作正常呢？！</p><p>1. Promiscuous Mode，抓包时 Wireshark 将网卡置于混杂模式，让它可以接收所有流经网卡的流量，包括目标不是本设备的数据包（如广播包）。</p><p>2. 绕过硬件的 Offload 功能，暂时禁用如 UDP/TCP Checksum Offload，可以让我们捕获到未处理过的原始数据包。</p><p>3. 调整网络堆栈行为，以强制网卡处理所有数据包。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何做进一步的排错呢？！</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面提到开启 Wireshark 抓包时 DHCP 可正常分发 IP，说明当前 WS2025 的 DHCP Role 配置正确，且工作正常；Ubuntu Server 默认可正常执行 DHCP 分发，可排除 Hyper-V Virtual Switch 配置；那剩下的就是为 VM 配置的 Virtual Network Adapter 了，前面在 Hyper-V 控制台对 VM 的虚拟网卡进行过调整测试，均未能解决。剩下最后的就是 VM 系统环境中的 Microsoft Hyper-V Network Adapter 驱动部分的高级选项了。经检查包含以下可以的选项。</p><p>1. IPSec Offload<p>2. IPv4 checksum offload<p>3. Jumbo Packet<p>4. Large Send Offload Version 2 (IPv4)<p>5. Large Send offload version 2 (IPv6)<p>6. Network Direct (RDMA)<p>7. Packet Direct<p>8. Receive Side Scaling<p>9. Recv Segment Coalescing (IPv4)<p>10. Recv Segment Coalescing (IPv6)<p>11. RSS Profile<p>12. TCP Checksum offload (IPv4)<p>13. TCP Checksum offload (IPv6)<p>14. UDP Checksum offload (IPv4)<p>15. UDP Checksum offload (IPv6)<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结合前面 Wireshark 抓包时的情况，重点锁定在以下三个方面：<p>1. <strong>Large Send Offload Version 2</strong>，将大数据包的分段操作卸载到网卡硬件上，提高性能。对于 DHCP 这类的广播流量，分段操作可能不适用，如果网卡在广播包处理上有问题，可能导致 DHCP Discover 丢失。</p><p>2. <strong>Recv Segment Coalescing</strong>，将接收的小数据包合并成更大的包以减少处理次数。广播包可能在合并过程中丢失或被延迟处理。</p><p>3. <strong>UDP Checksum Offload</strong>，将 UDP 数据包的校验和计算卸载到网卡硬件上。DHCP 使用 UDP 协议，如果校验和计算错误，可能导致 DHCP Discover 被识别为无效包。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在研读 Hyper-V Switch 技术文档时留意到不同操作系统版本中，其 NDIS 版本也有所不同，果然在“<a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/network/introduction-to-ndis-6-89/?WT.mc_id=WDIT-MVP-4000544" target="_blank">Introduction to NDIS 6.89</a>”一文中了解到 Windows 11 24H2 使用的便是 NDIS 6.89，而在功能更新中提到了“<a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/network/udp-rsc-offload" target="_blank">UDP Receive Segment Coalescing Offload</a> (<a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/network/udp-rsc-offload" target="_blank">URO</a>)”，从 Windows 11 24H2 开始，UDP接收段合并卸载使网卡能够合并 UDP 接收段，即将来自同一流中匹配一组规则的 UDP 数据报组合到一个逻辑上连续的缓冲区中。然后，这些组合的数据报将作为单个大数据包指示给 Windows 网络栈。合并 UDP 数据报可降低在高带宽流中处理数据包的 CPU 成本，从而提高吞吐量并减少每个字节的周期数。看来非常适合游戏服务器、实时视频流传输和PXE Boot。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此外，在文中 <a href="https://learn.microsoft.com/en-us/windows-hardware/drivers/network/udp-rsc-offload#checksum-validation-and-indication" target="_blank">Checksum validation and indication</a> 部分的阐述，也给出了进一步的排错方向。OK！至此顿悟，一番折腾后问题也终于解决。</p>
]]>
</description>
</item><item>
<link>https://goxia.maytide.net/read.php/2129.htm#blogcomment5237</link>
<title><![CDATA[[评论] HOWTO: 解决 Windows 11 24H2 Hyper-V VM 中 Windows DHCP Server 无法分发 IP 的问题]]></title> 
<author>kzw200015 &lt;kzw200015@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 04 Mar 2025 08:44:18 +0000</pubDate> 
<guid>https://goxia.maytide.net/read.php/2129.htm#blogcomment5237</guid> 
<description>
<![CDATA[ 
	你好，我这边也遇到类似问题，在 hyperv 中的 dhcp 服务器无法发送 dhcp offer 到物理交换机中。其他虚拟机和宿主机都可以正常接收 dhcp 响应。请问最终是如何解决的
]]>
</description>
</item>
</channel>
</rss>