我正在尝试让主机(arch linux)和qemu guest(busybox initramfs linux)相互连接。访客不需要更广泛的 LAN 访问 - 只需主机-访客网络即可。问题是,qemu guest 内部仅显示环回接口。
以下是我正在使用的基本命令。我尝试过它的不同变体。
qemu-system-x86_64 -enable-kvm -m 1024 -kernel ./vmlinuz -initrd ./initramfs.igz -append "console=ttyS0" -nographic -net nic,vlan=0 -net tap,ifname=tap0,script=no,downscript=no
在运行此命令之前,我在主机上创建了一个 Tap 接口 tap0 并将其用户设置为我的登录用户 ( whoami
)。以混杂模式调出接口。
QEMU 首先发出警告,称 -net 已被弃用,取而代之的是 netdev。但只显示环回接口。可能存在未设置 dhcp 的问题,或其他问题。但我找不到办法看看问题出在哪里。 qemu 日志有 -d 开关,但有很多选项,我不确定对于我想要的日志类型使用哪一个。
另外,我可以在主机上设置一个桥接接口 br0,并将 tap0 奴役到 br0,但对我来说,这似乎毫无意义,因为没有其他东西受奴役于 br0。在我的笔记本电脑上,有 wlan0,但它不会被控制到网桥 - 它会失败并显示“不支持操作”。另外,我对更广泛的局域网访问不感兴趣。
答案1
解决于这个论坛主题。以下是其本质。
缺少的关键是客户内核没有virtio模块。有了这些,就有几种方法可以实现这种网络。这是一个:
brctl addbr brkvm
ip addr add 192.168.56.101/24 dev brkvm
ip link set brkvm up
mkdir /etc/qemu
touch /etc/qemu/bridge.conf
echo "allow brkvm" >> /etc/qemu/bridge.conf
qemu-system-x86_64 -enable-kvm -m 1024 -kernel ./vmlinuz -initrd ./initramfs.igz -append "console=ttyS0" -nographic -netdev bridge,id=bridge,br=brkvm -device virtio net-pci,netdev=bridge
之后,eth0 将作为 guest 内部的接口出现。将其 IP 地址设置为 192.168.56.102/24 并启动就足够了。然后从 guest ping 到主机端的 brkvm 以及从主机 ping 到 guest 端的 eth0 工作正常。