Як я можу знайти IP VM на KVM (за допомогою Nmap)? Якщо ні, чи є якісь функції в Libvirt для цього?
Як я можу знайти IP VM на KVM (за допомогою Nmap)? Якщо ні, чи є якісь функції в Libvirt для цього?
Відповіді:
Швидкий і брудний приклад для KVM на Centos 63 x86_64. Короткий пінг у фоновому режимі на всі можливі IP-адреси, які можуть мати VM в цьому сегменті
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 адреси VM за допомогою 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
Після довгих годин забруднення рук я спробував натрапити на цю епічну посилання.
Я написав сценарій bash, щоб це зробити, але також фільтрував машини для машин із назвою "рій" у них. Ви можете видалити фільтр або змінити його за потребою. (видалити | 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
щоб отримати список усіх VM, а потім у циклі for для виклику domifaddr <VM NAME>
отримати ip addr його. Все інше - відфільтрувати текст лише до IP-адреси по одному на рядок. Я написав / запустив це на сервері Ubuntu KVM 15.10
Починаючи з 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.
Я написав 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
.