Proxmox es una de las mejores opciones a la hora de virtualizar si no quieres invertir en software. Gracias a su política open source, se ha convertido en mi preferido, pero no está libre de fallos. Te voy a enseñar cómo conectar con cualquier cliente VNC a tus KVM de Proxmox.
De esta forma podrás evitar usar el interfaz web, y con el método que te pongo aquí todo se quedará funcionando como servicio. Esto significa que aguantará entre reinicios y no tienes que andar ejecutando comandos cada vez que quieras acceder a tus KVMs.
Cómo conectar tu cliente VNC a cualquier KVM de Proxmox
Otra de las razones, es que la interfaz web funciona bien, siempre y cuando no deje de hacerlo. Puede que te haya pasado como a mí, que llega un momento que sin cambiar nada deja de funcionar vnc en la web de proxmox de tu servidor.
Esto es una putada, puesto que en esencia es el único punto de acceso que ofrece así sencillo sin tener que hacer nada, y si no tienes experiencia con linux más todavía.
Lo que vamos a hacer consta de dos pasos, ya que podrías conseguir conectarte por vnc ejecutando un comando, pero lo que nos interesa es tener siempre disponible esas conexiones para las máquinas virtuales que queramos.
La única pega es que para cada máquina que crees, tendrás que conectar al servidor por ssh y añadir una línea más en la configuración que vamos a crear. Pero no necesitas nada más.
Instalar openbsd-inetd en Debian
Como Proxmox está basado en debian, tanto si has usado la distribución completa que ofrecen en su página, como si lo has instalado por tu cuenta, la distribución base es Debian.
Vamos a necesitar instalar el paquete openbsd-inetd, que a grandes rasgos es un paquete que instala un servicio (daemon) de red que gestiona conexiones entrantes y es capaz de hacer que esas conexiones sean dirigidas a programas o se ejecuten comandos sobre ellas.
La instalación la harás como administrador (sudo) con este comando:
apt-update apt install openbsd-inetd
Una vez instalado no estará iniciado, pero eso lo haremos después de configurarlo.
Cómo redirigir los puertos para conectar por VNC a máquinas KVM en proxmox
En este punto te quiero comentar primero que debes elegir qué puertos serán los que estarán a la espera de conexiones VNC para ser redirigidos a las máquinas pertinentes.
Mi consejo es que uses algún tipo de lógica. En mi caso, sabiendo que el puerto predeterminado de las conexiones vnc es 5900, uso el prefijo 59, y luego la id de la KVM que configuro en proxmox para saber a cual me conecto cada vez.
Por ejemplo:
- Puerto 59101 va a la kvm 101
- Puerto 59800 va a la kvm 800
Tú puedes usar el mismo método que yo, o elegir tus propios puertos, solo recuerda usar puertos que no estén ya ocupados y que te sean fáciles de recordar.
Una vez ya tienes en mente los puertos que vas a usar y las ids de las KVMs (puedes verlas junto al nombre en la interfaz web), edita el archivo /etc/inetd.conf:
vim /etc/inetd.conf
Recuerda que necesitas permisos root. Ahora vas a añadir una línea por cada KVM a la que quieras acceder por VNC con este formato:
<puerto> [CONFIG] <vmid>
La CONFIG es la que te voy a poner en los ejemplos, solo tienes que poner tu puerto y vmid.
59101 stream tcp nowait root /usr/sbin/qm qm vncproxy 101 59105 stream tcp nowait root /usr/sbin/qm qm vncproxy 105 59800 stream tcp nowait root /usr/sbin/qm qm vncproxy 800
Una vez los tengas ya insertados al final del archivo inetd.conf guarda y ciérralo.
Por último hay que reiniciar (o iniciar si es la primera vez pero es el mismo comando) el servicio:
service openbsd-inetd restart o /etc/init.d/openbsd-inetd restart
Cualquiera de los dos comandos debería servirte, pero por si acaso te dejo los dos.
Ahora solo falta que te vayas a tu programa VNC favorito y apuntes a la ip del SERVIDOR:puerto.
Recuerda, la ip tiene que ser la del servidor, no la de la máquina virtual, y el puerto el que hayas configurado como primer parámetro.
Actualizando los accesos VNC a los KVM de proxmox
Después de esto, si quieres añadir o quitar accesos a las máquinas que tengas, lo puedes hacer simplemente modificando el archivo de configuración:
nano /etc/inetd.conf
Simplemente recuerda añadir o quitar las líneas al final del archivo, y también las puedes comentar si pones # delante de la línea para que deje de funcionar en el siguiente reinicio del servicio.
Para reiniciar el servicio una vez hechos los cambios puedes hacerlo como en el paso anterior:
service openbsd-inetd restart o /etc/init.d/openbsd-inetd restart
Conectar al KVM en proxmox con el puerto que has configurado
Esto te va a venir bien para utilizar TigerVNC, VNC Viewer, UltraVNC o cualquier otro para acceder a tus máquinas en proxmox.
Lo mejor, es que a diferencia del acceso por la interfaz web, aquí puedes cambiar las resoluciones y no te dará problemas de cursor, o pantallas incompletas.
Para acceder con cualquiera de los programas que he comentado (o el que prefieras si te gustan otros), simplemente tienes que apuntar a la ip y puesto del servidor en formato: xxx.xxx.xxx.xxx:xxxxx.
Seguramente te va a pedir contraseña para la conexión VNC, y como para la interfaz web no es necesario tendrás que configurar uno. Para eso abre la web de tu servidor proxmox y haz click encima de la KVM a editar.
En el panel de opciones de la máquina (barra lateral con pestañas), verás una que se llama monitor con el icono de un ojo. Ábrela y verás una consola en blanco en la que indica help para ver la ayuda.
Pon este comando y dale a intro:
set_password vnc tupassword
Donde tupassword será la contraseña que usarás cuando te lo pregunte al conectar con el cliente de VNC.
Hacer contraseña persistente al conectar por VNC a máquinas virtuales en proxmox
Por desgracia hasta ahora Proxmox no tiene una forma integrada para poner una contraseña que sea persistente entre reinicios de las máquinas. Para eso la única posibilidad en este momento es hacerte un pequeño script que configure la contraseña y ejecutarlo cada vez que arranca la máquina virtual.
Por ejemplo, crea un archivo llamado configurarvncpass en la máquina host de proxmox y añade lo siguiente dentro:
#!/usr/bin/expect set vmid [lindex $argv 0] set pwd [lindex $argv 2] set dispnum [lindex $argv 1] spawn qm monitor $vmid expect {"qm>"} send "change vnc 0.0.0.0:$dispnum,password\r" expect {"qm>"} send "set_password vnc $pwd\r" expect {"qm>"} send "exit\r"
Hazlo ejecutable con este otro comando
sudo chmod +x configurarvncpass
Este script lo que hace es simplemente aceptar 3 parámetros, y al ejecutarlo se conecta a la máquina virtual que le indicas y configura la contraseña dada. Con esto lo puedes poner para que se ejecute al arranque de la máquina, aunque al tener que poner la contraseña en texto plano no es demasiado seguro tampoco si tu servidor se ve comprometido, ojo con eso.
Ahora, para configurar la contraseña puedes ejecutar este comando:
./configurarvncpass 100 1 mipass
Donde el 100 es la id de tu vm, y mipass es la contraseña que quieres ponerle a la conexión vnc.
El problema es que tampoco hay una forma lógica en la que poder ejecutar un script al arranque de la máquina virtual, con lo que probablemente tengas que buscar alguna solución alternativa como un script montado como servicio que supervise los reinicios y ejecute los comandos.
Después de esto ya deberías poder conectar a cualquier máquina virtual desde clientes de vnc externos en proxmox, independientemente de si te funciona la interfaz web o no.
Si tienes algún problema en el proceso o dudas déjame un comentario y te echo un cable.
¿Tienes proxmox o lo vas a probar? ¿Para qué lo usas? Comenta y comparte