¿Cómo asignar una dirección IP a una máquina virtual que se ejecuta en segundo plano?

¿Cómo asignar una dirección IP a una máquina virtual que se ejecuta en segundo plano?

Ejecuto mi instancia de Ubuntu desde Virtual Box en segundo plano usando el siguiente comando:

VBoxManage startvm ${VM_NAME} --type headless

La principal diferencia entre eso y ejecutarlo a través de la GUI es que, cuando estoy en la GUI después de que se inicia, puedo verificar ifconfigcuál es la dirección IP para poder sshingresar desde mi terminal en el host y obviamente puedo. No hagas eso en segundo plano.

Suponiendo una asignación dinámica de direcciones IP en la red, ¿hay alguna manera de extraer la IP asignada a la instancia recién creada para fines ssh O hay alguna manera de ingresar a ella mediante ssh sin conocer la IP (por ejemplo, a través de un puerto de puerta trasera en el host? )?

Respuesta1

Puede utilizar el comando VBoxManage para extraer la dirección IP, como se muestra enesta publicación en el foroen virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Sin embargo, a menos que tenga muy buenas razones, deberá considerar seriamente asignar una dirección IP estática a su máquina virtual invitada. Esto es posible aunque probablemente esté utilizando DHCP. Simplemente elija una dirección IP fuera del rango que asigna su servidor DHCP.

Respuesta2

Primero asegúrese de haber instaladoPaquete de extensión de VirtualBoxo instalarlo si no es así.

Por ejemplo (para 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

o de

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

Después de eso puedes obtener la IP de la VM.

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}'

Respuesta3

Puedes hacerlo sin instalar Guest Addition

Pero necesitas conocer tus redes
, por ejemplo, tenemos VM con dos adaptadores.
dos adaptadores de red

uno para comunicación por Internet
el segundo para comunicación solo con host

puedes ver la red con el comandoLista de administración de VBox

red nacional:

% VBoxManage lista de natnets
Nombre de red: NatNetwork
IP: 10.10.12.1
Red: 10.10.12.0/24
DHCP habilitado: Sí
Habilitado: Sí

red de solo host

% VBoxManage lista hostonlyifs
Nombre: vboxnet0
DHCP: deshabilitado
Dirección IP: 192.168.6.1
Máscara de red: 255.255.255.240

Aquí está la parte principal
que muestra las máquinas virtuales en ejecución.

% vboxmanage lista ejecutandovms
"prueba de IP centos7 nodo0" {46ec9075-f49b-4d16-9867-d56710b6a3da}

necesitamos VM uuid
es 46ec9075-f49b-4d16-9867-d56710b6a3da

ahora podemos obtener direcciones MAC

% vboxmanage showvminfo --detalles 46ec9075-f49b-4d16-9867-d56710b6a3da | MAC
NIC 1: MAC: 08002783E8BB, Adjunto: Red NAT 'NatNetwork', Cable conectado: activado, Seguimiento: desactivado (archivo: ninguno), Tipo: 82540EM, Velocidad informada: 0 Mbps, Prioridad de arranque: 0, Política Promisc: denegar, Ancho de banda grupo: ninguno
NIC 2: MAC: 080027D992F0, Archivo adjunto: Interfaz de solo host 'vboxnet0', Cable conectado: activado, Seguimiento: desactivado (archivo: ninguno), Tipo: 82540EM, Velocidad informada: 0 Mbps, Prioridad de arranque: 0, Política Promisc: denegar , Grupo de ancho de banda: ninguno

08002783E8BB para el primer adaptador en 'NatNetwork'red
080027D992F0 para el segundo adaptador para 'vboxnet0'interfaz

ahora podemos obtener IP de la tabla DHCP para el primer adaptador

% vboxmanage dhcpserver findlease --network NatNetwork --mac-address=08002783E8BB
Dirección IP: 10.10.12.4                     
Dirección MAC: 08:00:27:83:e8:bb
Estado: acked
Emitido: 2020-07-13T13:31:20Z (1594647080)
Caducar: 2020-07-13T13:41:20Z (1594647680)
TTL: 600 segundos, actualmente quedan 586 segundos

y por segundo

% vboxmanage dhcpserver findlease --interface vboxnet0 --mac-address=080027D992F0
Dirección IP: 192.168.6.3
Dirección MAC: 08:00:27:d9:92:f0
Estado: acked
Emitido: 2020-07-13T13:29:06Z (1594646946)
Caducar: 2020-07-13T13:39:06Z (1594647546)
TTL: 600 segundos, actualmente quedan 399 segundos

tenga en cuenta
que para la red nat usamos la opción --red
para el adaptador solo de host usamos la opción --interfaz

ahora nos conectamos a esta VM desde el host por ssh

%ssh[correo electrónico protegido]
[correo electrónico protegido]contraseña de:
Último inicio de sesión: lunes 13 de julio 09:05:33 2020
[raíz@nodo0 ~]#

Respuesta4

Así lo hago yo, tanto a mano como en ansible. "/Net/0/" es la primera interfaz de red, "/Net/1/" la segunda, etc. "/V4/" es para IPv4 y "/V6/" es IPv6.

versión IPv4

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

Versión IPV6

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

Ponlo en un script simple:

#!/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

Lo que proporciona un resultado similar a este de todas las máquinas virtuales en ejecución:

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

Nota: Requiere la instalación de Guest Additions.

información relacionada