3

Как я могу найти IP виртуальной машины на KVM(используя Nmap)? Если нет, есть ли в Libvirt какие-либо функции для этого?

6 ответов6

4

Быстрый и грязный пример для KVM на Centos 63 x86_64. Короткий пинг в фоновом режиме для всех возможных IP-адресов, которые могут иметь виртуальные машины в этом сегменте

for i in {1..249}
 do
  ping -c 1 -n -q -r  -t 1 -s 1  -W 1   192.168.100.$i > /dev/null &
done

Извлеките имена и MAC-адреса виртуальных машин через virsh и извлеките IP из таблицы ARP

for name in `virsh list | grep running | awk '{ print $2 }'`
do
  printf  "\n$name\n "
  arp -e | grep "`virsh dumpxml  $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" | 
  awk '{ printf  $1 ;  printf  " "  ; printf  $3 }'
done
2

После долгих часов грязных рук я наткнулся на эту эпическую ссылку.

  1. Получите MAC-адрес виртуальной машины из файла конфигурации виртуальной машины (поскольку я использую KVM, я запросил XML-файл для MAC-адреса).
  2. Затем используйте arp -a, получите все MAC-адреса и адреса интерфейсов и сохраните их в файле.
  3. Запросите файл для MAC-адреса виртуальной машины с шага 1.
1

Я написал сценарий bash для этого, но также отфильтровал машины с именем "swarm" на них. Вы можете удалить фильтр или изменить его при необходимости. (удалить | grep "swarm") Вы можете использовать это как полный скрипт или скопировать и вставить один вкладыш из него:

#!/usr/bin/env bash
# we make assumption that the VM's we want have the word swarm in their name.  Edit for different name or to get all unfiltered names
for i in $(virsh list | grep "swarm" | awk '{print $2;}' ); do virsh domifaddr $i | sed 3q | sed '$!d' |awk '{print $4}'  ; done;

Составными частями являются команды virsh, virsh list для получения списка всех виртуальных машин , а затем в цикле for вызов domifaddr <VM NAME> для получения его ip-адреса. Все остальное - отфильтровать текст по одному IP-адресу в строке. Я написал / запустил это на сервере Ubuntu KVM 15.10

0

При запуске с qemu-kvm и опцией --nographic вы можете использовать ctrl-a c чтобы получить монитор qemu (своего рода оболочка для мониторинга и управления виртуальными машинами).

Команда info network выдаст информацию о сетевом подключении, включая MAC-адрес. Команда info usernet показывает информацию о мостах : например, как гостевой порт отображается на порт хоста. Эта информация часто включает в себя гостевой IP.

пример

Запустите vm с некоторой переадресацией порта tcp:

qemu-kvm -cpu host -m 1024 -hda ~/myvm.qcow -net user,hostfwd=tcp::10022-:22 -net nic -nographic

после ctrl-a c команды info network и info usernet дают

(qemu) info network
hub 0
 \ hub0port1: e1000.0: index=0,type=nic,model=e1000,macaddr=58:44:00:22:11:
 \ hub0port0: user.0: index=0,type=user,net=10.0.2.0,restrict=off
(qemu) info usernet
VLAN 0 (user.0):
  Protocol[State]    FD  Source Address  Port   Dest. Address  Port RecvQ S
  TCP[HOST_FORWARD]  13               * 10022       10.0.2.15    22     0  

Ссылка: QEMU-doc на wiki.qemu.org.

0

С помощью команды virt-cat вы можете запросить все файлы на виртуальной машине. Например, файл аренды dhcp:

virt-cat -d your_domain /var/lib/dhcp/dhclient.eth0.leases

0

Я написал скрипт get-vm-ip (который вы можете скачать с https://github.com/earlruby/create-vm/blob/master/get-vm-ip), который использует его для получения IP:

HOSTNAME=[your vm name]
MAC=$(virsh domiflist $HOSTNAME | awk '{ print $5 }' | tail -2 | head -1)
arp -a | grep $MAC | awk '{ print $2 }' | sed 's/[()]//g'

Команда virsh получает MAC-адрес, последняя строка находит IP-адрес с помощью arp .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .