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).
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 :
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.
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.
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.
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.
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 :
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.
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 !
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