sábado, 27 de octubre de 2012

VMWare Server: Adding a VNC server without web console.



Una de las plataformas de virtualización con mayor aceptación en el mercado actualmente es VMWare, en sus versiones enterprise tales como ESX/ESXi o en su versión gratuita (apta para PoC, o uso hogareño), VMWare Server. Quienes me conocen, saben que no tengo demasiada simpatía con este producto, lo cual hace que mi interés en el mismo no sea mas allá que instalarlo en algún server, crear máquinas virtuales y hacer alguna que otra tarea administrativa con el, pero no más.

Esta terrorífica historia que hoy les traigo, me sucedió hace algunos meses en un servidor productivo, que utilizaba VMWare Server. El equipo se había caído, y por algún motivo extraño la interfaz web no levantaba. Siguiendo la Ley de Murphy: "Si algo puede salir mal, lo hará..."
Una de las VM's no había levantado correctamente y no tenía forma alguna de conectarme a ella para ver por qué no booteaba el sistema operativo, así que buscando en Google, encontré esto:

Todos sabemos que muchas plataformas de virtualización permiten añadir un servidor VNC a fin de poder conectarse a la máquina virtual. Esto se define dentro de la propia configuración de la VM, por lo cual, si tiene su propia configuración, significa que hay un archivo donde esa configuración se almacena, y este utilizando VMWare, es un archivo .vmx y se encuentra en /var/lib/vmware/vms//VM_NAME.vmx. El cual si abrimos con cualquier editor de textos (previo backup), por ejemplo Vi :-P, podremos ver todas las definiciones que hemos realizado para nuestra máquina virtual, yo lo que hice fue añadir lo siguiente:
RemoteDisplay.vnc.port = "5900"
RemoteDisplay.vnc.enabled = "TRUE"
RemoteDisplay.vnc.password = "foobar"
La primera directiva que añadimos, tiene un valor entero, y es el número de puerto que bindearemos nuestro VNC, es importante que ese puerto TCP, al que conectaremos con el cliente VNC, sea utilizado únicamente por esa VM, debido a que por cada una de estas a la que nosotros le habilitemos el servidor VNC, vamos a utilizar un puerto diferente.
El segundo parámetro tiene un valor booleano, (TRUE o FALSE), y nos va a permitir habilitar o deshabilitar el servidor VNC. Y por su parte le tercero, es la contraseña que utilizaremos para acceder a este con nuestro cliente. Una vez hecho esto, procedemos a levantar la máquina virtual, en este caso, su nombre es foobar, y el VMWare Server se encuentra corriendo en el localhost:
# vmrun -T server -h 'https://localhost:8333/sdk' -u root -p crackme start "[datastore]" 
"foobar/foobar.vmx"
Si todo está bien, esto no debería tardar mas de dos o tres segundos, una vez listo. Debemos conectarnos con cualquier cliente VNC, por ejemplo Vinagre.
Siempre es bueno verificar que el puerto realmente escuche:
# netstat -tnpa | grep 5900
tcp   0   0 0.0.0.0:5900    0.0.0.0:*  LISTEN   8244/vmware-vmx 
Y ahora si podemos conectarnos a el. Como en este caso debido a que existia un firewall entre el servidor y yo, la forma rápida de hacerlo era mediante un tunel SSH:
ssh -N -L 8000:127.0.0.1:5900 vmware_user@someplace
Para ahora sí conectar a la máquina virtual utilizando, en mi caso, Vinagre:
# vinagre localhost:8000

9 comentarios:

  1. Una pregunta. ¿Cuál es tu plataforma de virtualización preferida? Porque probé con varias y todas me dan algún tipo problema distinto así que todavía no se con cuál quedarme.

    ResponderEliminar
    Respuestas
    1. @Emperor: Como estás?, quizá te parezca básica mi respuesta pero me gusta mucho (aunque aún le falta) KVM (Kernel-based) Virtual Machine. KVM + libvirt + qemu anda realmente muy bien. Tengo experiencia implementandoló sobre RHEL/CentOS e OpenIndiana y siempre tuve excelentes resultados.

      Eliminar
  2. Hola Facu anexo a modo informativo que dicho Hack funciona correctamente hasta ESXi 4.1 , a partir de la versión 5.0 de ESXi hay que abrir los puertos del Firewall aparte de agregar esas 3 lineas en los .vmx

    Dejo el link de la info de como abrir los puertos en el Firewall

    http://communities.vmware.com/thread/337924?tstart=0

    Saludos

    ResponderEliminar
  3. yo hubiera preferido virtualbox o qemu , aunque en vmware se da la opcion de soporte 3d en las maquinas virtuales , en virtualbox esa opcion solo se da si la maquina original es un windows yo probe sobre un debian y no pude conseguir 3d en la maquina virtual si sabes alguna forma de acerlo podes explicarlo en una proxima nota gracias!!!

    ResponderEliminar
  4. Kvm + libvirt + qemu + virt-manager!!! (+ arch linux :P)

    ResponderEliminar
  5. Muy buena, gracias - Encontre esta pagina interesante sobre linux - instalaciones linux

    ResponderEliminar
  6. Entorno productivo sobre VMware Server?? Que huevos loco, al menos que pongan el ESXi free

    ResponderEliminar
  7. It was very nice article and it is very useful to Linux learners.We also provide Linux online training

    ResponderEliminar