Как найти IP-адрес виртуальной машины KVM, чтобы я мог подключиться к ней по SSH?

30

Я следовал этому руководству ( Виртуализация с KVM в Ubuntu 11.10 ), чтобы настроить KVM (программное обеспечение для виртуальных машин) на моем сервере Ubuntu 11.10. Тем не менее, я не настраивал IP-адрес моей виртуальной машины при создании виртуальной машины вместо того, чтобы использовать:

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

Я использовал: (я удалил "--ip = 192.168.0.101 --gw = 192.168.0.1" из командной строки)

vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

Я установил сетевой мост в соответствии с инструкциями руководства, и интерфейс новой виртуальной машины подключен к сетевому мосту.

Я предполагаю, что KVM назначит мою виртуальную машину через DHCP, но у меня нет информации об IP-адресе новой виртуальной машины, где я могу найти IP-адрес виртуальной машины и SSH для новой виртуальной машины? Спасибо.

[Примечания: мне удалось войти в виртуальную машину, не зная IP-адрес виртуальной машины. Использование « Xming + SSH с перенаправлением графики X » Но моей виртуальной машине не назначен IP-адрес DHCP. Помимо вышеприведенного вопроса, у меня есть еще один вопрос: как включить DCHP на моей виртуальной машине, чтобы при входе в систему через Xming входить через Xming » Virt Viewer "Я могу по крайней мере увидеть мой IP-адрес там.]

Xianlin
источник
Я разобрался с проблемой и решил ее. В / etc / network / interfaces я удалил информацию о сети и широковещании, и DHCP работал на моих гостевых виртуальных машинах. Теперь я могу войти в мою гостевую виртуальную машину. Я полагаю, что моя «сеть XXX.XXX.XXX.XXX» или «широковещательная передача XXX.XXX.XXX.XXX» неверна. руководство по-прежнему хорошо работает для такого рода настройки, просто будьте осторожны при настройке собственной сетевой среды. Проблема решена!!!
Xianlin
1
У libvirt теперь две команды: domifaddr и net-dhcp-
leases
Пожалуйста, перейдите по этой ссылке, вы найдете ответ:

Ответы:

20

Вы можете запустить, arp -nчтобы увидеть, какой IP-адрес вашей виртуальной машины. Таким образом, вам не нужно входить в гостевой VM и введите ifconfig.

Блог ниже содержит больше деталей и включает в себя Perl-скрипт, который автоматизирует поиск адреса виртуальной машины.

Совет: найдите IP-адрес виртуальной машины

chenwj
источник
Так просто. Отлично ....
Индика К
1
Зайдите на веб-страницу xyz, чтобы найти ответы, которые бесполезны, если ссылка не работает, пожалуйста, напишите «полные ответы»
FreeSoftwareServers
31

Попробуй это:

virsh net-list
virsh net-dhcp-leases <net-name>   <--- net-name from above command

Вы также можете использовать следующую форму, если вы знаете MAC-адрес:

virsh net-dhcp-leases <net-name> --mac <mac-address>

MAC-адрес можно найти в команде dumpxml. См. Есть ли способ определить, какой виртуальный интерфейс принадлежит виртуальной машине на хосте kvm?

Рахул
источник
5
Это правильный ответ. Работает без взлома. Большое спасибо.
Chmac
1
Должен быть "virsh net-list" ... между "net" и "list" не должно быть пробелов. В противном случае это работает отлично.
Дейв Хейн,
@DaveHein Спасибо за исправление. Обновил ответ.
Рахул
Если вы получаете пустые результаты, попробуйте запустить virsh сsudo
Freedom_Ben
6

Я думаю, что это старый вопрос, но текущие версии virshделают это намного проще, если вы используете nat или bridged частную сеть. У меня есть виртуальная машина, названная steakв (маршрутизируемой) частной сети (AKA "NAT"). Это всего лишь две команды, чтобы узнать, какой IP был назначен встроенным механизмом:

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 21    steak                          running

$ sudo virsh domifaddr steak
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet0      76:0c:28:ab:0e:ee    ipv4         10.14.1.1/24

У меня также есть другая VM ( eggs), которая подключена к обычной сети (подключена к мостовому устройству на хосте гипервизора). Libvirt не присваивает ему адрес; он получает адрес от DHCP-сервера моей сети, который также обновляет динамический DNS в моем случае. Это одна из вероятных возможностей, когда нет выхода domifaddдля этой виртуальной машины. Таким образом, вам нужно найти адрес, как на любом другом компьютере - найти его в таблице arp, вероятно, проще всего - это означает ip neighbour, что arpон устарел и больше не присутствует в некоторых дистрибутивах. К счастью, для тех из нас, кто не пишет что-либо с помощью дополнительных vouwels, вы также можете использовать более короткие версии, такие как ip neighи ip n(или ip neighbor). ;) Ниже я использую, domiflistчтобы найти MAC-адрес (обратите внимание, что он подключен кbr0 в столбце «источник»), а затем найдите это в таблице ARP.

$ sudo virsh domifaddr eggs
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------

$ sudo virsh domiflist eggs
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        virtio      52:54:00:2c:ac:ee

$ ip neigh | grep -i 52:54:00:2c:ac:ee
192.168.0.226 dev br0 lladdr 52:54:00:2c:ac:ee REACHABLE
$ host eggs
eggs.home.domain.com has address 192.168.0.226
dannysauer
источник
5

список для vms:

virsh list

получить VM MAC от имени

virsh domiflist debian8

выполнить сканирование вашей подсети vm с помощью grep (MAC должен быть заглавным)

nmap -sP 10.0.0.0/24 | grep 52:54:00:FD:1F:92 -B 3 

результат

Nmap scan report for 10.0.0.173
Host is up (0.0012s latency).
MAC Address: 52:54:00:FD:1F:92 (QEMU Virtual NIC)
Антонин Врба
источник
4

Если у вас есть консольный доступ к виртуальной машине, просто запустите ifconfig -aгостя. Пока вы там, убедитесь, что у гостя есть подключение к сети, и sshdон работает.

Если у вас нет консольного доступа, скорее всего, IP-адрес был назначен DHCP. Найдите другую машину, которая также получает назначение DHCP, возможно, хост-сервер, а затем добавьте 1 к адресу и попробуйте. На самом деле, попробуйте следующие 5 или 6 адресов. Если это не сработает, то у вас либо большая активная сеть, и вам нужно будет попробовать каждый IP-адрес в подсети, либо возникнет проблема с сетью более низкого уровня, например, отсутствие маршрута к хосту или двух хостов с одинаковым MAC-адресом. Или, может быть, ты просто не sshdпобежал.

Использование консоли - самый простой способ решить эту проблему.

Майкл Диллон
источник
Мне действительно удалось подключиться к моей виртуальной машине с помощью сервера Xming Server + команда virt-viewr. Я обнаружил, что IP не назначен гостю, пока я нахожусь в виртуальной машине. Как заставить DHCP работать? Любой файл XML мне нужно изменить?
Xianlin
Привет, Майкл, ты думаешь, что сможешь помочь мне, если я дам тебе доступ к моему серверу? Я пробовал DHCP и статический IP, но гостевые виртуальные машины не получают IP, хотя мой хост-сервер все еще может выходить в Интернет. Спасибо.
Xianlin
3

Чтобы увидеть IP-адрес вашей виртуальной машины, просто запустите:

$ arp -n

Если arp не установлен в вашей системе, просто установите net-toolsпакет.

Alxs
источник
2

Можно подключиться через встроенный VNC virt-manager, и вы делаете tty login, находите IP-адрес с ifconfig eth0. Обычно eth0, если не указано иное.

маргаритка
источник
2

sudo nmap -sn 192.168.5.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' | fgrep -if <(virsh list --name | grep . | while read n; do virsh domiflist $n; done | grep --only-matching ..:..:..:..:..:..)

Сканирование подсети. Разобрать вывод с помощью awk, чтобы получить строки вроде <IP> <MAC>. Затем добавьте их в список MAC-адресов виртуальных машин.

Список MAC-адресов получается путем перечисления всех виртуальных машин (также обрезать пустые строки), затем выполнять virsh domiflistдля каждой из них, а затем искать шаблон, который выглядит как MAC-адрес.

Источники:

/server//a/669862/284568

Velkan
источник
0

Если у вас есть QEMU (эмулятор виртуальной машины), перейдите к кнопке «i» и проверьте сетевую карту, связанную с сетью «Br0». Запишите MAC-адрес сетевой карты. Теперь войдите в свою виртуальную машину -> Открыть терминал -> введите: в терминале команду «ifconfig» -> запишите IP-адрес, связанный с адресом Mac, который вы указали ранее.

Вы можете войти в свою виртуальную машину, используя Putty или любой ssh-клиент, используя IP-адрес, который вы указали в предыдущем шаге.

Saurav
источник
0

У меня есть гости KVM на интерфейсе br0, поэтому я думаю, что это немного по-другому, но вот два моих сценария, которые я сделал.

Обратите внимание, что для использования ARP сначала необходимо иметь MAC в таблице Arp. Поэтому лучше всего использовать fping для быстрого пинга всей сети (занимает около 2 секунд). Это гарантирует, что ваш кэш Arp обновлен.

apt-get install fping
yum install fping

Найти один гостевой IP через:

cat << 'EOF' > ~/findip.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

echo "Please Enter the Exact Name of the VM Guest:"

read guestname

arp -na | awk -v mac=$(virsh domiflist $guestname | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'
EOF
chmod +x ~/findip.sh
sudo sh -c 'echo "alias findguestip=~/findip.sh" >> ~/.bashrc'
source ~/.bashrc
findguestip

Найти все гостевые IP-адреса с помощью:

cat << 'EOF' > ~/findallips.sh
#!/bin/bash
#FreeSoftwareServers.com

echo "Finding All Active IP's in Network via single Ping"
sleep 2s

fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24

domainlog=/tmp/domain.log

virsh list --all | grep running |  cut -c 8- >> "$domainlog"

sed -i 's/running*//g' "$domainlog"

readarray domain < "$domainlog"

for i in "${domain[@]}"
do
ip="$(arp -na | awk -v mac=$(virsh domiflist $i | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}')"
echo "Hostname : $i IP : $ip"
done
rm "$domainlog"
EOF
chmod +x ~/findallips.sh
sudo sh -c 'echo "alias findallips=~/findallips.sh" >> ~/.bashrc'
source ~/.bashrc
findallips
FreeSoftwareServers
источник
Я решил эту проблему в конце концов с помощью arp-scan. пример: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1, когда я хотел активно искать. Я использовал addrwatch, чтобы сидеть в фоновом режиме и накапливать сопоставление MAC / IP-адресов для меня.
Герцог Дугал
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'
Эрл Руби
источник
0
  1. Получите ваш список доменов по virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Получите список интерфейсов вашего домена по идентификатору домена или имени, используя virsh domiflist yourDomainId, и вы увидите MAC-АДРЕС интерфейса домена.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Используя nmapсканирование вашей локальной сети nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, вы получите IP-адрес.

    [root@kvm-master ~]# nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B2 
    
    Nmap scan report for bogon (192.168.1.210)
    Host is up (0.00013s latency).
    MAC Address: 52:54:00:42:BE:96 (QEMU Virtual NIC)
    
Род Терри
источник
0

Хорошее решение, в котором используется агент qemu-guest.

a) Сконфигурируйте ваш vm для использования qemu-guest agent На хосте: Добавить с помощью virt-manager канал «qemu-guest-agent» очень просто. В моем случае машина называется «Debian», и xml после изменения будет похож на это.

 <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-debian/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>

б) В гостевой системе установите qemu-guest-agent и убедитесь, что он запущен

apt -y install qemu-guest-agent

systemctl status qemu-guest-agent.service
● qemu-guest-agent.service - LSB: QEMU Guest Agent startup script
   Loaded: loaded (/etc/init.d/qemu-guest-agent; generated; vendor preset: enabled)
   Active: active (running) since Sat 2019-01-26 09:35:57 CET; 3s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1624 ExecStop=/etc/init.d/qemu-guest-agent stop (code=exited, status=0/SUCCESS)
  Process: 1630 ExecStart=/etc/init.d/qemu-guest-agent start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/qemu-guest-agent.service
           └─1638 /usr/sbin/qemu-ga --daemonize -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0

c) Наконец, этот хороший канал вернет ip, вместо NAMEOFVMNIC положил eth0, enp1s0 и т. д.

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
elbarna
источник
-1

(Пока вы кажетесь слишком продвинутым для такого простого ответа)

Будет

$ ifconfig

Работа?

Дэвид
источник
Кроме того, будьте осторожны, если у вас есть дубликаты экземпляров одной и той же машины, так как у машины будут проблемы с поддельным MAC-адресом и т. д. ... есть способы отредактировать это вручную (и я думаю, что также запустите команду для этого)
Дэвид
У меня есть только одна виртуальная машина «vm1» на моем хосте сервера Ubuntu, и в выводе команды «ifconfig» не указан IP-адрес, назначенный моему сетевому адаптеру «eth0».
Xianlin
да, у вас нет ip ... Вы пробовали "dhclient eth0" - возможно, нужно sudo
David
Я пытался, но все еще не получал dhcp ip с моего хост-сервера на гостевые виртуальные машины. Моему хост-серверу назначен фиксированный IP-адрес, и он может получить доступ к Интернету.
Xianlin
если вы хотите, чтобы ip не находился в родительской сети, вы должны выбрать NAT в настройках vm вместо bridged.
Дэвид