Чи є спосіб визначити, який віртуальний інтерфейс належить віртуальній машині в хості kvm?


10

Я використовую qemu / kvm з мостовими мережами. У хост-машині є кілька мережевих інтерфейсів "vnetX" без IP-адреси. Я шукаю спосіб дізнатися, які vnetX належать до віртуальної машини.

Я намагався співставити значення MAC-адреси на цих інтерфейсах з MAC-кодами на віртуальних машинах (або XML, який їх визначає), але не відповідає.

Існує brctl-шоу, яке показує інтерфейси vnet, що належать до мосту, але це не корисна інформація.

Чи є спосіб дізнатися це відношення? Дякую!!

Відповіді:


14

Як щодо цього (приклад для vnet13):

$ VNET=vnet13; for vm in $(virsh list | grep running | awk '{print $2}'); do virsh dumpxml $vm|grep -q "$VNET" && echo $vm; done

Тут ми використовуємо virsh dumpxmlдля показу динамічних властивостей щодо VM, які недоступні в статичному визначенні XML VM в /etc/libvirt/qemu/foo.xml. Який vnetXінтерфейс додається, до якого VM є така динамічна властивість. Те саме стосується MAC-адрес VM.


4
Я використовую цю незначну модифікацію, щоб перерахувати, який vm має інтерфейс:for vm in $(virsh list | grep running | awk '{print $2}'); do echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; done
zje

Якщо ви досліджуєте oVirt 'вузол', ви можете використовувати ту саму команду, але virsh слід запускати в режимі "тільки для читання". Просто додайте параметр -r до кожного виклику вирша.
karlacio

6

Спробуйте virsh dumpxml $domain, ви побачите щось на кшталт:

  <interface type='network'>
  <mac address='52:54:00:9d:9d:10'/>
  <source network='default'/>
  <target dev='vnet1'/>
  <model type='e1000'/>
  <alias name='net1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>

alias nameє те , що використовується в командному рядку QEMU-KVM, так що, якщо ви біжите ps -ef |grep qemu|grep net1з мого прикладу, ви побачите , фактичний синтаксис команди , який використовується для цього інтерфейсу.


2

Кожне з наведених вище рішень передбачає, що управлінням візуальних машин керує libvirt. Цілком можливо запустити QMU VM без цього, і в цьому випадку ви не можете використовувати virsh або подивитися XML, щоб знайти відповідь.

У разі запуску віртуальних машин QEMU з "необробленого" командного рядка:

  1. tcpdump -i tap0 -f 'icmp' (замінити той, який цікавить вас інтерфейс)

  2. Пінг кожного кандидата VM, поки ви не побачите пакети в трасі. Інтерфейс, який ви відстежуєте, коли з'являються пакети ICMP - це той, який ви шукаєте!

І навпаки, ви можете запустити пінг до певної VM, а потім по черзі tcpdump кожен інтерфейс, поки один не загориться. Залежить, чи цікавить ви знайти VM, який відповідає інтерфейсу крана, або інтерфейс крана, який відповідає VM.


0

MAC-адреса vnetXінтерфейсів належить хосту, а не гостю. brctl showmacs br0покаже MAC, виявлений мостом, але вам потрібно буде перекреслити номер порту зі списком інтерфейсів brctl show.


0

Збігайте IP адреси з кешу Arp до VM

# vm mac address list
for vm in $(virsh list | grep running | awk '{print $2}'); do \
  echo -n "$vm "; \
  virsh dumpxml $vm| grep -oP "52:54:[\da-f:]+" ; 
done > vm_mac.list

# vm ip list
arp -i virbr0 | grep '52:' | while read addr ; do \
  ip=$(echo $addr | awk '{print $1}'); \
  mac=$(echo $addr | awk '{print $3}'); \
  vm=$(grep "$mac" vm_mac.list | awk '{print $1}'); \
  echo "$vm $ip $mac"; \
done | sort

Вибірка зразка:

vm66 192.168.191.112 52:54:00:ab:e8:cb
vm67 192.168.191.207 52:54:00:88:66:e7
vm67 192.168.191.241 52:54:00:88:66:e7
vm68 192.168.191.197 52:54:00:c5:e1:30
vm69 192.168.191.254 52:54:00:b6:f6:0f
vm70 192.168.191.232 52:54:00:08:7f:49
vm71 192.168.191.113 52:54:00:e7:6f:2b

0

На основі @daff відповіді:

for vm in $(virsh list | grep running | awk '{print $2}'); do echo "$vm: " && virsh dumpxml $vm | grep  "vnet" | sed 's/[^'']*''\([^'']*\)''[^'']*/\t\1/g'; done

Приклад виходу:

vm1:
    vnet0
vm2:
    vnet1
vm3:
    vnet2
vm4:
    vnet3
    vnet4
vm5:
    vnet5

0
for vm in $(virsh list  --state-running --name); do \
echo $vm; \
virsh domifaddr $vm; \
done

Приклад виводу:

client1

Nombre     dirección MAC       Protocol     Address
------------------------------------------------------------------------------

vnet2      52:54:00:2c:7a:f0    ipv4         192.168.122.63/24

Я подав редагування ваших котирувань коду, але ви повинні включити пояснення разом із кодом.
Cory Knutson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.