¿Cómo encuentro la dirección IP de una máquina virtual con VMware Fusion?

19

¿Puedo determinar la IP de una máquina virtual usando VMware Fusion sin ingresar realmente al sistema operativo que se ejecuta en la máquina virtual? Estoy buscando una opción de menú, línea de comando o de otra manera que pueda emitir contra la imagen virtual con el software VMware Fusion.

Gracias Adron

Adron
fuente
Si conoce la dirección MAC de la NIC de la máquina virtual, siempre puede intentar aprovechar la caché ARP de su máquina host o invertir ARP.
ta.speot.is
¡Es sorprendente que vmware no haga que este drop-dead sea obvio y fácil como otros vms! Felicidades por la respuesta de avahi y nmap si estás desesperado, pero aún así - ¡Gran error, VMware!
nealmcb

Respuestas:

1

Respuesta corta: no

Respuesta larga: no, pero tal vez

Una dirección IP es puramente responsabilidad de un sistema operativo. Por lo tanto, el marco virtual que contiene el sistema operativo no tiene idea de la pila TCP / IP, a menos que haya adiciones simbióticas al marco, como Hyper-V y las herramientas adicionales de VMware (gracias a todda.speot.is en los comentarios a continuación) . No es muy diferente a querer explorar los archivos en una máquina virtual sin iniciarlo primero.

Técnicamente, si la máquina virtual se basa en DHCP, se podría buscar el servidor DHCP (probablemente el router de tu LAN) para el último contrato de arrendamiento que fue entregado a la dirección MAC de la tarjeta de red virtual para obtener una buena idea de lo que el IP sería probablemente ser el la próxima vez que se lance. Eso supone que la misma IP no se entregó a otro dispositivo en el medio cuando miró el historial de arrendamiento y cuando se inició la VM.

Wesley
fuente
1
Argh Esperaba que VMware tuviera algunos ganchos en el sistema operativo que proporcionarían eso. :( No tengo acceso al DHCP corporativo, por lo tanto, no tengo idea ya que tampoco tengo acceso al sistema operativo real.
Adron
Un hipervisor puede conectarse y obtener la dirección IP, Hyper V lo hace con sus Guest Additions. Y parece que algunos sabores de VMware también te dirán kb.vmware.com/Platform/Publishing/images/1006098.JPG , pero como dijo WesleyDavid, no es realmente responsabilidad del hipervisor preocuparse por esto.
ta.speot.is
46

VMWare proporciona, como es lógico, una herramienta integrada para esto vmrun,. Está bajo, /Applications/VMware Fusion.app/Contents/Library/vmrunaunque se ha movido un poco en otras versiones de Fusion.

🍺 vmrun list
    Total running VMs: 1
    .docker/machine/machines/myvm.vmx

🍺  vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
    172.16.213.128
dch
fuente
77
Esta debería ser la respuesta aceptada. Funcionó a la perfección.
Michael Potter
2
¡Agradable! vmrunestá en la RUTA de mi Mac por defecto, así que vmrun getGuestIPAddress "$(vmrun list | grep vmx)", ¡incluye las comillas!
Big Rich
Aparentemente, VMWare Tools necesita ejecutarse en la VM. (Fusion V8.5)
Laryx Decidua
10

Aquí hay un consejo en caso de que ayude a alguien. Instalar avahi-daemonen la VM. Esto le permite conectarse a través del nombre de host vmname.local, donde vmnameestá el nombre de su máquina virtual. En mi caso, el nombre de la VM es baremetaly en el host puedo ejecutar:

ssh baremetal.local

No es necesario conocer la IP de la VM. :)

berto
fuente
1
Buena idea, pero ¿qué pasa con las máquinas virtuales que ejecutan sistemas operativos donde avahi-daemonno está disponible? Windows, por ejemplo, viene a la mente ... :-)
Laryx Decidua
4

Es posible, al menos, en el caso común, donde la red de estilo NAT está configurada para el invitado. Debido a que VMWare está proporcionando NAT-ing, debería poder decirnos para qué direcciones está actualmente NAT-ing. Algo así vmrun listdebería estar generando esta información. Que no es un defecto ...

Pero, en cualquier caso, así es como se puede descubrir de todos modos. Primero, ejecute ifconfigen su Mac (tal vez, ipconfigharía lo mismo en Windows, pero no lo he probado). Esto enumerará todas las interfaces de red en la máquina, tanto físicas como virtuales. Busque los vmnet-ones. En mi Mac esto produce:

% ifconfig | grep -A2 ^vmnet
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:01 
inet 192.168.82.1 netmask 0xffffff00 broadcast 192.168.82.255
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:08 
inet 192.168.123.1 netmask 0xffffff00 broadcast 192.168.123.255

Entonces, la IP de mi invitado está en cualquiera de estas dos redes privadas de VM: 192.168.82.0/24 o 192.168.123.0/24. En su host puede haber solo uno, afortunado, o más de dos; necesitamos verificarlos a todos. Aquí hay un script tcsh muy simple, ingresado directamente en la línea de comandos, que lo hizo por mí. Intenta hacer ping a cada dirección en todas las redes privadas de clase C administradas por vmnet y finaliza, cuando un ping tiene éxito. La -W 500opción le dice a ping que espere solo medio segundo para una respuesta (podría, probablemente, usar aún menos), y -c 1le dice que envíe exactamente un paquete:

% set i=2
% while ( $i < 255 )
while? ping -W 500 -c 1 192.168.82.$i && break
while? ping -W 500 -c 1 192.168.123.$i && break
while? @ i++
while? end

El pequeño script anterior se ejecutó durante algún tiempo enumerando todos los intentos fallidos de llegar a las direcciones inexistentes:

PING 192.168.82.2 (192.168.82.2): 56 data bytes

--- 192.168.82.2 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING 192.168.123.2 (192.168.123.2): 56 data bytes
...

Hasta que finalmente tuvo éxito y terminó:

64 bytes from 192.168.123.130: icmp_seq=0 ttl=64 time=0.307 ms

--- 192.168.123.130 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss

Voilà, pude meterme en mi invitado:

% ssh 192.168.123.130
Password:

Ahora, solo tenía un único invitado en ejecución, por lo que la primera dirección IP que respondió a un ping fue la correcta. Si ejecuta varios invitados a la vez, es posible que necesite usar el mismo comando ping o similar para crear una lista de todas esas direcciones IP privadas válidas y luego probarlas todas hasta llegar al invitado correcto ...

(Y, tal vez, .130 es una buena suposición para las direcciones basadas en NAT de todos modos. Pero no puedo decir con certeza).

Mikhail T.
fuente
1
Con nmap encontrará las IP más rápidas ;-)nmap -sP 192.168.123.*
Robert Reiz
4

Como dijo Mikhail T., "Debido a que VMWare está proporcionando el NAT, debería poder decirnos, para qué direcciones está actualmente NAT". De hecho lo hace:

En mi instalación de VMware Fusion 6, el vmnet-dhcpddaemon escribe sus contratos de arrendamiento en los archivos /var/db/vmware/vmnet-dhcpd-vmnetX.leases, donde "X" es 1 y 8. Empíricamente :-) Establecí que es vmnet8 lo que debería buscar. Aquí hay un extracto del archivo de arrendamiento /var/db/vmware/vmnet-dhcpd-vmnet8.leases:

lease 192.168.177.129 {
    starts 1 2014/02/17 09:34:19;
    ends 1 2014/02/17 09:36:56;
    hardware ethernet 00:0c:29:2b:2b:10;
    client-hostname "ubuntu";
}

El client-hostnamees el nombre de la VM y el número después de la palabra leasees su IP. Puede analizar estas entradas o simplemente mirar las más recientes. Asegúrese de que el contrato de arrendamiento que está viendo todavía sea válido.

Laryx Decidua
fuente
2

Mi solución a esto fue:

Una vez que tenga instaladas las herramientas de VMware, configure el uso compartido, para que pueda acceder a una carpeta (cualquier carpeta) desde CentOS. Luego, modifique / etc / sysconfig / network-scripts / ifup-post para agregar su fecha actual y dirección IP a un archivo en esta carpeta compartida.

Como hacer esto:

Modificar: / etc / sysconfig / network-scripts / ifup-post

agregue esto antes de la última línea de ifup-post ("salida 0"):

date >> /path/to/shared/folder/guest_ip.log
ifconfig >> /path/to/shared/folder/guest_ip.log

Esto agregará su guest_ip.log con la fecha y el valor de retorno de ifconfig cada vez que aparezca la red.

En mi caso, decidí buscar un prefijo 192 en mi dirección IP, ya que sé que entre mi casa y mi trabajo siempre es 192. Esto se puede hacer ajustando lo anterior de la siguiente manera:

date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log
Mr.BassHatt
fuente
"para que pueda acceder a una carpeta (cualquier carpeta) desde CentOS". ¿Qué pasa con aquellas personas que 1) usan otras distribuciones de Linux, 2) usan sistemas operativos UNIX que no sean Linux, 3) usan sistemas operativos que no son Unix como Windows, ... en sus máquinas virtuales? :-)
Laryx Decidua
1

Ejecutar en la consola VM ipconfig(si VM es Windows) o ifconfig(si VM es Linux).

IP de eth0es la dirección IP que está buscando.

Usuario de VM
fuente
La pregunta original era "¿sin entrar realmente en el sistema operativo que se ejecuta en la máquina virtual?" Esto podría haber escapado a su atención.
Laryx Decidua
Puede que no responda la pregunta, pero terminé aquí con una pregunta ligeramente diferente y fue útil.
jamie-wilson
1

Tuve el mismo problema al ejecutar VMPlayer en Ubuntu 15.04. Mi máquina virtual estaba configurada en NAT, y aunque podía determinar su dirección IP al iniciar sesión en la interfaz gráfica de usuario y ejecutar ifconfig en la VM, no podía hacer ping o ssh en ella.

Resulta que cuando se instaló VMPlayer, no habilitó dhcp en el adaptador vmnet1 y vmnet8. La solución fue usar la interfaz gráfica de usuario de ubuntu para editar las conexiones de red con "Editar conexiones". Busque vmnet1 en ethernet y presione el botón editar. En la configuración de IPv4, habilite DHCP, guarde y reinicie.

Ahora, si ejecuta ifconfig en la línea de comando, notará que vmnet1 tiene una dirección IP. SSHing en la VM nat-ed desde el host ahora también funciona.

Atifm
fuente
0

Desde las páginas de manual de vmrun (versión 1.14.4 build-3204469):

getGuestIPAddress        Path to vmx file     Gets the IP address of  the guest
                         [-wait]

Sin embargo, tenga en cuenta que para que esto funcione, la suite VMware Tools debe instalarse en el sistema operativo invitado y este paso no puede realizarse sin iniciar sesión en el sistema operativo invitado. Puede instalar las herramientas en una "imagen base" y crear nuevas imágenes a partir de ella mediante la clonación. Luego puede usar el comando anterior para obtener la dirección IP de las máquinas virtuales recién creadas.

pldimitrov
fuente
0
arp -a| grep vmnet 
? (172.16.65.132) at 0:c:29:83:1:e0 on vmnet8 ifscope [ethernet]
Mohammad Shahid Siddiqui
fuente