Wie wird einer im Hintergrund laufenden VM eine IP-Adresse zugewiesen?

Wie wird einer im Hintergrund laufenden VM eine IP-Adresse zugewiesen?

Ich führe meine Ubuntu-Instanz aus Virtual Box im Hintergrund mit dem folgenden Befehl aus:

VBoxManage startvm ${VM_NAME} --type headless

Der Hauptunterschied zwischen dieser Vorgehensweise und der Ausführung über die GUI besteht darin, dass ich, wenn ich mich nach dem Start in der GUI befinde, ifconfigdie IP-Adresse prüfen kann, sodass ich sshvon meinem Terminal auf dem Host darauf zugreifen kann. Im Hintergrund ist dies natürlich nicht möglich.

Gibt es unter der Annahme einer dynamischen Zuweisung von IP-Adressen im Netzwerk eine Möglichkeit, die der neu erstellten Instanz zugewiesene IP für SSH-Zwecke zu extrahieren, ODER gibt es eine Möglichkeit, sich per SSH anzumelden, ohne die IP zu kennen (z. B. über einen Backdoor-Port auf dem Host)?

Antwort1

Sie können den Befehl VBoxManage verwenden, um die IP-Adresse zu extrahieren, wie in gezeigtdieser Forumsbeitragauf virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Sofern Sie dafür keine sehr guten Gründe haben, sollten Sie ernsthaft erwägen, Ihrer Gast-VM eine statische IP-Adresse zuzuweisen. Dies ist möglich, auch wenn Sie wahrscheinlich DHCP verwenden. Wählen Sie einfach eine IP-Adresse außerhalb des von Ihrem DHCP-Server zugewiesenen Bereichs.

Antwort2

Stellen Sie zunächst sicher, dass SieVirtualBox-Erweiterungspaketoder installieren Sie es, wenn nicht.

Zum Beispiel (für Ubuntu)

> wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
> sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack

oder von

https://www.virtualbox.org/wiki/Downloads

Danach können Sie die IP der VM erhalten

VBoxManage guestproperty enumerate <_name_of_VM_> | grep IP | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'

Antwort3

Sie können es tun, ohne Guest Addition zu installieren

Aber Sie müssen Ihre Netzwerke kennen
, zum Beispiel haben wir VM mit zwei Adaptern
zwei Netzwerkadapter

Einer ist für die Internetkommunikation zuständig,
der andere für die Nur-Host-Kommunikation.

Sie können das Netzwerk mit dem Befehl sehenVBoxManage-Liste

NAT-Netzwerk:

% VBoxManage-Liste Natnets
Netzwerkname: NatNetwork
IP-Adresse: 10.10.12.1
Netzwerk: 10.10.12.0/24
DHCP aktiviert: Ja
Aktiviert: Ja

Host-Only-Netzwerk

% VBoxManage-Liste hostonlyifs
Bezeichnung: vboxnet0
DHCP: Deaktiviert
IP-Adresse: 192.168.6.1
Netzwerkmaske: 255.255.255.240

Hier ist der Hauptteil
der Show laufende VMs

% vboxmanage-Liste runningvms
"centos7 node0 ip test" {46ec9075-f49b-4d16-9867-d56710b6a3da}

wir brauchen die VM-UUID,
sie lautet 46ec9075-f49b-4d16-9867-d56710b6a3da

Jetzt können wir MAC-Adressen abrufen

% vboxmanage showvminfo --details 46ec9075-f49b-4d16-9867-d56710b6a3da | fgrep MAC
NIC 1: MAC: 08002783E8BB, Anhang: NAT-Netzwerk „NatNetwork“, Kabel angeschlossen: ein, Trace: aus (Datei: keine), Typ: 82540EM, Gemeldete Geschwindigkeit: 0 Mbit/s, Startpriorität: 0, Promisc-Richtlinie: verweigern, Bandbreitengruppe: keine
NIC 2: MAC: 080027D992F0, Anhang: Host-only-Schnittstelle „vboxnet0“, Kabel angeschlossen: ein, Trace: aus (Datei: keine), Typ: 82540EM, Gemeldete Geschwindigkeit: 0 Mbit/s, Startpriorität: 0, Promisc-Richtlinie: verweigern, Bandbreitengruppe: keine

08002783E8BB für den ersten Adapter im „NatNetwork“Netzwerk
080027D992F0 für zweiten Adapter für „vboxnet0“Schnittstelle

Jetzt können wir die IP für den ersten Adapter aus der DHCP-Tabelle abrufen

% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB
IP-Adresse: 10.10.12.4                     
MAC-Adresse: 08:00:27:83:e8:bb
Status: bestätigt
Herausgegeben: 2020-07-13T13:31:20Z (1594647080)
Läuft ab: 2020-07-13T13:41:20Z (1594647680)
TTL: 600 Sek., aktuell noch 586 Sek.

und für den zweiten

% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0
IP-Adresse: 192.168.6.3
MAC-Adresse: 08:00:27:d9:92:f0
Status: bestätigt
Herausgegeben: 2020-07-13T13:29:06Z (1594646946)
Läuft ab: 2020-07-13T13:39:06Z (1594647546)
TTL: 600 Sek., aktuell noch 399 Sek.

Bitte beachten Sie
, dass wir für NAT-Netzwerke die Option --network verwenden.
Für Host-Only-Adapter verwenden wir die Option --interface.

Jetzt verbinden wir uns vom Host per SSH mit dieser VM

% ssh[email geschützt]
[email geschützt]'s Passwort:
Letzte Anmeldung: Mo Jul 13 09:05:33 2020
[root@node0 ~]

Antwort4

So mache ich es, sowohl manuell als auch in Ansible. „/Net/0/“ ist die erste Netzwerkschnittstelle, „/Net/1/“ die zweite usw. „/V4/“ ist für IPv4 und „/V6/“ ist für IPv6.

IPv4-Version

VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g'

IPV6-Version

VBoxManage guestproperty get <uuid|vmname> "/VirtualBox/GuestInfo/Net/0/V6/IP" | sed -e 's/Value: //g'

In ein einfaches Skript umgesetzt:

#!/bin/sh
for VM in $(VBoxManage list runningvms | awk -F\{ '{print $2}' | sed -e 's/}//g');
do {
  VMNAME="$(VBoxManage showvminfo ${VM} --machinereadable | awk -F\= '/^name/{print $2}')"
  VMIP=$(VBoxManage guestproperty get ${VM} "/VirtualBox/GuestInfo/Net/0/V4/IP" | sed -e 's/Value: //g')
  printf "VM-IP: %-16s VM-Name: %-50s\n" "${VMIP}" "${VMNAME}"
} done

Das Ergebnis ist eine Ausgabe aller laufenden VMs, die ungefähr dieser ähnelt:

VM-IP: 10.13.172.82     VM-Name: "Ansible Lab VM1 Master"
VM-IP: 10.13.172.84     VM-Name: "Ansible Lab VM2 Slave CentOS"
VM-IP: 10.13.172.83     VM-Name: "Ansible Lab VM3 Slave Win10"
...etc

Hinweis: Erfordert die Installation von Guest Additions.

verwandte Informationen