Logo Khaganat
Traductions de cette page?:

Cette page est noté comme étant en brouillon. Votre participation pour l'améliorer est requise !

Ceci est une ancienne révision du document !


Proxmox

Proxmox Virtual Environment est une solution de virtualisation libre (licence AGPLv3) basée sur l'hyperviseur Linux KVM, et offre aussi une solution de containers avec LXC.

Présentation

Proxmox est une distribution GNU/Linux basée sur Debian et spécialisée dans la virtualisation. Elle dispose donc d'outils de gestion pré-installés afin de gérer des machines virtuelles ainsi que des conteneurs. Pour rappel, la principale différence entre une machine virtuelle et un conteneur est que ce dernier utilise le noyau de son l'hôte. N'étant donc, par voie de fait, pas une émulation totale d'une machine physique, le conteneur est plus léger qu'une VM tout en proposant un niveau d'isolation similaire.

Un des outils fort intéressant proposé par Proxmox est une interface web agréable qui permet aux administratrices débutantes de ne pas se sentir totalement larguées. Les administratrices plus chevronnées apprécieront également cette interface qui présente toutes les principales informations utiles. Bref, avec ça, plus besoin de chercher désespérément sur le wiki la commande dont on a besoin pour administrer Xen (et éviter la crise de panique si c'est Jukni et donc le wiki qui est down).

Installation

Scaleway propose de base Proxmox dans les installations possibles. Il n'est pas nécessaire d'installer soi-même Proxmox si l'option existe chez l'hébergeur. Votre hébergeur le propose ? Passez au chapitre suivant :-D

Mais si jamais vous souhaitez l'installer sur une machine à vous ou chez un hébergeur qui ne propose pas cette option, voici les indications.

Installez Buster en partitionnant, laissez pour la racine de quoi installer Proxmox + les templates.(le minimum c'est 20G (7G pour la distribution)

Puis vérifiez votre fichier /etc/hosts :

# Add an /etc/hosts entry for your IP address

127.0.0.1       localhost.localdomain localhost
Mon.IP   promox.votre.domaine mon_hostname
  
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Puis mettre les sources de Proxmox:

echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/proxmox.list
wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg
apt-key add proxmox-ve-release-6.x.gpg
apt update && apt full-upgrade
apt install proxmox-ve postfix open-iscsi

Il faut commenter la version entreprise :

nano /etc/apt/sources.list.d/pve-enterprise.list

Il faut configurer les interfaces pour les ponts avec un bridge sur 10.0.0.1 :

nano /etc/network/interfaces
iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
      address  ip.du.server
      netmask  255.255.255.0
      gateway  ip.du.server.1
      bridge-ports eno1
      bridge-stp off
      bridge-fd 0

auto vmbr1
iface vmbr1 inet static
      address  10.0.0.1
      netmask  24
      bridge-ports none
      bridge-stp off
      bridge-fd 0

Il faut autoriser le NAT :

nano /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
sysctl -p 

Check les DNS (exemple online.net)

Server DNS 1  127.0.0.1
Server DNS 2  62.210.16.6
Server DNS 3  62.210.16.7

Régle iptables avec un Conteneur(CT) Proxy sur 10.0.0.10 :

iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i vmbr1 -o vmbr0 -j ACCEPT
#routeur avec ip 10.0.0.10
#ssh
iptables -t nat -I PREROUTING -p tcp --destination-port 3510 -j DNAT --to 10.0.0.10:22
#web
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.10:80
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.10:443

Choix du format : Rollniak a choisi ZFS

zpool create nom_de_la_partition /dev/sda*

Certificat pour dépanner

Rendez-vous plutôt sur la doc Https et certificat ssl, ce qui suit est uniquement pour dépanner.

apt install certbot
certbot certonly --standalone -d nom_de_domain
cp /etc/letsencrypt/live/<domain>/fullchain.pem /etc/pve/local/pveproxy-ssl.pem
cp /etc/letsencrypt/live/<domain>/privkey.pem /etc/pve/local/pveproxy-ssl.key
systemctl restart pveproxy

Configuration, interface web

Une fois la distribution installée, rendons nous directement sur l'interface d'administration web située à https://ip-de-la-machine-ou-nom-de-domaine:8006/.

Mettez l'interface en français avant d'entre son login (root) et son mot de passe :

Todo : récupérer les images sur le forum, à faire quand je mettrais sur le wikhan.

Une fois connecté, nous avons une interface en plusieurs parties.

Dans la colonne de gauche, « Datacenter » représente notre cluster et contient donc l'ensemble de nos machines physiques.

Réseau

Niveau réseau, Proxmox propose plusieurs choses.

Ici nous ne retiendront que le bridge. Il s'agit d'un switch logiciel, ça se comporte tout comme un vrai switch matériel, sauf que c'est adapté à la virtualisation (faut être sacrément balèze pour brancher un câble reliant un switch physique et une machine… virtuelle…). Un bridge se présente sous la forme d'une nouvelle interface réseau, ce qui est plutôt logique.

Proxmox utilise par défaut un bridge et non la véritable interface réseau. Ça donne quelque chose de ce genre :

root@test:~# ip a
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
    link/ether 08:00:27:83:69:33 brd ff:ff:ff:ff:ff:ff
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:83:69:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.11/24 brd 192.168.1.255 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 2a01:e0a:51e:4970:a00:27ff:fe83:6933/64 scope global dynamic mngtmpaddr
       valid_lft 86252sec preferred_lft 86252sec
    inet6 fe80::a00:27ff:fe83:6933/64 scope link
       valid_lft forever preferred_lft forever

Sur Proxmox, l'interface physique (enp0s3) semble ne pas être utilisée. En fait, elle est intimement liée au bridge (vmbr0) qui simule un switch et donc Proxmox est « branché sur le switch virtuel ».

Cette astuce permet de créer des VM et des conteneurs qui viendront eux-aussi se brancher sur ce bridge. Ainsi, sur le réseau physique, ces VM et conteneurs apparaîtront comme des machines physiques. Ça peut être super pratique dans certaines configurations.

Sauf que pour Khaganat, le réseau physique c'est l'internet. Dans un monde parfait, nous utiliserions uniquement IPv6 et serions donc parfaitement en mesure de puiser dans la plage qui nous aura été attribuée afin de donner une IP publique à chaque VM et conteneur. Malheureusement, l'IPv4 est encore bien présent et nous devons obligatoirement faire avec. Nous devons donc fonctionner autrement.

Dans l'exemple ci-dessous, il n'y a qu'une seule machine, nommée test. Sélectionnons-la et, dans le menu de la colonne d'à côté, allons dans « Système » puis « Réseau ». Cliquons sur « Créer » puis « Linux bridge » afin d'ajouter un nouveau switch virtuel (vmbr1 dans l'exemple ci-dessous). Dans la fenêtre qui s'ouvre, nous n'avons besoin que de préciser l'adresse IPv4 que l'on souhaite donner à notre hôte dans la notation CIDR. Pour cela, utilisons une plage d'adresses IP réservée aux réseaux locaux. Bref, de bons choix sont 10.0.0.1/8, 172.16.0.1/12 ou encore 192.168.0.1/16. Dans le cas présent, afin de bien différencier de mon réseau local physique (192.168.1.0/24), j'ai décidé d'utiliser le réseau local 10.0.0.0/24 et d'attribuer l'IP 10.0.0.1 à l'hôte.

Todo : récupérer les images sur le forum, à faire quand je mettrais sur le wikhan.

Notez que la modification des interfaces réseaux nécessite un redémarrage de la machine afin que ce soit pris en compte.

À ce stade, les conteneurs qui seront créés seront sur le réseau interne et ne peuvent donc pas recevoir de connexion de l'extérieur. C'est très gênant, surtout pour SSH.

Redirection des IP (IP forwarding)

sysctl net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' >/etc/sysctl.d/30-ipforward.conf

Configuration de iptable

Pour un test

Vous pouvez utiliser ce script. Il ne permet pas de conserver la configuration d'iptables après un redémarrage et la redirection est écrite en dur, ne l'utilisez pas en prod, c'est juste pour les tests.

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=vmbr0
PORT_IN=2222

IP_OUT=10.0.0.42
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE

Il redirige les connexions TCP entrantes sur le port 2222 vers le port 22 du conteneur dont l'adresse est 10.0.0.42.

En prod

Si ce n'est pas encore fait, installons le paquet iptables-persistent :

apt install iptables-persistent

Désormais, nous écrirons nos règles iptables dans le fichier /etc/iptables/rules.v4 pour l'IPv4 et le fichier /etc/iptables/rules.v6 pour l'IPv6. Non, pas à la main, mais grâce aux commandes iptables.

Todo : quelles commandes ? reprendre tuto de xen, c'est la même logique.

Une fois que tout est bon, on sauvegarde :

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

Internet depuis les VM/conteneurs

Les VM/conteneurs peuvent recevoir du trafic extérieur mais n'ont pas accès à internet et ne peuvent donc pas télécharger des mises à jour.

Dans la configuration réseau des VM/conteneurs, il faut indiquer l'hôte Proxmox comme passerelle.

Todo : image.

Pensez à redémarrer les VM/conteneur après avoir changé la configuration réseau depuis Proxmox.

Ceci fait, il ne reste plus qu'à configurer notre hôte Proxmox pour que ce dernier accepte de rediriger le trafic qu'il reçoit sur vmbr1 (le bridge des VM/conteneurs) vers vmbr0 (le bridge relié à internet).

iptables -t nat -A POSTROUTING -o vmbr0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i vmbr1 -o vmbr0 -j ACCEPT

Pensez à sauvegarder ces règles iptables aussi :

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

Ajouter un conteneur

Préciser la nuance entre container/VM, avantages et contraintes, etc.

Merlin8282 : Une VM c'est comme une machine physique : tout est émulé. Un container, ça se rapproche beaucoup plus d'un chroot : tu utilises notamment le noyau du système hôte. Dans une VM tu peux installer windows (ou HaikuOS, ou ReactOS, ou un BSD, ou…) alors que dans un container tu ne peux installer qu'un linux.

Avant de pouvoir créer un nouveau conteneur, nous avons quelques opérations à effectuer. La première est, au niveau du cluster (donc en sélectionnant « Datacenter » si vous avez bien suivi !), de créer un nouveau « pool » de permissions. Dans notre cas il suffit juste d'en ajouter un sans se poser de questions.

Todo : récupérer les images sur le forum, à faire quand je mettrais sur le wikhan.

Ensuite, au niveau du stockage local de notre hôte, il nous faut télécharger au moins un « template ». Ce que Proxmox appelle ainsi sont en réalité les images de base des conteneurs. À cause de leurs spécificités, les conteneurs ne peuvent pas se créer comme ça juste à partir d'une image ISO. C'est un peu plus complexe. Nous avons la possibilité de télécharger les images de base officielles pour de nombreux systèmes, donc ce n'est pas si contraignant. En plus de ces images système, on trouve aussi des « turnkey », donc des solutions clé-en-main proposant divers logiciels pré-installés.

Todo : image.

Une fois les images que nous souhaitons téléchargées ou téléversées (puisqu'on peut quand-même en faire aussi soi-même), nous pouvons enfin utiliser le joli bouton « Créer CT » tout en haut à droite afin de créer un nouveau conteneur. L'interface de création est très simple. Tous les champs ne sont pas obligatoires. Je m'attarderais juste sur la configuration réseau : il convient de bien penser à sélectionner le bridge que nous avons précédemment créé et d'indiquer une IPv4 fixe en accord avec le réseau :

Todo : image.

En résumé : Nœud > Stockage > Contenu > Template pour les CT ou Upload pour les VM.

Une fois le conteneur créé, nous pouvons aller le démarrer et en profiter pour regarder ses options. Par exemple, il est utile d'activer le démarrage automatique lors du boot de l'hôte, ce qui n'est pas le cas par défaut.

Todo : image.

Si nous créons ainsi plusieurs conteneurs, nous pouvons y ouvrir une console et vérifier leur configuration réseau. L'adresse IP est bonne et ils peuvent communiquer entre eux, le succès est au rendez-vous !

Todo : image.

À ce stade, notre conteneur est sur son réseau interne et ne peut donc pas recevoir de connexion de l'extérieur. C'est très gênant, surtout pour SSH. Tout comme actuellement, il nous faut ouvrir une console sur l'hôte et configurer iptables. Pour ma part, j'ai utilisé le script suivant :

Todo : la solution plus bas pour un truc durable

Snapshots et sauvegardes

Oui, il y a des snaptshots. Et même mieux encore : plusieurs types de snapshots différents. Et un système de sauvegardes régulières automatiques.

De plus, les sauvegardes étant stockées sur un « stockage » au sens Proxmox du terme, il est possible de profiter nativement de tous les backends supportés (et compatibles, chaque type de stockage ne pouvant accueillir que certains types de données).

Liens :

Dépannage en chroot de Proxmox

Si vous avez tout cassé, redémarrez votre serveur via l'interface de l'hébergeur avec le mode rescue.

Rescue ubuntu de online.net

sudo lvm lvchange -ay /dev/system-uferv/root 
sudo mount /dev/system-uferv/root /mnt/
sudo chroot /mnt/
nano /etc/network/interfaces
exit
sudo umount /mnt/
exit

Liens utiles et crédits

Ce tuto a été écrit grâce à de la doc préalablement faite par Tycho et Deed, que j'ai mis en forme.
zatalyz 2020/04/02 11:31
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/proxmox.1585827286.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact