Windows 11 上用 QEMU 模拟 ARM 并安装国产化操作系统:网络连通性排错实录

366 阅读6分钟

01 | Windows 11 上用 QEMU 模拟 ARM 并安装国产化操作系统:网络连通性排错实录

目标:在 Windows 11 上使用 QEMU 模拟 ARM(aarch64)平台并安装国产化操作系统;记录两类高频网络问题与可复现的解决方案。

亮点:完整复盘“虚拟网卡无法作为启动网卡”和“桥接模式无法与局域网互通”的根因定位与处理步骤,并给出脚本与截图佐证。

  • 主机系统:Windows 11
  • 虚拟化工具:QEMU for Windows(aarch64)
  • 网络:TAP-Windows 适配器、Windows 网桥(Bridge)
  • 测试镜像:任意 ARM64 国产化系统 ISO/镜像(按你实际选择)

环境与资源

  • QEMU for Windows:按需选择包含 qemu-system-aarch64 的发行包。
  • TAP-Windows 适配器:推荐通过 OpenVPN 的 TAP-Windows 驱动来创建(实测稳定可用)。
  • 参考文章(桥接模式排错思路):ftp.yucai.sh.cn/f/csdn/0707…

建议提前准备好 ARM64 的 ISO/镜像文件,并确认其启动方式(UEFI/BIOS)与磁盘/网卡驱动需求(如 virtio)。


一、创建虚拟网卡(TAP)与网桥

1. 为什么不建议用“命令创建”的 TAP?

我起初尝试用命令行工具(例如 tapctl 等)直接创建 TAP 适配器,但遇到“该虚拟网卡在 QEMU 中无法作为启动网卡使用”的问题。表现为:QEMU 启动后网络设备不可用或固件启动项无法通过该网卡 PXE/网络引导。

  • 现象截图(无法正常启动/网卡不可用):

无法启动的问题(示例)

2. 改用 OpenVPN 的 TAP-Windows 适配器(推荐)

实践证明,安装 OpenVPN 附带的 TAP-Windows 驱动并通过它创建 TAP 适配器更稳。安装完成后可在“网络适配器”中看到 TAP-Windows Adapter V9,其名称可自定义或保留默认。

  • 适配器示例截图:

TAP 网卡示例

小贴士:若你安装的是独立的 TAP-Windows 包,也可在“开始菜单 > 添加新的 TAP 适配器”快速创建第二块、第三块虚拟网卡。

3. 可选:与物理网卡创建网桥(Bridge)

如果你希望虚拟机与局域网内其他设备互通(同网段可见),可在 Windows 的“网络连接”中,将“物理网卡(以太网/Wi-Fi)+ TAP 适配器”多选后右键“桥接”,创建一个“网络桥”。

注意:部分无线网卡与桥接兼容性一般,且桥接后 DHCP/路由获取依赖于上游网络。若网内没有路由/网关或 DHCP,不一定能自动拿到有效 IP(后文详述)。


二、QEMU 启动示例与脚本

以下以最常见的 aarch64“virt”机型为例,网卡使用 virtio-net-pci,并绑定到前面创建的 TAP 适配器上。示例脚本为 PowerShell(请根据你的镜像路径自行替换)。

# start-qemu-arm64.ps1(示例)
# 1) 替换以下变量为你的实际路径/名称
$Iso = "D:\\isos\\your_arm64_os.iso"          # ARM64 国产化操作系统 ISO
$Disk = "D:\\vms\\arm64.qcow2"               # 虚拟磁盘(如无可先 qemu-img create -f qcow2)
$TapName = "TAP-Windows Adapter V9"              # 你的 TAP 适配器的名称

# 2) 启动 QEMU(基础示例,可按需增改 CPU/内存/显卡/串口等)
qemu-system-aarch64 `
  -M virt,highmem=on `
  -cpu cortex-a72 `
  -smp 4 -m 4096 `
  -bios QEMU_EFI.fd `
  -device virtio-net-pci,netdev=net0 `
  -netdev tap,id=net0,ifname="$TapName",script=no,downscript=no `
  -device virtio-blk-pci,drive=drv0 `
  -drive file="$Disk",if=none,format=qcow2,id=drv0 `
  -cdrom "$Iso" `
  -boot order=cd `
  -vga std
  • 启动脚本参考截图:

启动脚本(示例)

如果你不做桥接、只求快速联网,也可以用用户态 NAT:-netdev user,id=net0,hostfwd=tcp::2222-:22,这样主机 2222 会转发到虚拟机 22(SSH)。


三、问题一:命令创建的虚拟网卡无法作为“启动网卡”使用

  • 现象:使用命令创建的 TAP 适配器,QEMU 启动后无法通过该网卡进行网络引导,或系统内网络设备不可用。
  • 根因:某些方式创建的 TAP 在 Windows 下注册信息/绑定不完整,导致驱动栈或 QEMU 侧识别异常。
  • 结论:改用 OpenVPN 的 TAP-Windows 创建虚拟网卡后问题消失。

解决步骤

  1. 安装 OpenVPN(或独立 TAP-Windows 包),创建 TAP-Windows Adapter V9
  2. 在 QEMU 启动参数里,将 ifname 指向该 TAP 的“连接名称”。
  3. 如使用网桥,将“物理网卡 + TAP”桥接为“网络桥”,后续给“网络桥”分配/获取 IP。

四、问题二:桥接模式下虚拟机无法与局域网互通

  • 现象:虚拟机启用桥接后无法与 LAN 其他设备互通,主机侧“网络桥”/TAP 获得了无效 IP(169.254.x.x 等),或虚拟机拿不到有效地址。
  • 根因:网络中没有路由/网关,也没有 DHCP 服务,导致桥接侧无法自动获取到正确网段的 IP。

排查过程与截图

  • Windows 侧桥接后“无法获取有效 IP”的状态:

Windows 无法获取 IP(示例)

  • 手动为“网络桥”设置静态 IP(与局域网同一网段,正确的掩码/网关/DNS):

网桥 IP 设置(示例)

  • 虚拟机内查看网卡与地址(ifconfig/ip a 等):

虚拟机 ifconfig(示例)

  • 手动配置后互通成功(可与外网或同网段主机互 ping/访问):

互通成功(示例)

解决方案(标准做法)

  1. 明确你的局域网网段、掩码、网关与 DNS(例如 192.168.1.0/24,网关 192.168.1.1)。
  2. 为 Windows 的“网络桥”手动设置静态 IP(如 192.168.1.10/24,网关/DNS 指向上游)。
  3. 虚拟机侧:
    • 若镜像可通过 DHCP,且上游有路由/DHCP,保持自动获取即可;
    • 若上游没有 DHCP,给虚拟机网卡手动配置同网段静态 IP(例如 192.168.1.20/24,网关 192.168.1.1)。
  4. 验证:主机与虚拟机互相 ping;再 ping 局域网其他机器和网关;最后访问外网。

参考文章(思路一致):ftp.yucai.sh.cn/f/csdn/0707…


五、验证与回归清单

  • 验证项:

    • 主机与虚拟机互相可达;
    • 虚拟机可达网关与同网段设备;
    • DNS 解析与外网访问正常(如 nslookupping 114.114.114.114ping www.baidu.com)。
  • 回归清单:

    • 更换 TAP 名称后是否仍能正常启动(ifname 参数同步修改);
    • 重启后网桥 IP 是否保持(必要时改为“为此连接使用以下 IP 地址”);
    • QEMU 升级/更换机型参数后,virtio 网卡驱动是否仍被镜像识别。

六、常见参数与提示

  • 机型与网卡:aarch64 常用 -M virt + -device virtio-net-pci。若镜像未内置 virtio,可尝试 e1000 等通用型号。
  • 启动固件:多数 ARM64 镜像推荐 UEFI(如 -bios QEMU_EFI.fd)。
  • 快速联网(无桥接):用户态 NAT(-netdev user)稳定且免驱动,适合“只需上网”的场景。
  • 无线网卡桥接:兼容性依厂商/驱动而异,若不通优先排查“是否有路由/网关/DHCP”。

参考与致谢


总结

  • 使用 QEMU 在 Windows 11 上模拟 ARM 并安装国产化系统时,网络往往是“第一拦路虎”。
  • 问题一实测表明:通过 OpenVPN 的 TAP-Windows 创建虚拟网卡更稳,避免“命令创建”的网卡在启动阶段不可用。
  • 问题二的关键在于“上游是否存在路由/网关/DHCP”:若无,桥接侧无法自动拿到有效 IP,需给“网络桥”与虚拟机手动配置静态地址。
  • 根据文中脚本与检查清单逐项核对,基本可以稳定复现并解决这两类网络问题。