Émuler le port série sur Proxmox VE

Guide d'utilisation du port série virtuel sur Proxmox VE et comment dépanner vos machines virtuelles en cas de problème.

Émuler le port série sur Proxmox VE
pve proxmox proxmoxve serialport

Au sommaire :

  • 1-Qu'est-ce que le port série ?
  • 2-Configuration
  • 3-Simulation d'un cas concret
  • 4-Accéder à distance

Le port série ou port COM (RS-232) est un type de branchement très répandu entre 1981 et le début des années 2000 avant d'être remplacer par la norme USB.

Il permet notamment de connecter différents périphériques (automate, appareil de mesure, etc.).

Pour en savoir plus.

RS-232 — Wikipédia

L’intérêt est de se connecté en direct à une machine virtuelle comme ça aurait été le cas avec une machine physique.

Vous allez me dire "quel intérêt ? c'est trop vieux!!!! Je peux prendre le main en local ou à distance avec le protocole SSH" et c'est là que je vous dis "et si le service SSH est en échec ? que vous êtes en déplacement et que des services importants tourne dans la machine virtuelle, vous faites comment "cabron" ?"

Et je parle même pas des cas de sous allocation en mémoire vive ou en cores qui provoque des drames.

C'est là tout l’intérêt du port série, vous permettre de vous sortir de ce genre de pétrin sans stopper sauvagement la machine virtuelle.

2-Configuration

Rien de plus simple. Sur votre serveur Proxmox VE, il suffit juste d'ajouter le port série dans Hardware/Serial Port puis de démarrer votre machine virtuelle pour qu'il soit pris en compte.

Sur une image cloud-init Debian/Ubuntu, c'est déjà configuré à l'avance.

Par contre sur des machines virtuelles installés manuellement, il vous faudra modifier le grub pour que ce soit pris en compte.

Donc dans votre machine virtuelle, modifiez le fichier /etc/default/grub et ajouter la ligne suivante dans "GRUB_CMDLINE_LINUX".

# in /etc/default/grub change the GRUB_CMDLINE_LINUX parameter to
GRUB_CMDLINE_LINUX="quiet console=ttyS0,115200"

Sur mon instance Manjaro, ça ressemble à ça par exemple.

Puis mettez à jour le grub.

[sussudio@manjaro-xfce ~]$ sudo update-grub
[sudo] password for sussudio: 
Generating grub configuration file ...
Found theme: /usr/share/grub/themes/manjaro/theme.txt
Found linux image: /boot/vmlinuz-5.15-x86_64
Found initrd image: /boot/intel-ucode.img /boot/initramfs-5.15-x86_64.img
Found initrd fallback image: /boot/initramfs-5.15-x86_64-fallback.img
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found memtest86+ image: /boot/memtest86+/memtest.bin
done
[sussudio@manjaro-xfce ~]$

3-Simulation d'un cas concret

On va simuler le cas d'une machine virtuelle qui vois son service SSH se mettre en échec :

  • Sur mon poste client, je me connecte à distance via mon VPN Wireguard et intentionnellement je vais stopper le service SSH (sshd.service) de la machine virtuelle,
  • Je me déconnecte de ladite machine,
  • Et évidemment (imaginez l'accent exotique), je ne peut plus me connecté à distance ou en local,
sussudio@containers:~$ sudo systemctl stop sshd.service
nagib@containers:~$ exit
logout
Connection to 192.168.0.54 closed.
 sussudio@ubuntu-desktop  ~  ssh sussudio@192.168.0.54
ssh: connect to host 192.168.0.54 port 22: Connection refused

Sur le terminal de mon serveur Proxmox VE :

  • Je tape la commande "qm terminal 101" (101 est le VMID de la machine virtuelle) qui permet d'émuler le port série d'une machine physique,
  • Je démarre de nouveau le service SSH (sshd.service),
  • Je me déconnecte avec faisant CTRL+O,
root@micro-srv-01:~# qm terminal 101
starting serial terminal on interface serial0 (press Ctrl+O to exit)

sussudio@containers:~$ sudo systemctl start sshd.service
sussudio@containers:~$ root@micro-srv-01:~# 

Puis sur le terminal de mon poste client, je peut de nouveau me connecté à la machine virtuelle.

 ✘ sussudio@ubuntu-desktop  ~  ssh sussudio@192.168.0.54
Warning: Permanently added '192.168.0.54' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-40-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Jul  1 11:01:30 UTC 2022

  System load:                      1.08935546875
  Usage of /:                       50.2% of 99.96GB
  Memory usage:                     42%
  Swap usage:                       0%
  Processes:                        275
  Users logged in:                  1
  IPv4 address for br-32466dd87212: 10.2.0.1
  IPv4 address for br-3ba832c50064: 192.168.90.1
  IPv4 address for br-e7ae303cefa6: 172.18.0.1
  IPv4 address for docker0:         172.17.0.1
  IPv4 address for eth0:            192.168.0.54
  IPv6 address for eth0:            2a01:cb00:82a5:3e00:6894:4aff:fedf:dc1c

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

0 updates can be applied immediately.


Last login: Fri Jul  1 10:57:39 2022

Très très utile au quotidien, je peux vous le garantir mais peu d'articles en font mention. Par contre si c'est votre serveur Proxmox VE qui rencontre un problème, il va vous falloir une carte Idrac si vous avez un serveur physique ou bien mettre en place le projet Pi KVM.

4-Accès à distance (bonus)

Si vous avez suivi la partie 17, vous devriez être capable d'accéder à distance à votre serveur PVE avec certificat SSL et double authentification.

Proxmox VE : Certificat SSL + 2FA avec Traefik/Authelia (partie 17)
Au sommaire : * Objectif * Configurer le routeur * Configurer le service * Configurer le middleware * Exposer Proxmox VE 1-Objectif L’objectif est de rendre accessible sur le web public votre serveur PVE tout en chiffrant la traffic avec un certificat SSL et protéger l’accès avec la double…

Mais il y a un hic. Vous n'arrivez pas à vous connecté en SSH à votre machine virtuelle et c'est logique. À moins d'ouvrir le port 22 (ou tout autre) de votre box internet ou d'avoir un serveur VPN, vous allez devoir utiliser NoVNC et tout taper à la main.

Mais encore une fois, le port série va vous sauver la mise.

Si vous avez ajouter le port série comme dans le chapitre 2 et que vous lancer la machine virtuelle, vous devriez avoir cette option qui sera disponible.

Cliquez sur "xtrem.js" et vous devriez avoir une fenêtre qui s'ouvre qui vous permettra de prendre la main à distance sur votre machine virtuelle et faire du copier-coller.

Nul besoin d'ouvrir un port de votre box internet, nul besoin de serveur VPN, suivez juste la partie 17 de mon guide PVE et ajoutez l'option "serial port" à votre machine virtuelle.