Wie finde ich die IP-Adresse einer virtuellen KVM-Maschine, in die ich SSH kann?

30

Ich befolge diese Anleitung ( Virtualisierung mit KVM unter Ubuntu 11.10 ), um KVM (Virtual Machines Software) auf meinem Ubuntu 11.10-Server einzurichten. Ich habe jedoch nicht die IP-Adresse meiner VM beim Erstellen der VM eingerichtet, anstatt Folgendes zu verwenden:

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

Ich habe Folgendes verwendet: (Ich habe "--ip = 192.168.0.101 --gw = 192.168.0.1" von der Befehlszeile gelöscht.)

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

Ich habe die Netzwerkbrücke gemäß der Anleitung eingerichtet und die Schnittstelle der neuen VM ist mit der Netzwerkbrücke verbunden.

Ich gehe davon aus, dass der KVM meine VM über DHCP zuweist, aber ich habe keine Informationen zur IP-Adresse meiner neuen VM. Wo finde ich die IP-Adresse und SSH der VM für die neue VM? Vielen Dank.

[Hinweise: Ich habe es geschafft, mich bei der VM anzumelden, ohne die IP-Adresse der VM zu kennen. Verwenden von " Xming + SSH mit X-Grafikweiterleitung " Aber meiner VM ist keine DHCP-IP-Adresse zugewiesen. Neben der obigen Frage habe ich hier eine weitere Frage: Wie aktiviere ich das DCHP auf meiner VM, wenn ich mich über Xming anmelde? virt viewer "Ich kann zumindest sehen, dass meine IP-Adresse dort ist.]

Xianlin
quelle
Ich habe das Problem herausgefunden und es gelöst. In der Datei / etc / network / interfaces habe ich "Netzwerk" - und "Broadcast" -Informationen gelöscht, und der DHCP-Dienst hat auf meinen Gast-VMs funktioniert. Jetzt kann ich in meine Gast-VM ssh. Ich denke, mein "Netzwerk XXX.XXX.XXX.XXX" oder "Broadcast XXX.XXX.XXX.XXX" ist falsch. Die Anleitung funktioniert für diese Art der Einrichtung immer noch gut. Seien Sie jedoch vorsichtig, wenn Sie Ihre eigene Netzwerkumgebung einrichten. Das Problem ist gelöst!!!
Xianlin
1
libvirt hat jetzt zwei Befehle: domifaddr und net-dhcp-
leases
Unter diesem Link finden Sie eine Antwort:

Antworten:

20

Sie können ausführen, um arp -nzu sehen, welche IP-Adresse Ihre virtuelle Maschine aufnimmt. Auf diese Weise müssen Sie sich nicht bei guest vm anmelden und eingeben ifconfig.

Der folgende Blog enthält weitere Details und ein Perl-Skript, das das Ermitteln der Adresse einer virtuellen Maschine automatisiert.

Tipp: Ermitteln Sie die IP-Adresse einer virtuellen Maschine

chenwj
quelle
So einfach. Großartig ...
Indika K
1
Auf die xyz-Webseite gehen, da Antworten nicht gut sind, wenn der Link
ausfällt.
31

Versuche dies:

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

Sie können auch das folgende Formular verwenden, wenn Sie die MAC-Adresse kennen:

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

Die MAC-Adresse finden Sie im Befehl dumpxml. Siehe Gibt es eine Möglichkeit, festzustellen, welche virtuelle Schnittstelle zu einer virtuellen Maschine in einem KVM-Host gehört?

Rahul
quelle
5
Das ist die richtige Antwort. Funktioniert ohne Hacken. Vielen Dank.
chmac
1
Sollte "virsh net-list" sein ... kein Leerzeichen zwischen "net" und "list". Ansonsten funktioniert das einwandfrei.
Dave Hein
@ DaveHein Danke für die Korrektur. Die Antwort wurde aktualisiert.
Rahul
Wenn Sie leere Ergebnisse erhalten, versuchen Sie, virsh mitsudo
Freedom_Ben
6

Ich denke, dies ist eine alte Frage, aber die aktuellen Versionen von virshmachen dies viel einfacher, wenn Sie ein natürliches oder überbrücktes privates Netzwerk verwenden. Ich habe eine virtuelle Maschine steakin einem (gerouteten) privaten Netzwerk (AKA "NAT"). Es sind nur zwei Befehle, um herauszufinden, welche IP vom eingebauten Mechanismus zugewiesen wurde:

$ 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

Ich habe auch eine andere VM ( eggs), die mit dem regulären Netzwerk verbunden ist (verbunden mit einem Bridge-Gerät auf dem Hypervisor-Host). Libvirt weist ihm keine Adresse zu. Es erhält eine Adresse vom DHCP-Server meines Netzwerks, der in meinem Fall auch das dynamische DNS aktualisiert. domifaddDies ist eine wahrscheinliche Möglichkeit, wenn für diese VM keine Ausgabe erfolgt . Sie müssen die Adresse also im Grunde wie jede andere Maschine finden - es ist wahrscheinlich am einfachsten, sie in der Arp-Tabelle zu finden - was bedeutet, dass sie ip neighbourjetzt arpveraltet ist und auf einigen Distributionen nicht mehr vorhanden ist. Glücklicherweise können Sie auch kürzere Versionen wie ip neighund ip n(oder ip neighbor) verwenden, wenn Sie Dinge nicht mit extra Vouwels buchstabieren . ;) Unten benutze ich domiflist, um die MAC-Adresse zu finden (beachten Sie, dass es verbunden istbr0 in der "source" -Spalte) und finde das dann in der arp -Tabelle.

$ 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
quelle
5

Liste für VMS:

virsh list

Holen Sie sich vm MAC vom Namen

virsh domiflist debian8

Mach den Scan deines VM-Subnetzes mit grep (MAC muss großgeschrieben sein)

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

Ergebnis

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
quelle
4

Wenn Sie Konsolenzugriff auf die VM haben, müssen Sie nur ifconfig -aauf dem Gast ausführen . Stellen Sie während Ihres Aufenthalts sicher, dass der Gast über eine Netzwerkverbindung verfügt und diese ausgeführt sshdwird.

Wenn Sie keinen Konsolenzugriff haben, wurde die IP-Adresse möglicherweise von DHCP zugewiesen. Suchen Sie nach einem anderen Computer, der ebenfalls eine DHCP-Zuweisung erhält, z. B. dem Hostserver, und fügen Sie der Adresse 1 hinzu, und versuchen Sie es. Versuchen Sie es mit den nächsten 5 oder 6 Adressen. Wenn dies nicht funktioniert, haben Sie entweder ein großes aktives Netzwerk und müssen jede IP-Adresse im Subnetz testen, oder es liegt ein Netzwerkproblem auf niedrigerer Ebene vor, z. B. keine Route zum Host oder zwei Hosts mit derselben MAC-Adresse. Oder vielleicht bist du einfach nicht sshdgerannt.

Die Verwendung der Konsole ist der einfachste Weg, um dieses Problem zu lösen.

Michael Dillon
quelle
Ich habe es tatsächlich geschafft, über Xming Server + "virt-viewr" -Befehl eine Verbindung zu meiner VM herzustellen. Ich habe festgestellt, dass dem Gast keine IP zugewiesen ist, während ich in der VM bin. Wie macht man DHCP funktioniert? Welche XML-Datei muss ich ändern?
Xianlin
Hallo Michael, denkst du, du kannst mir helfen, wenn ich dir Zugriff auf meinen Server gebe? Ich habe versucht, DHCP und statische IP-Adresse zu verwenden, aber die Gast-VMs erhalten keine IP-Adresse. Mein Host-Server kann jedoch weiterhin auf das Internet zugreifen. Vielen Dank.
Xianlin
3

So zeigen Sie die IP-Adresse Ihrer VM an:

$ arp -n

Wenn arp nicht auf Ihrem System installiert ist, installieren Sie einfach das net-toolsPaket.

Alxs
quelle
2

Es ist möglich, über das eingebaute VNC eine Verbindung herzustellen virt-manager, und Sie müssen sich anmelden, um die IP-Adresse zu finden ifconfig eth0. Normalerweise eth0, sofern nicht anders angegeben.

Gänseblümchen
quelle
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 ..:..:..:..:..:..)

Subnetz scannen. Analysieren Sie die Ausgabe mit awk, um Zeilen wie zu erhalten <IP> <MAC>. Dann greife sie mit einer Liste der MACs der VMs ein.

Die Liste der MACs erhalten Sie, indem Sie alle VMs auflisten (auch Leerzeilen entfernen) virsh domiflist entfernen diese einzeln ausführen und dann nach einem Muster suchen, das wie ein MAC aussieht.

Quellen:

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

Velkan
quelle
0

Wenn Sie QEMU (VM-Emulator) haben, klicken Sie auf die Schaltfläche "i" und überprüfen Sie die Netzwerkkarte, die dem "Br0" -Netzwerk zugeordnet ist. Notieren Sie sich die MAC-Adresse der Netzwerkkarte. Melden Sie sich jetzt bei Ihrer VM an -> Öffnen Sie das Terminal -> geben Sie im Terminal den Befehl "ifconfig" ein -> notieren Sie sich die IP-Adresse, die der zuvor notierten Mac-Adresse zugeordnet ist.

Sie können sich mit Putty oder einem beliebigen SSH-Client mit der IP-Adresse, die Sie im letzten Schritt notiert haben, bei Ihrer VM anmelden.

Saurav
quelle
0

Ich habe meine KVM-Gäste auf der br0-Schnittstelle, daher denke ich, dass es ein bisschen anders ist, aber hier sind meine beiden Skripte, die ich erstellt habe.

Hinweis zur Verwendung von ARP Sie müssen zuerst den MAC in Ihrer Arp-Tabelle haben. Daher ist es am besten, fping zu verwenden, um ein schnelles Ping des gesamten Netzwerks durchzuführen (dauert etwa 2 Sekunden). Dies stellt sicher, dass Ihr Arp-Cache auf dem neuesten Stand ist.

apt-get install fping
yum install fping

Finden Sie eine einzelne Gast-IP über:

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

Finde alle Gast-IPs über:

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
quelle
Dieses Problem habe ich am Ende mit arp-scan gelöst. Beispiel: sudo arp-scan --interface = br0 --localnet --bandwidth = 8192000 --numeric --retry = 1 das war, als ich aktiv suchen wollte. Ich habe addrwatch verwendet, um im Hintergrund zu sitzen und eine Mac / IP-Adresszuordnung für mich zu erstellen.
Duke Dougal
0

Ich habe ein get-vm-ipSkript geschrieben (verfügbar unter https://github.com/earlruby/create-vm/blob/master/get-vm-ip ), das dies verwendet, um die IP zu erhalten:

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'
Earl Ruby
quelle
0
  1. Holen Sie sich Ihre Domain-Liste von virsh list --all

    virsh # list --all
    
    2     webserver_01                   running
    
  2. virsh domiflist yourDomainIdRufen Sie Ihre Domain-Interface-Liste nach Domain-ID oder -Namen ab, und Sie sehen die MAC-ADRESSE des Domain-Interfaces.

    virsh # domiflist 2
    
    bridge     br0        virtio      52:54:00:42:be:96
    
  3. Wenn Sie nmapIhr LAN mit scannen nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2, erhalten Sie die IP-Adresse.

    [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
quelle
0

Eine schöne Lösung, die den qemu-guest-Agenten nutzt.

a) Konfigurieren Sie Ihre vm für die Verwendung von qemu-guest-agent Auf dem Host: Mit virt-manager einen "qemu-guest-agent" -Kanal hinzufügen Ist wirklich einfach. In meinem Fall heißt die Maschine "Debian", und xml nach dem Ändern ähnelt Dies.

 <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) Installieren Sie auf dem Gast den qemu-guest-agent und stellen Sie sicher, dass er gestartet ist

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) Schließlich gibt diese nette Pipe die IP zurück, anstatt NAMEOFVMNIC, set eth0, enp1s0, etc ..

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

(Während Sie für eine so einfache Antwort zu fortgeschritten scheinen)

Wille

$ ifconfig

Arbeit?

David
quelle
Achten Sie auch darauf, wenn Sie doppelte Instanzen derselben Maschine haben, wie die Maschine Probleme mit der gefälschten MAC - Adresse etc. hat ... es gibt Möglichkeiten , um manuell zu bearbeiten , dass (und ich denke , einen Befehl für das auch ausgeführt werden )
David
Ich habe nur eine VM "vm1" auf meinem Ubuntu-Server-Host und die Ausgabe des Befehls "ifconfig" zeigt an, dass meinem Netzwerkadapter "eth0" keine IP-Adresse zugewiesen wurde.
Xianlin
yeah, du hast keine ip ... Hast du "dhclient eth0" ausprobiert - brauche vielleicht sudo
David
Ich habe versucht, aber immer noch keine DHCP-IP von meinem Host-Server auf meine Gast-VMs zu bekommen. Mein Host-Server hat eine feste IP und kann auf das Internet zugreifen.
Xianlin
Wenn Sie eine IP nicht im übergeordneten Netzwerk haben möchten, müssen Sie NAT in Ihren VM-Einstellungen auswählen, anstatt Bridged.
David