Comment trouver l'adresse IP d'une machine virtuelle KVM, que je peux y connecter en SSH?

30

J'ai suivi ce guide ( Virtualisation avec KVM sur Ubuntu 11.10 ) pour configurer mon KVM (logiciel de machines virtuelles) sur mon serveur Ubuntu 11.10. Cependant, je n'ai pas configuré l'adresse IP de ma machine virtuelle lors de la création de la machine virtuelle, au lieu d'utiliser:

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

J'ai utilisé: (j'ai supprimé "--ip = 192.168.0.101 --gw = 192.168.0.1" de la ligne de commande)

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

J'ai configuré le pont réseau selon les instructions du guide et la nouvelle interface de la VM est connectée au pont réseau.

Je suppose que le KVM attribuera ma VM via DHCP mais je n'ai pas d'informations sur l'adresse IP de ma nouvelle VM, où puis-je trouver l'adresse IP de la VM et SSH à la nouvelle VM? Merci.

[Notes: J'ai réussi à me connecter à la machine virtuelle sans connaître l'adresse IP de la machine virtuelle. Utilisation de " Xming + SSH avec transfert graphique X " Mais aucune adresse IP DHCP n'est attribuée à ma machine virtuelle. Outre la question ci-dessus, j'ai une autre question ici: comment activer le DCHP sur ma machine virtuelle alors quand j'utilise Xming pour me connecter via " virt viewer "Je peux au moins voir que mon adresse IP est là.]

Xianlin
la source
J'ai compris le problème et l'ai résolu. Dans / etc / network / interfaces, j'ai supprimé les informations "réseau" et "diffusion" et le DHCP a fonctionné sur mes machines virtuelles invitées. Maintenant, je peux ssh dans ma machine virtuelle invitée. Je suppose que mon "réseau XXX.XXX.XXX.XXX" ou "diffusion XXX.XXX.XXX.XXX" est incorrect. le guide fonctionne toujours bien pour ce type de configuration, soyez prudent lorsque vous configurez votre propre environnement réseau. Le problème est résolu!!!
Xianlin
1
libvirt a maintenant deux commandes: domifaddr et net-dhcp-beases
Nehal J Wani
veuillez vous référer à ce lien, vous y trouverez une réponse:

Réponses:

20

Vous pouvez exécuter arp -npour voir quelle IP votre machine virtuelle récupère. De cette façon, vous n'avez pas à vous connecter à vm invité et à taper ifconfig.

Le blog ci-dessous contient plus de détails et inclut un script perl qui automatise la recherche de l'adresse d'une machine virtuelle.

Conseil: recherchez l'adresse IP d'une machine virtuelle

chenwj
la source
Si simple. Super ....
Indika K
1
Allez sur la page Web de xyz pour les réponses ne sont pas bonnes si le lien tombe en panne, veuillez poster "réponses complètes"
FreeSoftwareServers
31

Essaye ça:

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

Vous pouvez également utiliser le formulaire suivant si vous connaissez l'adresse MAC:

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

L'adresse MAC peut être trouvée à partir de la commande dumpxml. Voir Existe - t-il un moyen de déterminer quelle interface virtuelle appartient à une machine virtuelle dans un hôte kvm?

Rahul
la source
5
C'est la bonne réponse. Fonctionne sans aucun piratage. Merci beaucoup.
chmac
1
Doit être "net-list virsh" ... pas d'espace entre "net" et "list". Sinon, cela fonctionne parfaitement.
Dave Hein
@DaveHein Merci d'avoir corrigé. Mis à jour la réponse.
Rahul
Si vous obtenez des résultats vides, essayez d'exécuter virsh avecsudo
Freedom_Ben
6

Je suppose que c'est une vieille question, mais les versions actuelles de virshrendent cela beaucoup plus facile si vous utilisez un réseau privé nat ou ponté. J'ai une machine virtuelle nommée steaksur un réseau privé (routé) (AKA "NAT"). Ce n'est que deux commandes pour trouver quelle adresse IP a été attribuée par le mécanisme intégré:

$ 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

J'ai également une autre VM ( eggs) qui est reliée au réseau normal (connectée à un périphérique de pont sur l'hôte hyperviseur). Libvirt ne lui attribue pas d'adresse; il obtient une adresse du serveur DHCP de mon réseau, qui met également à jour le DNS dynamique dans mon cas. C'est une possibilité probable lorsqu'il n'y a pas de sortie domifaddpour cette machine virtuelle. Donc, vous devez essentiellement trouver l'adresse comme n'importe quelle autre machine - la trouver dans la table arp est probablement la plus simple - ce qui signifie ip neighbourmaintenant, car elle arpest obsolète et n'est plus présente sur certaines distributions. Heureusement pour ceux d'entre nous qui n'épelent pas les choses avec des voyous supplémentaires, vous pouvez également utiliser des versions plus courtes, comme ip neighet ip n(ou ip neighbor). ;) Ci-dessous, j'utilise domiflistpour trouver l'adresse MAC (notez qu'elle est connectée àbr0 dans la colonne "source"), puis recherchez-le dans la table 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
la source
5

liste pour vms:

virsh list

obtenir vm MAC à partir du nom

virsh domiflist debian8

faire l'analyse de votre sous-réseau vm avec grep (MAC doit être en majuscule)

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

résultat

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)
Antonín Vrba
la source
4

Si vous avez un accès console à la machine virtuelle, exécutez simplement ifconfig -asur l'invité. Pendant que vous y êtes, assurez-vous que l'invité dispose d'une connectivité réseau et qu'elle sshdfonctionne.

Si vous n'avez pas accès à la console, il est probable que l'adresse IP ait été attribuée par DHCP. Recherchez une autre machine qui obtient également une affectation DHCP, peut-être le serveur hôte, puis ajoutez 1 à l'adresse et essayez-la. En fait, essayez les 5 ou 6 adresses suivantes. Si cela ne fonctionne pas, vous avez soit un grand réseau actif et devrez essayer chaque adresse IP du sous-réseau, soit il y a un problème de réseau de niveau inférieur comme aucune route vers l'hôte ou deux hôtes avec la même adresse MAC. Ou peut-être que vous n'avez tout simplement pas sshdcouru.

L'utilisation de la console est le moyen le plus simple de résoudre ce problème.

Michael Dillon
la source
J'ai réussi à me connecter à ma machine virtuelle via Xming Server + commande "virt-viewr". J'ai constaté qu'aucune adresse IP n'est attribuée à l'invité pendant que je suis dans la machine virtuelle. Comment faire fonctionner DHCP? Tout fichier XML que je dois changer?
Xianlin
Salut Michael, pensez-vous que vous pouvez m'aider si je vous donne accès à mon serveur? J'ai essayé DHCP et IP statique, mais les machines virtuelles invitées n'obtiennent aucune IP, mon serveur hôte peut néanmoins accéder à Internet. Merci.
Xianlin
3

Pour voir l'adresse IP de votre VM / s, lancez simplement:

$ arp -n

Si arp n'est pas installé sur votre système, installez simplement le net-toolspaquet.

Alxs
la source
2

Il est possible de se connecter via VNC intégré avec virt-manager, et vous vous connectez tty, trouvez l'adresse IP avec ifconfig eth0. Normalement eth0, sauf indication contraire.

Marguerite
la source
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 ..:..:..:..:..:..)

Analyser le sous-réseau. Analysez la sortie avec awk pour obtenir des lignes comme <IP> <MAC>. Ensuite, grepez-les en utilisant une liste des MAC des VM.

La liste des MAC est obtenue en répertoriant toutes les machines virtuelles (supprimez également les lignes vides), puis faites virsh domiflistpour chacune d'entre elles, puis recherchez un modèle qui ressemble à un MAC.

Sources:

/server//a/669862/284568

Velkan
la source
0

Si vous avez QEMU (émulateur VM), allez sur le bouton "i" et vérifiez la carte réseau associée au réseau "Br0". Prenez note de l'adresse mac de la carte réseau. Maintenant, connectez-vous à votre machine virtuelle -> Ouvrir le terminal -> tapez: "ifconfig" commande dans le terminal -> prenez note de l'adresse IP associée à l'adresse Mac que vous avez notée précédemment.

Vous pouvez vous connecter à votre machine virtuelle à l'aide de Putty ou de tout client ssh à l'aide de l'adresse IP que vous avez notée à la dernière étape.

saurav
la source
0

J'ai mes invités KVM sur l'interface br0 donc je pense que c'est un peu différent, mais voici mes deux scripts que j'ai faits.

Remarque: pour utiliser ARP, vous devez d'abord avoir le MAC dans votre table Arp. Il est donc préférable d'utiliser fping pour effectuer un ping rapide sur l'ensemble du réseau (cela prend environ 2 secondes). Cela garantit que votre cache Arp est à jour.

apt-get install fping
yum install fping

Trouvez une adresse IP d'invité unique via:

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

Trouver toutes les adresses IP invitées via:

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
la source
J'ai finalement résolu ce problème avec arp-scan. exemple: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 qui était lorsque je voulais rechercher activement. J'ai utilisé addrwatch pour m'asseoir en arrière-plan et accumuler un mappage d'adresse mac / ip pour moi.
Duke Dougal
0
  1. Obtenez votre liste de domaines par virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. Obtenez votre liste d'interface de domaine par identifiant ou nom de domaine à l'aide de virsh domiflist yourDomainId, et vous verrez l'adresse MAC de l'interface du domaine.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. En utilisant nmapscan votre LAN par nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, vous obtiendrez l’ADRESSE 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)
    
Rod Terry
la source
0

Une belle solution qui utilise l'agent qemu-guest.

a) Configurer votre vm pour utiliser l'agent qemu-guest Sur l'hôte: ajouter avec virt-manager un canal "qemu-guest-agent" est vraiment facile. Dans mon cas, la machine s'appelle "Debian", et xml après la modification sera similaire à cette.

 <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) Sur l'invité, installez qemu-guest-agent et assurez-vous qu'il est démarré

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) Enfin cette jolie pipe retournera l'ip, au lieu de NAMEOFVMNIC mettre eth0, enp1s0, etc.

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

(Bien que vous sembliez trop avancé pour une réponse aussi simple)

Volonté

$ ifconfig

travail?

David
la source
aussi, faites attention, si vous avez des instances en double de la même machine, que la machine aura des problèmes avec l'adresse MAC de faux etc ... il existe des moyens de modifier manuellement que (et je pense exécuter une commande pour cela aussi)
David
Je n'ai qu'une seule machine virtuelle "vm1" sur mon hôte de serveur ubuntu et la sortie de la commande "ifconfig" ne montre aucune adresse IP attribuée à ma carte réseau "eth0".
Xianlin
ouais, vous n'avez pas d'ip ... Avez-vous essayé "dhclient eth0" - pourrait avoir besoin de sudo
David
J'ai essayé mais je n'obtiens toujours pas l'IP DHCP de mon serveur hôte à mes machines virtuelles invitées. Mon serveur hôte se voit attribuer une IP fixe et il peut accéder à Internet.
Xianlin
si vous voulez une adresse IP ne se trouvant pas sur le réseau parent, vous souhaitez sélectionner NAT dans vos paramètres vm au lieu de ponté.
David