如何告诉 qemu 在网桥上使用特定的 MAC 地址?

如何告诉 qemu 在网桥上使用特定的 MAC 地址?

当我使用 创建虚拟机时,虚拟机会通过生成以下 XML 配置自动virt-install连接到网络接口:virbr0

<interface type="network">
  <source network="default"/>
  <mac address="52:54:00:6a:40:f8"/>
  <model type="e1000e"/>
</interface>

现在我正在尝试复制这一点。

检查默认的 libvirt 网络配置/var/lib/libvirt/dnsmasq/default.conf,我可以知道网络接口名称是virbr0

我设法告诉 qemu 使用相同的接口,如下所示: qemu-system-x86_64 -net nic -net bridge,br=virbr0" ...

但我不知道如何像在 XML 配置中那样指定自定义 MAC 地址。有人可以启发我吗?

对于 Tap 设备,您似乎可以像这样设置 MAC 地址

-netdev type=tap,id=net0,ifname=tap0,script=tap_ifup,downscript=tap_ifdown,vhost=on \
-device virtio-net-pci,netdev=net0,addr=19.0,mac=52:54:00:6a:40:f8

但这不是我想要的。我只是想利用那座virbr0桥。

答案1

我终于弄明白了!

所以这是virt-install默认情况下会执行的操作:

sudo virt-install --network network=default,model=e1000,mac=00:11:22:33:44:55

与 的等效项qemu-system-x86_64是:

INTERFACE_NAME="$(sudo cat /var/lib/libvirt/dnsmasq/default.conf | grep "^interface=" | cut -d'=' -f2-)"
sudo qemu-system-x86_64 -net nic,model=e1000,macaddr=00:11:22:33:44:55 -net bridge,br=${INTERFACE_NAME}

我建议首先确保default网络处于活动状态:

if ! sudo virsh net-list | grep default | grep --quiet active; then
    sudo virsh net-start default
fi

注意:整个默认网络是由软件包提供的libvirt-daemon-config-network(至少在 Fedora 上)。

来自 qemu 手册页:

   -net nic[,netdev=nd][,macaddr=mac][,model=type] [,name=name][,addr=addr][,vectors=v]
          Legacy  option to configure or create an on-board (or machine default) Network Interface Card(NIC) and connect it either to the emulated hub with ID 0 (i.e. the default hub), or to the netdev nd.  If model is omitted,
          then the default NIC model associated with the machine type is used. Note that the default NIC model may change in future QEMU releases, so it is highly recommended to always specify a model. Optionally, the  MAC  ad‐
          dress  can  be changed to mac, the device address set to addr (PCI cards only), and a name can be assigned for use in monitor commands. Optionally, for PCI cards, you can specify the number v of MSI-X vectors that the
          card should have; this option currently only affects virtio cards; set v = 0 to disable MSI-X. If no -net option is specified, a single NIC is created. QEMU can emulate several different models of network  card.   Use
          -net nic,model=help for a list of available devices for your target.

   -net user|tap|bridge|socket|l2tpv3|vde[,...][,name=name]
          Configure a host network backend (with the options corresponding to the same -netdev option) and connect it to the emulated hub 0 (the default hub). Use name to specify the name of the hub port.

从 virt-install 手册页:

NETWORKING OPTIONS
   -w, --network
       Syntax: -w, --network OPTIONS

       Connect the guest to the host network. Examples for specifying the network type:

       bridge=BRIDGE
              Connect to a bridge device in the host called BRIDGE. Use this option if the host has static networking config & the guest requires full outbound and inbound connectivity  to/from the LAN. Also use this if live migra‐
              tion will be used with this guest.

       network=NAME
              Connect  to  a virtual network in the host called NAME. Virtual networks can be listed, created, deleted using the virsh command line tool. In an unmodified install of libvirt there is usually a virtual network with a
              name of default. Use a virtual network if the host has dynamic networking (eg NetworkManager), or using wireless. The guest will be NATed to the LAN by whichever connection is active.

       type=direct,source=IFACE[,source.mode=MODE]
              Direct connect to host interface IFACE using macvtap.

       user   Connect to the LAN using SLIRP. Only use this if running a QEMU guest as an unprivileged user. This provides a very limited form of NAT.

       none   Tell virt-install not to add any default network interface.

       If --network is omitted a single NIC will be created in the guest. If there is a bridge device in the host with a physical interface attached, that will be used for connectivity. Failing that, the virtual network called  de‐
       fault will be used. This option can be specified multiple times to setup more than one NIC.

       Some example suboptions:

       model.type or model
              Network device model as seen by the guest. Value can be any nic model supported by the hypervisor, e.g.: 'e1000', 'rtl8139', 'virtio', ...

       mac.address or mac
              Fixed  MAC address for the guest; If this parameter is omitted, or the value RANDOM is specified a suitable address will be randomly generated. For Xen virtual machines it is required that the first 3 pairs in the MAC
              address be the sequence '00:16:3e', while for QEMU or KVM virtual machines it must be '52:54:00'.

       filterref.filter
              Controlling firewall and network filtering in libvirt. Value can be any nwfilter defined by the virsh 'nwfilter' subcommands. Available filters can be listed by running 'virsh  nwfilter-list',  e.g.:  'clean-traffic',
              'no-mac-spoofing', ...

       virtualport.* options
              Configure the device virtual port profile. This is used for 802.Qbg, 802.Qbh, midonet, and openvswitch config.

              Use --network=? to see a list of all available sub options.  Complete details at https://libvirt.org/formatdomain.html#elementsNICS

              This option deprecates -m/--mac, -b/--bridge, and --nonetworks

相关内容