我正在尝试自动创建来宾虚拟机。我正在使用uvt-kvm创建虚拟机。我还将网络类型作为参数。可以是nat
或macvtap
。
现在在脚本中我使用以下步骤创建 macvtap 接口:
MACVTAP_INTERFACE="macvtap$VM_NAME"
ip link add link eno1 name $MACVTAP_INTERFACE type macvtap mode bridge
ip link set $MACVTAP_INTERFACE up
ip addr add 10.0.0.1/24 dev $MACVTAP_INTERFACE
同名的 MACVTAP 接口创建成功,没有任何问题。然后我尝试将其连接到在此步骤之前已在脚本中创建并关闭的客户虚拟机。我尝试了两种连接方式:
Way 1:
virsh attach-interface $VM_NAME --type direct --source eno1 --mode bridge --model virtio --target $MACVTAP_INTERFACE --config
这实际上并没有附加我之前创建的接口,而是创建一个新的接口macvtap11
并将其附加到 VM。虽然设置了源、模式和模型,但目标仍未设置。
Way 2:
cat > interface-{$VM_NAME}.xml << EOF
<interface type='direct'>
<source dev="eno1" mode="bridge"/>
<model type='virtio'/>
<target dev="$MACVTAP_INTERFACE"/>
</interface>
EOF
virsh attach-device $VM_NAME interface-{$VM_NAME}.xml --persistent --config
rm interface-{$VM_NAME}.xml
这也会导致同样的事情。创建一个新的接口并将其附加到虚拟机,并且不考虑这一点<target dev="$MACVTAP_INTERFACE"/>
。
这是我使用 virt-manager UI 创建的 VM 的 XML:
<interface type="direct">
<mac address="52:54:00:58:03:46"/>
<source dev="eno1" mode="bridge"/>
<target dev="macvtap9"/>
<model type="virtio"/>
<alias name="net0"/>
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
当我将接口连接到新的虚拟机时,我确保所有参数保持相同。
请帮我定义自定义接口并将其连接到虚拟机。同样的解决方案也适用于 NAT。
此外,我在创建 MACVTAP 接口时分配了一个公共 IP 地址子网。但是,当我使用 时,我的客户虚拟机没有获得公共 IP ip addr show
。当我在 中创建带有 MACVTAP 接口的虚拟机时virt-manager
,它确实分配了公共 IP。我认为这不是 DHCP 问题,否则 virt-manager 也不应该能够分配 IP。