LINUX.ORG.RU
ФорумAdmin

Где в QEMU хранится MAC-адресс гостевой машины

 , , , sr-iov,


0

1

Столкнулся с проблемой, что при клонировании (делал через VM-Manager) MAC-адресс тоже клонируется.

Исправил через команду

sudo ip l set ens4f0 vf 3 mac 02:16:3e:62:a5:45
...
// Далее для всех машин

на Хосте.

Проблема, что после перезагрузки они опять слетают и это надо делать заново.

Через настройки виртуальной машины изменить не удаётся, так как использую сетевую карту с SR-IOV. Там просто нет управления картой и я их подключаю как PCI-устройство.

Так вот, а где хранится информация какой мак будет у гостевой машины?

★★★★★

https://wiki.qemu.org/Documentation/Networking

The NIC option should also be use to configure NICs on embedded systems (which can not be used via -device). For example, to connect such an on-board NIC to the tap backend and change its MAC-address, you can use the -nic option like this:

-nic tap,mac=02:ca:fe:f0:0d:01

Если ты запускаешь именно просто через qemu - задавай соответствующий параметр в команде запуска.

Если запускаешь через virsh - пропиши в xml файле конфигурации, если через virt-manager - аналогично.

kostik87 ★★★★★
()
Ответ на: комментарий от keeper_b

что где-то на виртуальной машине

Только если в самой виртуалке на сетевой карте прописал MAC.

А обычно в XML который в libvirt. Как уже подсказали черещ «virsh edit ...» ищешь тег interface

Atlant ★★★★★
()

Через настройки виртуальной машины изменить не удаётся, так как использую сетевую карту с SR-IOV. Там просто нет управления картой и я их подключаю как PCI-устройство.

В таком случае разве MAC не от самой сетевой карты? Посмотри адрес в любой базе в интернете — если производитель карты определяется, то адрес аппаратный. Или если адреса виртуальных карт отличаются лишь последними байтами.

anonymous
()
Ответ на: комментарий от anonymous

До включения машины там вообще нули. А дальше работает так, если машину делал отдельно, то адрес сам сгенерирован, а если клонировал, то она где-то берёт такой же как на клоне.

keeper_b ★★★★★
() автор топика
Ответ на: комментарий от Atlant

В этом и загвоздка, что там нет MAC и его даже назначить нельзя.

<hostdev mode="subsystem" type="pci" managed="yes">
  <driver name="vfio"/>
  <source>
    <address domain="0x0000" bus="0x17" slot="0x10" function="0x0"/>
  </source>
  <alias name="hostdev0"/>
  <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
</hostdev>

Он это видит, как просто какое-то PCI-устройство.

keeper_b ★★★★★
() автор топика
Ответ на: комментарий от keeper_b

Смотря чем сеть настраивается ещё. Клонировать тоже надо правильно, как ты это делаешь? virt-clone должен поменять те вещи, которые могут вызвать конфликты.

anonymous
()
Ответ на: комментарий от keeper_b

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-pci_devices-pci_passthrough

В SR-IOV MAC-адреса рандомно назначаются после перезагрузки гостя.

Если у тебя у всех виртуалок одинаковый MAC (а в настройках виртуалки в гипервизоре его нет) - значит, где-то в стартовых скриптах виртуалки он забит. Может, ты когда-то настраивал и прописал его, например, в /etc/rc.local.

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

Поправил, но при запуске виртуальной машины появляется ошибка:

error: Cannot set interface MAC to 52:54:00:7c:9d:98 for ifname ens4f1 vf 0: Operation not permitted

UPD

Проверил под рутом. Там этой ошибки не появляется. Странно, вроде все нужные права у QEMU и пользователя под каким оно работает есть. В группы qemu,kmv,libvir он входит. Что ещё может быть?

keeper_b ★★★★★
() автор топика
Последнее исправление: keeper_b (всего исправлений: 2)
Ответ на: комментарий от keeper_b

В qemu мак-адрес указывается в параметре -nic:

-nic [tap|bridge|user|l2tpv3|vde|netmap|af-xdp|vhost-user|socket][,...][,mac=macaddr][,model=mn]

А что там эти ваши обёртки вокруг qemu делают - одному богу известно. Проще qemu вызывать с нужными параметрами и голову не ломать, чем добавлять ненужные слои абстракции.

vbr ★★★★★
()
Ответ на: комментарий от keeper_b

На хостовой машине запусти pscap ищи процес qemu у него из рутовых привилегий кажись должен быть cap_net_admin.

Если знаешь какая привилегия root должна быть у процесса чтобы менять мак сетевухи (кажись cap_net_admin) то ее надо добавить в твои трио скрипты.

anonymous
()