Mac宿主机SSH连接命令行启动的KVM客户机的方法
核心结论
完全可以通过qemu-system-x86_64的命令行参数配置出等效VirtualBox host-only的网络效果,全程不需要依赖桥接模式,完全适配Mac仅使用WiFi的网络场景。
QEMU默认启动时加载的内置用户态网络(slirp)本质是运行在QEMU进程内部的NAT网关,默认规则仅允许客户机主动向外发起连接,不允许宿主机主动访问客户机的默认10.0.2.15地址;10.0.2.15是QEMU进程内部的虚拟网段地址,不会在宿主机的路由表中生成对应路由条目,这就是你配置正常却无法SSH连接的核心原因,并非虚拟机内部网卡配置错误。
你判断桥接模式不适用的结论完全正确:MacOS的WiFi网卡不支持混杂模式,桥接方案在该场景下稳定性极差,不值得采用。
首选方案:默认网络上配置端口转发(零额外配置,无系统修改)
这是最适合Mac WiFi场景的落地方案,全程不需要创建独立的虚拟网段、不需要修改系统安全设置,和你现有的启动流程兼容度最高,本质是在QEMU进程内把宿主机的本地端口直接转发到虚拟机的SSH服务端口。
完整启动命令
qemu-system-x86_64 \ -m 2G \ ./bastion-rhel7.qcow2 \ -accel hvf \ -netdev user,id=nat0,hostfwd=tcp:127.0.0.1:2222-10.0.2.15:22 \ -device virtio-net-pci,netdev=nat0,mac=52:54:00:12:34:56
配置说明
- 客户机内部网卡不需要做任何修改,保持现有10.0.2.15/24的配置即可,和你贴出的网卡状态完全兼容,保留原MAC地址也不会触发RHEL7的网卡udev规则变更
- 启动完成后,在Mac宿主机执行
ssh -p 2222 root@127.0.0.1即可直接连接虚拟机,不需要等待虚拟机主动发起连接 - 端口转发默认绑定127.0.0.1回环地址,不会暴露到公共网络,安全性足够
- 整个流量路径完全在QEMU进程内完成,不依赖物理WiFi网卡的工作模式,哪怕WiFi断开重连也不会影响连接稳定性
- 如果需要同局域网的其他设备也能访问这台虚拟机的SSH服务,只需要把
hostfwd参数里的绑定地址从127.0.0.1改成0.0.0.0即可
可选方案:纯host-only隔离虚拟网段
如果你需要和VirtualBox host-only网络完全一致的二层互访能力,不需要NAT转换,可以通过本地点对点虚拟接口搭建隔离网络,同样不依赖桥接物理WiFi网卡。
方案特点
- 网络完全隔离在宿主机本地,虚拟机无法主动访问外网,仅能和宿主机互访,安全性高于带NAT的默认网络
- 配置完成后,宿主机和虚拟机处于同一个二层网段,不需要端口映射就可以直接互访所有服务
- 注意:该方案需要在Mac上加载第三方TAP虚拟网卡驱动,过程中需要临时调整系统安全策略关闭SIP,配置复杂度高于端口转发方案,适合有明确隔离网络需求的场景
内容的提问来源于stack exchange,提问作者Ryan Zhang
相关产品推荐
相关产品推荐

