Як знайти IP-адресу віртуальної машини KVM, щоб я міг SSH у неї?


30

Я дотримуюся цього посібника ( віртуалізація з KVM на Ubuntu 11.10 ), щоб налаштувати свій KVM (програмне забезпечення віртуальної машини) на мій сервер Ubuntu 11.10. Однак я не встановлював IP-адресу свого VM під час створення VM, а не використовував:

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

Я встановив мережевий міст за інструкцією, і новий інтерфейс VM підключений до мережевого мосту.

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

[Примітки: мені вдалося увійти в систему VM, не знаючи IP-адреси VM. Використання " Xming + SSH з X-графічним переадресацією ", але в моїй віртуальній машині не присвоєна ip-адреса DHCP, окрім вищезазначеного питання, у мене є ще одне питання: як увімкнути DCHP на моєму VM, тому коли я використовую Xming для входу через " virt viewer "Я можу принаймні побачити свою IP-адресу там.]


Я з’ясував проблему і вирішив її. У інтерфейсах / etc / network / інтерфейси я видалив інформацію про "мережу" та "трансляцію", і DHCP працював над моїми гостьовими віртуальними машинами. Тепер я можу вступити до мого гостя VM. Я здогадуюсь, що моя "мережа XXX.XXX.XXX.XXX" або "трансляція XXX.XXX.XXX.XXX" неправильна. посібник все ще працює для подібного налаштування, будьте обережні, налаштовуючи власне мережеве середовище. Проблема вирішена !!!
Xianlin

1
libvirt має дві команди: domifaddr та net-dhcp-
leases

перейдіть за цим посиланням, ви знайдете відповідь:

Відповіді:


20

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

Блог нижче містить більш детальну інформацію та включає сценарій perl, який автоматизує пошук адреси віртуальної машини.

Порада: Знайдіть IP-адресу віртуальної машини


Так просто.
Чудово

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значно полегшують це, якщо ви користуєтеся приватною мережею або мостовою мережею. У мене є віртуальна машина, названа 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для цього VM немає виводу . Отже, вам в основному потрібно знайти адресу, як і будь-яка інша машина - знайти її в таблиці arp - це, мабуть, найпростіше - що означає ip neighbourзараз, як arpзастаріле і більше не присутнє в деяких дистрибутивах. На щастя для тих із нас, хто не вимовляє речі за допомогою додаткових вауелів, ви також можете використовувати короткі версії, як-от ip neighі ip n(або ip neighbor). ;) Нижче я domiflistзнаходжу MAC-адресу (зверніть увагу, що вона підключена доbr0 у стовпці "джерело"), а потім знайдіть це у таблиці арп.

$ 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

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

Якщо у вас є консольний доступ до VM, тоді просто запустіть ifconfig -aгостя. Поки ви перебуваєте там, переконайтеся, що гість має мережеве підключення та sshdчи працює.

Якщо у вас немає доступу до консолі, швидше за все, IP-адресу призначив DHCP. Знайдіть іншу машину, яка також отримує призначення DHCP, можливо, хост-сервер, а потім додайте 1 до адреси та спробуйте. Насправді спробуйте наступні 5 або 6 адрес. Якщо це не працює, у вас або є велика активна мережа, і вам потрібно буде спробувати кожну IP-адресу в підмережі, або є мережева проблема нижчого рівня, як немає маршруту до хосту або двох хостів з однаковою MAC-адресою. А може, ви просто не sshdбігли.

Використання консолі - це найпростіший спосіб вирішити цю проблему.


Мені фактично вдалося підключитися до моєї VM за допомогою команди Xming Server + "virt-viewr". Я виявив, що немає IP-адреси, призначеної гостю, поки я перебуваю у ВМ. Як зробити так, щоб DHCP працював? Будь-який XML-файл, який мені потрібно змінити?
Сянлін

Привіт Майкл, ти думаєш, ти можеш мені допомогти, якщо я надам тобі доступ до мого сервера? Я спробував DHCP і Static IP, але гості VM не отримують жодної IP-адреси, хоч мій сервер все ще може отримати доступ до Інтернету. Спасибі.
Xianlin

3

Щоб побачити IP-адресу вашого VM / s, просто запустіть:

$ arp -n

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


2

Можливо підключитися через вбудований VNC virt-manager, і ви зробите tty логін, знайдіть 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 VM.

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

Джерела:

https://serverfault.com/a/669862/284568


0

Якщо у вас QEMU (емулятор VM), перейдіть до кнопки "i" і перевірте мережеву карту, пов'язану з мережею "Br0". Візьміть до відома mac-адресу NIC. Тепер увійдіть у свій VM -> Відкритий термінал -> введіть команду "ifconfig" у терміналі -> запишіть IP-адресу, пов’язану з адресою Mac, яку ви зазначили раніше.

Ви можете увійти у свій VM за допомогою Putty або будь-якого ssh-клієнта, використовуючи IP, який ви зазначили на останньому кроці.


0

У мене в інтерфейсі br0 інтерфейс гостей KVM, тому я думаю, що він дещо інший, але ось два мої сценарії, які я створив.

Зауважте, щоб використовувати 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

Я врешті-решт вирішив цю проблему арп-скануванням. Наприклад: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 - числовий --retry = 1, що було для того, коли я хотів активно шукати. Я використовував addrwatch, щоб сидіти на задньому плані і накопичувати для себе mac / ip картування.
Герцог Дугал


0
  1. Отримайте список домену від virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Отримайте список вашого доменного інтерфейсу за ідентифікатором або іменем домену, використовуючи virsh domiflist yourDomainIdMAC ADDRESS інтерфейсу домену.

    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 На хості: Додайте за допомогою virt-менеджера канал "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>

b) На гостьовій установці 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}'

-1

(Хоча ти здається занадто просунутим для такої простої відповіді)

Буде

$ ifconfig

робота?


також будьте обережні, якщо у вас є дублікати екземплярів тієї ж машини, оскільки на машині виникнуть проблеми з підробленою MAC-адресою тощо. Є способи вручну редагувати це (і я думаю, що також запустіть команду для цього)
Девід

У мене тільки один VM "vm1" на моєму хості сервера ubuntu, а вихідна команда "ifconfig" не показує ip-адреси, призначеної моєму мережевому адаптеру "eth0".
Xianlin

так, у вас немає ip ... Ви спробували "dhclient eth0" --можливо, потрібно судо
David

Я спробував, але все ще не отримував dhcp ip з хост-сервера до моїх гостьових віртуальних машин. Моєму хост-серверу призначений фіксований IP, і він може отримати доступ до Інтернету.
Xianlin

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