Table des matières

Proxmox

Proxmox Virtual Environment est une solution de virtualisation libre (licence AGPLv3) basée sur l'hyperviseur Linux QemuKVM, et offre aussi une solution de containers basée sur 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).

Supervision dans Proxmox

Installation

Lorsque vous louez un serveur dédié, il est probable que votre hébergeur vous laisse le choix de la distribution. Si Proxmox fait partit de ces choix (par exemple chez Scaleway), cette option est la plus simple.

Si vous faites des tests chez vous, vous devez télécharger l'image ISO et installer Proxmox comme n'importe quelle autre distribution. Cette méthode fonctionne également sur les serveurs distants disposant d'un accès KVM sur IP ou similaire.

Si et seulement si aucune de ces méthodes ne fonctionne, vous pouvez transformer une installation Debian Buster en Proxmox.

Certificat pour dépanner

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

Cela permet quand même d'avoir simplement une connexion sécurisée à l'interface d'administration de proxmox.

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 :

Sélection de la langue avant le login

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.

Choisir l'interface réseau

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.

Choisir l'interface réseau

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.

Le pool, les utilisatrices et leurs droits

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.

Datacenter > Permissions > Pools et cliquez sur Créer. Donnez un nom, mettez un commentaire, et c'est bon.

Pool de permission

On va profiter pour créer de quoi gérer nos utilisatrices. Ce n'est pas utile quand il n'y a qu'une seule personne qui a le droit d'administrer, par contre ça devrait simplifier des choses à plusieurs

Datacenter > Permissions > Groupe et créer. Ici on va faire simple, c'est pour notre groupe de supersysadmin (qui ont accès à tout). La création de groupe consiste juste à choisir un nom et un commentaire (mais ça va servir après).

Ensuite on créé au moins une utilisatrice (en plus de notre “root”).

Datacenter > Permissions > Utilisateurs et cliquez sur Ajouter. Donnez un nom, mettez le dans le “Realm : Linux Pam standard authentification”, et dans le groupe précédemment créé. Le reste est assez secondaire.

Puis on va ensuite sur la gestion du pooln dans la partie permissions. On ajoute notre groupe, on lui donne les permissions “Administrator” (ça permet de tout faire) et on valide.

Ces manips sont du test, mais je le note au fur et à mesure quand même. Ça doit pouvoir s'affiner.

Voir aussi https://pve.proxmox.com/wiki/User_Management pour les détails, entre autre des permissions et rôles.

Stockage local

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.

Image à sélectionner

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 : Ajout de container

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

Si vous voulez plus de détail sur la création de containers :

  • 1er onglet “Général” :
    • Le nom d'hôte permet d'identifier le container, par exemple “mon premier container” ou “proxy”
    • Choisissez le pool de ressource créé précédemment.
    • Choisissez votre clé ssh (la partie publique évidement) plutôt qu'un mot de passe pour bénéficier d'une connexion ssh fonctionnelle après le démarrage du container.
  • 2e onglet “Modèle”
    • Stockage : local
    • Modèle : choisissez le template précédemment choisi, par exemple “debian-9.0-standard”
  • 3e onglet “Disque Root”
    • Stockage : local
    • Taille du disque : choisissez assez grand pour vos besoins.
  • 4e onglet “CPU” :
    • Combien de cœurs votre VM peut utiliser ?
  • 5e Onglet “Mémoire”
    • Combien de ram et de swap ?
  • 6e onglet “Réseau”, comme décrit sur l'image ci-dessus
    • Tout laisser par défaut, en dehors
    • du pont (choisir vmbr1) et
    • de l'ipv4/CIDR. Le /24 à la fin permet de préciser le masque de sous-réseau, ne l'oubliez pas !
    • de la passerelle : indiquez l'ip donné à l'hôte (dans l'exemple ici, c'était 10.0.0.1
  • 7e onglet : DNS, laissez par défaut à moins de savoir ce que vous faites
  • 8e onglet : confirmation. Relisez les informations, cochez “Démarrer après création” puis validez.

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.

Redémarrer au reboot

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 !

Interface console des containers

Pour l'accès SSH, rajoutez une règle iptable sur le serveur. Par exemple pour la VM ayant l'ip interne 10.0.0.12, en choisissant le port 3512 :

iptables -t nat -I PREROUTING -p tcp --destination-port 3512 -j DNAT --to 10.0.0.12:22 

Pour se co en ssh (avec root d'office, pas moyen de gérer un user), il faut avoir donné sa clé publique lors de la création, sinon c'est “par mot de passe” et le ssh est suffisamment bien configuré pour vous interdire de passer par root/mot de passe ; il faudrait donc passer par la console de l'interface web dans ce cas de figure. Chez moi, ouvrir avec la console “xterm.js” marche mieux que de passer par la console par défaut de l'interface web de proxmox.

Voir aussi la commande pct console <vmid> [OPTIONS] (cf doc https://pve.proxmox.com/pve-docs/pct.1.html) pur se passer de l'interface web, si on a oublié sa clé ssh.

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 en LVM

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

Installation alternative depuis Debian

Une méthode alternative d’installation de Proxmox est de transformer une installation Debian Buster en Proxmox.

Ce chapitre n'est utile QUE si :

  • vous êtes chez un hébergeur qui ne propose pas Proxmox dans son choix de distribution
  • ET que vous ne pouvez pas installer via une iso
  • ET que vous avez de mettre Debian Buster sur votre machine

Mais si jamais vous souhaitez l'installer 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
reboot

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/24
      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/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

Proxmox utilise systemd-timesyncd:

sudo apt purge openntpd
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
sudo systemctl status systemd-timesyncd

spoil

Choix du format: Rollniak a choisi ZFS

zpool create nom_de_la_partition /dev/sda*

Pour créer une template:

vzdump <vmid ou ctid> --mode stop --compress gzip --dumpdir /tmp