Come trovare l'indirizzo IP di una macchina virtuale KVM, che posso inserire in SSH?


30

Ho seguito questa guida ( Virtualizzazione con KVM su Ubuntu 11.10 ) per configurare la mia KVM (software per macchine virtuali) sul mio server Ubuntu 11.10. Tuttavia, non ho impostato l'indirizzo IP della mia VM durante la creazione della VM, invece di utilizzare:

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

Ho usato: (ho eliminato "--ip = 192.168.0.101 --gw = 192.168.0.1" dalla riga di comando)

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

Ho impostato il bridge di rete come indicato nella guida e la nuova interfaccia della VM è connessa al bridge di rete.

Presumo che KVM assegnerà la mia VM tramite DHCP ma non ho informazioni sull'indirizzo IP della mia nuova VM, dove posso trovare l'indirizzo IP e SSH della VM sulla nuova VM? Grazie.

[Note: sono riuscito ad accedere alla VM senza conoscere l'indirizzo IP della VM. Utilizzo di " Xming + SSH con X Graphic Forwarding " Ma non esiste un indirizzo IP DHCP assegnato alla mia VM, oltre alla domanda precedente, ho un'altra domanda qui: Come abilitare il DCHP sulla mia VM così quando uso Xming per accedere tramite " virt viewer "Posso almeno vedere che il mio indirizzo IP è lì.]


Ho capito il problema e risolto. Nelle interfacce / etc / network / ho cancellato le informazioni "network" e "broadcast" e il DHCP ha funzionato sulle macchine virtuali guest. Ora posso ssh nella mia Guest VM. Immagino che la mia "rete XXX.XXX.XXX.XXX" o "broadcast XXX.XXX.XXX.XXX" sia errata. la guida funziona ancora bene per questo tipo di installazione, basta fare attenzione quando si configura il proprio ambiente di rete. Il problema è risolto!!!
Xianlin

1
libvirt ha ora due comandi: domifaddr e net-dhcp-leasing
Nehal J Wani

si prega di fare riferimento a questo link, troverete una risposta:

Risposte:


20

Puoi correre arp -nper vedere quale IP raccoglie la tua macchina virtuale. In questo modo, non è necessario effettuare il login guest vm e digitare ifconfig.

Il blog in basso ha maggiori dettagli e include uno script perl che automatizza la ricerca dell'indirizzo di una macchina virtuale.

Suggerimento: trova l'indirizzo IP di una macchina virtuale


Cosi 'semplice. Fantastico ....
Indika K,

1
Vai alla pagina web di xyz per le risposte non vanno bene se il link non funziona, per favore pubblica "risposte complete"
FreeSoftwareServers

31

Prova questo:

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

Puoi anche usare il seguente modulo se conosci l'indirizzo MAC:

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

L'indirizzo MAC può essere trovato dal comando dumpxml. Vedi Esiste un modo per determinare quale interfaccia virtuale appartiene a una macchina virtuale in un host kvm?


5
Questa è la risposta corretta Funziona senza alcun hacking. Molte grazie.
chmac,

1
Dovrebbe essere "virsh net-list" ... nessuno spazio tra "net" e "list". Altrimenti, funziona perfettamente.
Dave Hein,

@DaveHein Grazie per la correzione. Aggiornato la risposta.
Rahul,

Se stai ottenendo risultati vuoti, prova a eseguire virsh consudo
Freedom_Ben il

6

Immagino che questa sia una vecchia domanda, ma le versioni attuali di virshrendono questo molto più semplice se si utilizza una rete privata nat o con bridge. Ho una macchina virtuale chiamata steaksu una rete privata (instradata) (AKA "NAT"). Sono solo due comandi per trovare quale IP è stato assegnato dal meccanismo incorporato:

$ 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

Ho anche un'altra VM ( eggs) che è collegata alla rete normale (connessa a un dispositivo bridge sull'host hypervisor). Libvirt non gli assegna un indirizzo; ottiene un indirizzo dal server DHCP della mia rete, che aggiorna anche il DNS dinamico nel mio caso. Questa è una possibilità probabile quando non c'è output da domifaddper questa VM. Quindi, in sostanza, devi trovare l'indirizzo come se fosse qualsiasi altra macchina - trovarlo nella tabella arp è probabilmente il più semplice - il che significa ip neighbourora, poiché arpè deprecato e non è più presente in alcune distribuzioni. Fortunatamente per quelli di noi che non scrivono cose con extra vouwels, puoi anche usare versioni più brevi, come ip neighe ip n(o ip neighbor). ;) Di seguito, utilizzo domiflistper trovare l'indirizzo MAC (nota che è collegato abr0 nella colonna "sorgente") e poi trovalo nella tabella 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

5

lista per vms:

virsh list

ottenere vm MAC dal nome

virsh domiflist debian8

esegui la scansione della tua sottorete VM con grep (MAC deve essere in maiuscolo)

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

risultato

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

Se si dispone dell'accesso della console alla VM, eseguire semplicemente ifconfig -asul guest. Mentre sei lì, controlla per assicurarti che il guest abbia la connettività di rete e che sshdsia in esecuzione.

Se non si dispone dell'accesso alla console, è probabile che l'indirizzo IP sia stato assegnato da DHCP. Cerca un altro computer che sta ricevendo anche un'assegnazione DHCP, forse il server host, quindi aggiungi 1 all'indirizzo e provalo. In effetti, prova i successivi 5 o 6 indirizzi. Se non funziona, allora hai una grande rete attiva e dovrai provare tutti gli indirizzi IP nella sottorete, oppure c'è un problema di rete di livello inferiore come nessuna route verso l'host o due host con lo stesso indirizzo MAC. O forse non sei riuscito a sshdcorrere.

L'uso della console è il modo più semplice per risolvere questo problema.


In realtà sono riuscito a connettermi alla mia macchina virtuale tramite Xming Server + comando "virt-viewr". Ho scoperto che non vi è alcun IP assegnato al guest mentre sono nella VM. Come far funzionare DHCP? Qualche file XML che devo modificare?
Xianlin

Ciao Michael, pensi di potermi aiutare se ti do l'accesso al mio server? Ho provato DHCP e IP statico ma le VM guest non ottengono alcun IP, tuttavia il mio server host può comunque accedere a Internet. Grazie.
Xianlin

3

Per vedere l'indirizzo IP della tua VM / s basta eseguire:

$ arp -n

Se arp non è installato sul tuo sistema, installa il net-toolspacchetto.


2

È possibile connettersi tramite VNC integrato virt-managere, eseguendo il login tty, trovare l'indirizzo IP con ifconfig eth0. Normalmente eth0, se non diversamente specificato.


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 ..:..:..:..:..:..)

Scansione sottorete. Analizza l'output con awk per ottenere linee simili <IP> <MAC>. Quindi esegui il grep in essi usando un elenco dei MAC delle VM.

L'elenco dei MAC è ottenuto elencando tutte le VM (anche rimuovendo le righe vuote), quindi eseguendo virsh domiflistper ognuna di esse e quindi eseguendo il grepping per un modello che assomiglia a un MAC.

fonti:

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


0

Se hai QEMU (emulatore VM) vai al pulsante "i" e controlla la scheda di rete associata alla rete "Br0". Prendi nota dell'indirizzo mac della NIC. Ora accedi alla tua VM -> Apri Terminale -> digita: comando "ifconfig" nel terminale -> prendi nota dell'indirizzo IP associato all'indirizzo Mac che hai notato in precedenza.

Puoi accedere alla tua VM usando Putty o qualsiasi client ssh usando l'IP che hai notato nell'ultimo passaggio.


0

Ho i miei ospiti KVM sull'interfaccia br0, quindi penso che sia un po 'diverso, ma ecco i miei due script che ho creato.

Nota per usare ARP devi prima avere il MAC nella tua tabella Arp. Pertanto è meglio usare fping per eseguire un ping rapido di tutta la rete (richiede circa 2 secondi). Questo si assicura che la cache di Arp sia aggiornata.

apt-get install fping
yum install fping

Trova un singolo IP ospite tramite:

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

Trova tutti gli IP degli ospiti tramite:

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

Alla fine ho affrontato questo problema con arp-scan. esempio: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 che era per quando volevo cercare attivamente. Ho usato addrwatch per sedermi in background e accumulare un mapping di indirizzi mac / ip per me.
Duke Dougal,


0
  1. Ottieni il tuo elenco di domini da virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Ottieni il tuo elenco di interfacce di dominio per ID dominio o nome usando virsh domiflist yourDomainIde vedrai l'INDIRIZZO MAC dell'interfaccia del dominio.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Usando nmapscan your LAN by nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, otterrai IP ADDRESS.

    [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

Una bella soluzione che utilizza l'agente qemu-guest.

a) Configura la tua VM per usare l'agente qemu-guest Sull'host: Aggiungi con virt-manager un canale "qemu-guest-agent" È davvero facile. Nel mio caso la macchina si chiama "Debian" e xml dopo la modifica sarà simile a Questo.

 <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) Al momento dell'installazione dell'ospite qemu-guest-agent e assicurarsi che sia avviato

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) Alla fine questa simpatica pipe restituirà l'ip, invece di NAMEOFVMNIC mettere eth0, enp1s0, ecc.

virsh domifaddr  --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

-1

(Mentre sembri troppo avanzato per una risposta così semplice)

Volontà

$ ifconfig

opera?


Inoltre, fai attenzione, se hai istanze duplicate della stessa macchina, poiché la macchina avrà problemi con l'indirizzo MAC falso ecc ... ci sono modi per modificarlo manualmente (e penso che esegua anche un comando per quello)
David

Ho solo una VM "vm1" sul mio host server Ubuntu e l'output del comando "ifconfig" non mostra alcun indirizzo IP assegnato alla mia scheda di rete "eth0".
Xianlin

si, non hai ip ... hai provato "dhclient eth0" - potrebbe aver bisogno di sudo
David

Ho provato ma ancora non riesco a ottenere l'ip dhcp dal mio server host alle VM guest. Al mio server host è assegnato un IP fisso e può accedere a Internet.
Xianlin

se si desidera un IP non presente sulla rete principale, si desidera selezionare NAT nelle impostazioni di VM invece che in parallelo.
David
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.