OpenBSD : Virtualisation de Debian Buster (10.x)

Article publié, le et modifié le
7 minute(s) de lecture

Cet article contient 1279 mots.
Source brute de l'article : MD

Description

La virtualisation de machine virtuelle sous OpenBSD est officiellement disponible nativement dans le système de base depuis OpenBSD 5.9.

  • Version : native
  • OS : OpenBSD 6.5, 6.6

Pré-requis

Attention

Il est nécessaire que votre machine sur laquelle vous souhaitez virtualiser ait un CPU compatible avec les fonctions adéquates. Pour le vérifier, tapez dans votre terminal/console la commande suivante :
$ dmesg | egrep '(VMX/EPT|SVM/RVI)'
vmm0 at mainbus0: VMX/EPT

Attention

Par convention, créons un répertoire ‘‘vm’’ dans notre répertoire personnel, et nous travaillerons à partir de celui-ci :
$ mkdir vm && cd vm

Précisions réseaux

  • L’interface vether0 de l’hôte aura pour adresse IPv4 : 192.168.0.1, cette adresse IP sera l’adresse de la passerelle pour l’interface réseau de la VM.
  • L’interface enp0s3 de la VM Debian aura pour adresse IPv4 : 192.168.0.2
  • Dans les deux cas, le masque de réseau est de 24 bits.
  • Le serveur DNS renseigné dans le fichier /etc/resolv.conf de la VM de Debian est, par convention 1.1.1.1. C’est celui de Cloudfare.
    Mais il peut être très bien tout autre, pourvu qu’il soit respectueux de la confidentialité… tel que ceux de Quad9, par exemple !
  • Ce même serveur DNS peut être renseigné dans la règle PF de redirection de flux DNS vers la VM.

Création de l’image qcow2

Dans les deux cas présentés, nous commencerons par créer la VM, très simplement avec l’outil natif à OpenBSD, nommé vmctl :

  • OpenBSD <= 6.5 : $ vmctl create ~/vm/buster.qcow2 -s 10G
  • OpenBSD >= 6.6 : $ vmctl create -s 10G ~/vm/buster.qcow2

Téléchargement de l’iso Debian

Info

Téléchargeons l’iso Debian :

Code : shell

$ ftp https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/{debian-10.1.0-amd64-netinst.iso,SHA512SUMS} 
Trying 2001:6b0:19::173...
Trying 2001:6b0:19::165...
Trying 194.71.11.165...
Requesting https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.1.0-amd64-netinst.iso
Redirected to https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.1.0-amd64-netinst.iso
Trying 2001:6b0:19::137...
Trying 194.71.11.137...
Requesting https://gemmei.ftp.acc.umu.se/debian-cd/current/amd64/iso-cd/debian-10.1.0-amd64-netinst.iso
100% |*************************************************************************************************************************************************************|   335 MB    00:54    
351272960 bytes received in 54.52 seconds (6.14 MB/s)
               
Trying 2001:6b0:19::165...
Trying 2001:6b0:19::173...
Trying 194.71.11.173...
Requesting https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS
100% |*************************************************************************************************************************************************************|   658       00:00    
658 bytes received in 0.00 seconds (639.20 KB/s)

Une fois téléchargée, vérifions sa somme de contrôle :
sha512 -C SHA512SUMS debian-10.1.0-amd64-netinst.iso
(SHA512) debian-10.1.0-amd64-netinst.iso: OK

Si OK, alors c’est bon… sinon, re-téléchargez !

Configuration

Le fichier de configuration se trouve être /etc/vm.conf. Il faut écrire votre compte identifiant dans la variable USER, cela permettra à votre utilisateur d’utiliser l’outil vmctl

Code : shell

USER=""
VM="/home/$USER/vm"

switch "sw" {
	interface bridge0
}

vm "buster" {
	disable
	memory 1G
	cdrom $VM/debian-10.1.0-amd64-netinst.iso
	disk $VM/debian.qcow2
	interface { switch "sw" }
	owner $USER
}

Après avoir configuré les interfaces réseaux , il faut maintenant démarrer le service de gestion des VMs :
# rcctl enable vmd
# rcctl start vmd

Il est assurément utile de s’occuper de la traduction d'adresses réseaux , et aussi des règles du parefeu

Interfaces réseaux

Créons les interfaces réseaux nécessaires que sont vether0 et bridge0 qui permettront un contrôle fin de l’adressage IP et des règles PF.

Pour l’interface vether0, il est possible d’utiliser n’importe quelle classe privée IPv4 (A: 10.0/8 ; B: 172.0.0/16 ; C: 192.168.0.0/24) - nous utiliserons un type de classe C privée, telle que 192.168.0.x. Après tout, nous n’avons pas plus de 256 VM à administrer… ;)

bridge0

Le fichier relatif est /etc/hostname.bridge0 :

Fichier : /etc/hostname.bridge0

1
add vether0

vether0

Le fichier relatif est /etc/hostname.vether0 :

Fichier : /etc/hostname.vether0

1
inet 192.168.0.1 255.255.255.0


Une fois les fichiers d’interfaces créés, donnez des droits 0600 dessus, puis démarrez les deux interfaces :
# chmod 0600 /etc/hostname.{bridge,vether}0
# sh /etc/netstart {bridge,vether}0

NAT

Pour nous faciliter la vie avec notre futur VM, nous allons autoriser la redirection des paquets IP, pour qu’elle puisse communiquer sur Internet - ne serait-ce que pour faire les mises à jour

Dans un terminal/console, écrivez :
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet6.ip6.forwarding=1

La première ligne est pour IPv4, la seconde pour IPv6.

Puis, pour garder les paramètres au redémarrage, modifiez le fichier /etc/sysctl.conf pour ajouter :
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

Attention

PF

Il sera ensuite nécessaire de modifier le fichier /etc/pf.conf ajouter au moins les règles suivantes :

Code : shell

()
domain = "1.1.1.1"

match out on egress from (vether0:network) to any nat-to (egress)

()

pass in quick proto { udp tcp } from (vether0:network) to any port domain rdr-to $domain port domain
pass on vether0 from 127.0.0.1 to any
pass on vether0 from (vether0:network) to any

()
  • La première règle indique que tout ce qui vient du réseau lié à l’interface vether0 doit être traduit (NATé) vers les adresses IP faisant partie du groupe egress.
  • La deuxième règle demande à ce que tout flux entrant qui vient du service domain (port 53) sur les protocoles udp et tcp depuis le réseau lié à l’interface vether0 soit redirigée vers le service en question.
    L’adresse IPv4 1.1.1.1 est celle du serveur DNS de Cloudflare ; elle peut être très bien celle de tout autre serveur DNS.
  • La troisième règle autorise tout ce qui passe en entrée et en sortie sur l’interface vether0 depuis l’interface locale vers ailleurs…
  • Quant à la quatrième, elle autorise tout du réseau, en entrée et en sortie, lié à l’interface vether0 vers partout !

Installation

  • Démarrer la VM pour l’installation :
    • Pour OpenBSD <= 6.5 : $ vmctl start buster -c
    • Pour OpenBSD >= 6.6 : $ vmctl start -c buster
  • Choisir le menu “Install” - NE PAS APPUYEZ sur la touche ENTRÉE ; appuyez sur la touche TAB pour éditer le menu. Il va falloir corriger la ligne :
    > /install.amd/vmlinuz vga=788 initrd=/install.amd/initrd.gz --- quiet en
    > /install.amd/vmlinuz vga=off initrd=/install.amd/initrd.gz --- quiet console=ttyS0,115200n8 ;
    une fois, transformée, appuyez sur la touche ENTRÉE !

Le reste de l’installation de Debian se fait comme tout autre installation… à vous de paramétrer selon vos besoins.

Une fois l’installation terminée, ne redémarrez pas par le biais de l’installateur, choisissez d’exécuter le shell, puis écrivez la commande :
# halt afin d’arrêter la VM proprement !

Pour finir

Une fois que vous avez fini l’installation de Debian dans votre VM, que vous avez fait les derniers réglages nécessaires pour son bon fonctionnement, pensez à éditer à nouveau le fichier /etc/vm.conf :

  • Supprimer/commenter toute écriture relative à la déclaration cdrom
  • Remplacer le mot clé disable par enable pour la VM debian - si vous désirez que la VM correspondante démarre, soit lors du démarrage de votre machine, si et seulement si le service vmd est bien actif et démarré lors du processus de démarrage machine, soit lorsque vous redémarrez le service vmd lui-même par vos soins.

Documentations

Un tout petit laïus sur la commande vmctl :
$ man vmctl pour découvrir les différentes options bien utiles, dont show, status, start, et stop qu’il semble nécessaire de maîtriser !

  • Merci de lire la documentation officielle FAQ Virtualisation (EN, FR) afin de bien comprendre le sujet, les différentes informations nécessaires à une meilleure préhension de celui-ci.
  • Il est fortement intéressant de lire les pages de manuels, en anglais, relative à :

Enjoy-IT!
Enjoy-ID!