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 驱动来创建(实测稳定可用)。
- 资源位置(包含 TAP 组件):gitcode.com/open-source…
- 参考文章(桥接模式排错思路):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-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 创建虚拟网卡后问题消失。
解决步骤
- 安装 OpenVPN(或独立 TAP-Windows 包),创建
TAP-Windows Adapter V9。 - 在 QEMU 启动参数里,将
ifname指向该 TAP 的“连接名称”。 - 如使用网桥,将“物理网卡 + TAP”桥接为“网络桥”,后续给“网络桥”分配/获取 IP。
- 参考资源:
- OpenVPN TAP 组件与相关脚本仓库:gitcode.com/open-source…
四、问题二:桥接模式下虚拟机无法与局域网互通
- 现象:虚拟机启用桥接后无法与 LAN 其他设备互通,主机侧“网络桥”/TAP 获得了无效 IP(169.254.x.x 等),或虚拟机拿不到有效地址。
- 根因:网络中没有路由/网关,也没有 DHCP 服务,导致桥接侧无法自动获取到正确网段的 IP。
排查过程与截图
- Windows 侧桥接后“无法获取有效 IP”的状态:
- 手动为“网络桥”设置静态 IP(与局域网同一网段,正确的掩码/网关/DNS):
- 虚拟机内查看网卡与地址(ifconfig/ip a 等):
- 手动配置后互通成功(可与外网或同网段主机互 ping/访问):
解决方案(标准做法)
- 明确你的局域网网段、掩码、网关与 DNS(例如 192.168.1.0/24,网关 192.168.1.1)。
- 为 Windows 的“网络桥”手动设置静态 IP(如 192.168.1.10/24,网关/DNS 指向上游)。
- 虚拟机侧:
- 若镜像可通过 DHCP,且上游有路由/DHCP,保持自动获取即可;
- 若上游没有 DHCP,给虚拟机网卡手动配置同网段静态 IP(例如 192.168.1.20/24,网关 192.168.1.1)。
- 验证:主机与虚拟机互相 ping;再 ping 局域网其他机器和网关;最后访问外网。
参考文章(思路一致):ftp.yucai.sh.cn/f/csdn/0707…
五、验证与回归清单
-
验证项:
- 主机与虚拟机互相可达;
- 虚拟机可达网关与同网段设备;
- DNS 解析与外网访问正常(如
nslookup、ping 114.114.114.114与ping www.baidu.com)。
-
回归清单:
- 更换 TAP 名称后是否仍能正常启动(
ifname参数同步修改); - 重启后网桥 IP 是否保持(必要时改为“为此连接使用以下 IP 地址”);
- QEMU 升级/更换机型参数后,virtio 网卡驱动是否仍被镜像识别。
- 更换 TAP 名称后是否仍能正常启动(
六、常见参数与提示
- 机型与网卡:aarch64 常用
-M virt+-device virtio-net-pci。若镜像未内置 virtio,可尝试e1000等通用型号。 - 启动固件:多数 ARM64 镜像推荐 UEFI(如
-bios QEMU_EFI.fd)。 - 快速联网(无桥接):用户态 NAT(
-netdev user)稳定且免驱动,适合“只需上网”的场景。 - 无线网卡桥接:兼容性依厂商/驱动而异,若不通优先排查“是否有路由/网关/DHCP”。
参考与致谢
- OpenVPN TAP 组件与相关脚本:gitcode.com/open-source…
- 桥接模式排错参考:ftp.yucai.sh.cn/f/csdn/0707…
总结
- 使用 QEMU 在 Windows 11 上模拟 ARM 并安装国产化系统时,网络往往是“第一拦路虎”。
- 问题一实测表明:通过 OpenVPN 的 TAP-Windows 创建虚拟网卡更稳,避免“命令创建”的网卡在启动阶段不可用。
- 问题二的关键在于“上游是否存在路由/网关/DHCP”:若无,桥接侧无法自动拿到有效 IP,需给“网络桥”与虚拟机手动配置静态地址。
- 根据文中脚本与检查清单逐项核对,基本可以稳定复现并解决这两类网络问题。