J'ai suivi ce guide ( Virtualization With KVM On Ubuntu 11.1 ) to setup my KVM (Virtual Machines Software) on my Ubuntu 11.10 Serveur. Cependant, je n'ai pas configuré l'adresse IP de ma VM lors de la création de la VM, 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 mon 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 au VM sans connaître l'adresse IP de la VM. Utilisation de " Xming + SSH avec X Graphic Forwarding " Mais il n'y a pas de DHCP adresse IP attribuée à ma VM, Outre la question ci-dessus, j'ai une autre question ici: Comment activer le DCHP sur mon VM donc quand j'utilise Xming pour me connecter via "virt viewer" je peux à moins voir mon adresse IP est là.]
Tu peux courir arp -n
pour voir quelle adresse 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.
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?
Je suppose que c'est une vieille question, mais les versions actuelles de virsh
rendent cela beaucoup plus facile si vous utilisez un réseau privé nat ou ponté. J'ai une machine virtuelle nommée steak
sur 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 un autre VM (eggs
) qui est ponté sur le réseau normal (connecté à 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 de domifadd
pour cette machine virtuelle. Donc, vous devez essentiellement trouver l'adresse comme si elle était autre machine - le trouver dans la table arp est probablement le plus simple - ce qui signifie ip neighbour
maintenant, comme arp
est obsolète et n'est plus présent 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 neigh
et ip n
(ou ip neighbor
). ;) Ci-dessous, j'utilise domiflist
pour 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
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)
Si vous avez accès à la console VM alors exécutez simplement ifconfig -a
sur l'invité. Pendant que vous y êtes, vérifiez que l'invité dispose d'une connectivité réseau et que sshd
est en cours d'exécution.
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 toutes les adresses 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 lancé sshd
.
L'utilisation de la console est le moyen le plus simple de résoudre ce problème.
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-tools
paquet.
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. Analyser la sortie avec awk pour obtenir des lignes comme <IP> <MAC>
. Ensuite, grep en eux en utilisant une liste des MAC des VMs.
La liste des MAC est obtenue en listant toutes les VMs (en supprimant également les lignes vides), puis en faisant virsh domiflist
pour chacun d'eux, puis en cherchant un modèle qui ressemble à un MAC.
Sources:
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.
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}'
Obtenez votre liste de domaines par virsh list --all
virsh # list --all
2 webserver_01 running
Obtenez votre liste d'interfaces 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
À l'aide de nmap
scannez 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)
J'ai mes KVM invités 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
Trouver 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 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
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 VM -> 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 VM en utilisant PuTTY ou n'importe quel client ssh en utilisant l'IP que vous avez notée à la dernière étape.
J'ai écrit un get-vm-ip
script (disponible sur https://github.com/earlruby/create-vm/blob/master/get-vm-ip ) qui l'utilise pour obtenir l'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'