У меня есть несколько виртуальных машин, работающих на Ubuntu 9.10 через KVM + libvirt. Я хочу иметь возможность узнать IP-адрес, который был назначен каждому хосту, не открывая физически «консоль» для каждой машины и не вызывая ее ifconfig
.
Рассматривать:
rascher @ localhost: ~ $ virsh -c qemu: /// системный список - все Подключение к системе uri: qemu: /// Id Name State ---------------------------------- 1 машина1 работает 2 машины2 работает - машина3 отключена
Моя конфигурация сети выглядит так:
<network>
<name>default</name>
<uuid>1be...</uuid>
<forward mode='route' dev="eth0"/>
<bridge name='virbr0' stp='on' forwardDelay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>
Так как я могу получить список, который говорит:
machine1 IP-адрес = 192.168.122.16 machine2 IP-адрес = 192.168.122.238 ...
Я играл с arp
:
rascher @ localhost: ~ $ arp Адрес HWtype HWaddress Flags Mask Iface 192.168.122.238 эфир 00: 16: 36: 00: 61: b0 C virbr0 192.168.122.16 эфир 00: 16: 36: 52: e8: 9c C virbr0 ...
Но это не соответствует идентификатору виртуальной машины.
Есть ли какой-нибудь инструмент (через командную строку virsh
или virt-*
), я могу узнать эту информацию? Или мне нужен какой-нибудь причудливый скрипт, который запускается на каждой отдельной виртуальной машине, проверяет ее собственный IP и сообщает об этом обратно операционной системе хоста?
У меня была такая же проблема, поэтому я создал следующий скрипт:
источник
Ларс Келлог-Стедман создал набор сценариев для автоматизации некоторых из этих процессов. Он называет это «virt-utils».
Он описывает это в своем блоге здесь: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
У него также есть github с некоторыми из написанных им скриптов:
https://github.com/larsks/virt-utils
Вы можете просто запустить это:
и вы получите список каждой виртуальной машины по ее «доменному имени» в менеджере виртуальных машин libvirt. Например, на моей машине у меня работает 3 vms.
Обратите внимание, что это не «имя хоста», которое использует сама ВМ, но для большого количества вариантов использования оно будет «достаточно хорошим» и решает проблему необходимости «ifconfig» из каждой виртуальной машины в земле dhcp.
В блоге Lars также показан способ «автоматического обновления» вашего собственного файла / etc / hosts при запуске и / или остановке libvirt новых виртуальных машин. Это позволяет вам выполнять такие действия, как ssh myname @ fedora20vm или ssh myname @ debian6vm, не находя адреса 192.168.122.x вручную.
Я добавил несколько очень незначительных улучшений, таких как сценарий для выделения некоторых параметров ~ / .ssh / config (очень удобно для использования github на виртуальных машинах через переадресацию агента) здесь:https://github.com/donbright/virt-utils (похоже, что вы хотите удалить?)Я также хотел бы отметить, что метод редактирования dhclient.conf для «отправки имени хоста xxxxx» работает только в системах, которые фактически используют dhclient.conf стандартным способом. Например, у Mageia необычная настройка того, как работает dhclient, поэтому простые инструкции не обязательно будут работать. Однако, с помощью метода Ларса, он работает в зависимости от настройки dhcp гостевой ОС, потому что он не полагается на то, что виртуальная машина отправляет свое имя хоста - он использует «доменные имена» в диспетчере машин libvirt.
источник
по крайней мере на Fedora вы можете получить эту информацию следующим образом:
cat /var/lib/libvirt/dnsmasq/default.leases
имеет вывод, похожий на:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
хотя это немного больше, чем вы просили
источник
В Ubuntu dnsmasq используется для предоставления служб DNS и DHCP виртуальным машинам. Процессы dnsmasq на хосте хранят свои аренды в этом файле:
Это обычный текстовый файл, и строки в нем могут выглядеть примерно так:
Интересующие вас поля - это третий и четвертый столбцы: третье поле содержит IPv4-адрес виртуальной машины, а четвертое поле содержит звездочку или имя хоста виртуальной машины. Это зависит от ответа DHCP, отправленного гостем процессу службы dnsmasq.
источник
Вы можете изменить
default
определение сети, сопоставить MAC с IP в xml:После того, как вы начинаете гостя, вы можете перечислить MAC-адрес всех гостей через
По последнему байту MAC-адреса вы можете определить IP-адрес гостя.
источник
virsh list --all --mac
не работает в версии 3.0.0