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 : Ce tutoriel ne documente pas dans les moindres détails les phases d’installation, voire de configuration.
Il est VRAIMENT nécessaire de faire preuve de réflexion, discernement et d’avoir un minimum de compétences, pour comprendre les liens entre les différentes briques !
Merci de votre compréhension…
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)'
La réponse du système doit être :
⇒ pour CPU Intel :
vmm0 at mainbus0: VMX/EPT
⇒ pour CPU Amd :
vmm0 at mainbus0: SVM/RVI
Si aucune ligne n’apparaît, aucune virtualisation ne sera possible. Par acquis de conscience, vérifiez votre BIOS|UEFI que celle-ci ne soit pas désactivée.
De même, en rapport avec les failles CPU relatives à Meltdown, Spectre, certains CPU Intel sont patchés pour remédier à L1TF. Sous OpenBSD, ces CPU reçoivent un correctif approprié. Malheureusement, cela impacte la virtualisation et rend celle-ci impossible. Vous pouvez vous retrouver dans la situation où vous auriez un CPU compatible, mais dans les faits, la virtualisation ne pourrait être pleinement fonctionnelle.
Préférez AMD, en attendant ARM…
Il est nécessaire d’installer le firmware vmm
pour que le kernel gère.
# fw_update vmm
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 convention1.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
ATTENTION, vérifiez à l’URL suivante le nom de l’image iso de debian : https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
Et, modifiez en conséquence le code ci-dessous !
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
}
Vérifiez la configuration à l’aide de l’option -n
de vmd :
$ vmd -n
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
|
|
vether0
Le fichier relatif est /etc/hostname.vether0
:
Fichier : /etc/hostname.vether0
|
|
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
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 groupeegress
. - La deuxième règle demande à ce que tout flux entrant qui vient du service
domain
(port53
) sur les protocolesudp
ettcp
depuis le réseau lié à l’interfacevether0
soit redirigée vers le service en question. L’adresse IPv41.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’interfacelocale
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
- Pour OpenBSD <= 6.5 :
- 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
parenable
pour la VMdebian
- si vous désirez que la VM correspondante démarre, soit lors du démarrage de votre machine, si et seulement si le servicevmd
est bien actif et démarré lors du processus de démarrage machine, soit lorsque vous redémarrez le servicevmd
lui-même par vos soins.
Dépannage
vmctl vmm bios firmware not found
Vous n’avez tout simplement pas installé le firmware vmm !
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 à :
- vmctl(8) ,
- vmd(8) ,
- vm.conf(5) ,
- vmm(4)
- sans oublier doas(1) , au besoin…
Enjoy-IT! Enjoy-ID!