我需要帮助解决一个我无法理解的问题。 我有一些在嵌入式设备上运行的虚拟机,我动态创建一个虚拟机,在我启动这个虚拟机之后加载一些参数。网络从dhcp服务器获取ip没有问题,你可以看到我使用的qemu命令:
qemu-system-aarch64 \
-cpu host \
-machine type=virt \
-enable-kvm \
-nographic \
-smp 1 \
-m 64 \
-serial stdio \
-monitor telnet:127.0.0.1:4448,server,nowait \
-kernel ./Image \
-append 'console=ttyAMA0 earlyprintk=pl011,0x1c090000 loglevel=9 root=/dev/vda rw rootwait' \
-drive file=./rootfs.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
-netdev tap,id=eth0,script=no,ifname=tap0 \
-device virtio-net-pci,netdev=eth0,mac=00:16:35:AF:94:00
在启动vm之前,我创建了一个连接到网桥的tap接口,其中phisical接口eth0也连接到网桥。 一切都在使用qemu,但我需要使用libvirt来管理vms,我不知道如何使用我的tap接口与libvirt。我尝试使用从虚拟管理器生成的默认网桥,它正在工作,但是libvirt为vm的内部接口生成一个随机mac地址。我需要像qemu命令一样手动设置mac地址。
答案 0 :(得分:0)
谢谢Daniel,我解决了问题,这是我的实际配置:
您必须确保/etc/sysctl.conf
包含以下行
net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1
net.ipv6.conf.all.forwarding = 1
比我创建了新的macvtap接口
sudo ip link add link eth0 name macvtap0 type macvtap mode bridge
sudo ip link set macvtap0 address 1a:46:0b:ca:bc:7b up
sudo ip link show macvtap0
使用macvtap网络的x86_64 vm的Qemu命令
qemu-system-aarch64 \
-cpu host \
-machine type=virt \
-enable-kvm \
-nographic \
-smp 1 \
-m 64 \
-serial stdio \
-monitor telnet:127.0.0.1:4448,server,nowait \
-kernel ./Image \
-append 'console=ttyAMA0 earlyprintk=pl011,0x1c090000 loglevel=9 root=/dev/vda rw rootwait' \
-drive file=./rootfs.ext4,if=none,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
-netdev tap,id=eth0,script=no,ifname=tap9 \
-device virtio-net-pci,netdev=eth0,mac=00:16:35:AF:94:4B
在我的情况下,tap9
是从macvtap界面创建的点击。所以使用qemu-kvm它正在工作。
现在我向您展示我为libvirt创建的xml
<domain type="kvm">
<name>vmdhcp</name>
<memory unit='KiB'>55200</memory>
<currentMemory unit='KiB'>55200</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='aarch64' machine='virt'>hvm</type>
<kernel>/var/lib/libvirt/images/Image</kernel>
<cmdline>root=/dev/vda</cmdline>
<boot dev='hd'/>
</os>
<cpu mode='custom' match='exact'>
<model fallback='allow'>host</model>
</cpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rootfs.ext4'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='direct'>
<mac address='00:16:00:7b:4b:8c'/>
<source dev='eth0' mode='bridge'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices>
使用libvirt,您不需要手动创建macvtap接口,因为使用此配置,libvirt会自动创建一个连接到eth0
物理接口的macvtap接口,每个vm运行一个。
所以,我希望这个解释对其他用户有用。