[ howto ] Installation de proxmox en debootstrap avec disques chiffrés en raid MDADM (partie 3/2 - variante finale)

Rédigé par NaïLyK Aucun commentaire
Classé dans : howto, devuan, self-hosting Mots clés : aucun

Suite de [ howto ] Installation d'un serveur dédié (partie 2 chiffrement des disques)

Reprise des deux articles précédents, avec de petites variations, pour l'installation de Proxmox.

Partitionnement des disques :

Préparation des disques :

Pour préparer le raid, j'ai choisi de faire des partitions pour m'assurer qu'il n'y aura pas de problèmes avec grub.
En effet, utiliser les disques physiques tel quel est tout à fait possible pour faire un RAID avec MDADM. Mais tous les espaces nécessaires à GRUB, aux tables des partitions, etc. ne sera pas disponible.
Étant donné que, ici, je mets tout en RAID (y compris /boot) il n'est pas possible d'utiliser directement les disques physiques.

parted /dev/sda

mklabel gpt
mkpart primary xxxxxxx
mkpart primary xxxxxxx
mkpart primary xxxxxxx
set 1 boot off
set 1 bios_grub on
quit

A faire x4 dans mon cas.

ℹ️ P.S.: Après avoir galéré presque toute la journée à essayer de faire démarrer cette 🤬 de machine avec les disques en GPT, il semblerait que cette machine n'autorise pas le démarrage en 'legacy' (aka BIOS). La solution a étée de créer une partition EFI. Il faut que le filesystem de la partition /boot/efi soit en fat et le flag soit 'bios_grub'

 

Création de la grappe RAID :

mdadm --create /dev/md0 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3 --level=5 --raid-devices=4  --assume-clean --verbose

J'utilise l'argument 'assume-clean' qui est déconseillé (je n'ai pas cherché pourquoi) pour gagner du temps et ne pas attendre que toute la grappe soit calculée avant de pouvoir avancer.

⚠️ Attention: Avec 'assume-clean' le re-calcul de la grappe va démarrer à un moment donné qui n'est pas contrôlé.

 

Partitionnement

Une fois la grappe créée, création des partitions :

Ce coup-ci, avec fdisk pour me faciliter la vie à ne pas faire les alignements à la main

fdisk /dev/md0

Command (m for help): g

Created a new GPT disklabel (GUID: 720EC671-7449-F54C-9006-828CC1A602C5).

Command (m for help): n
Partition number (1-128, default 1): 1
First sector (3072-23441307614, default 3072): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (3072-23441307614, default 23441307614): +40G

Created a new partition 1 of type 'Linux filesystem' and of size 40 GiB.

Command (m for help): n
Partition number (2-128, default 2): 
First sector (84937728-23441307614, default 84937728): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (84937728-23441307614, default 23441307614): 

Created a new partition 2 of type 'Linux filesystem' and of size 10.9 TiB.

Command (m for help): p
Disk /dev/md0: 10.9 TiB, 12001949515776 bytes, 23441307648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1572864 bytes
Disklabel type: gpt
Disk identifier: 720EC671-7449-F54C-9006-828CC1A602C5

Device        Start         End     Sectors   Size Type
/dev/md0p1     3072    84937727    83887104    40G Linux filesystem
/dev/md0p2 84937728 23441307614 23356369887  10.9T Linux filesystem

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

 

C'est déjà pas mal sexy :

root@rescue-customer-eu (ns3136381.ip-51-77-118.eu) ~ # lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda           8:0    0  3.6T  0 disk  
|-sda1        8:1    0  256M  0 part  /boot/efi
|-sda2        8:2    0  512M  0 part  /boot
`-sda3        8:3    0  3.6T  0 part  
  `-md0       9:0    0 10.9T  0 raid5
    |-md0p1 259:0    0   40G  0 part  /
    `-md0p2 259:1    0 10.9T  0 part  
sdb           8:16   0  3.6T  0 disk  
`-sdb3        8:19   0  3.6T  0 part  
  `-md0       9:0    0 10.9T  0 raid5
    |-md0p1 259:0    0   40G  0 part  /
    `-md0p2 259:1    0 10.9T  0 part  
sdc           8:32   0  3.6T  0 disk  
`-sdc3        8:35   0  3.6T  0 part  
  `-md0       9:0    0 10.9T  0 raid5
    |-md0p1 259:0    0   40G  0 part  /
    `-md0p2 259:1    0 10.9T  0 part  
sdd           8:48   0  3.6T  0 disk  
`-sdd3        8:51   0  3.6T  0 part  
  `-md0       9:0    0 10.9T  0 raid5
    |-md0p1 259:0    0   40G  0 part  /
    `-md0p2 259:1    0 10.9T  0 part  

:)

Formatage de la partition root :

mkfs.ext4 /dev/md0p1

La partition chiffréé et le LVM seront créés une fois le rescue quitté. Sait on jamais ;)

 

Installation de Débian

D'ici, il suffit de se référer au [ howto ] (partie 1) pour le debootstrap de Debian (!) et non Devuan pour Proxmox !

apt install debootstrap
export MY_CHROOT=/target
mkdir -p $MY_CHROOT
mount /dev/md0p2  $MY_CHROOT
mkdir $MY_CHROOT/boot
mount /dev/md0p1 $MY_CHROOT/boot
PKG="login,passwd,less,vim,netbase,wget,cpio,e2fsprogs,dpkg,apt,apt-utils,openssh-server,grub2,mdadm,cryptsetup,linux-image-amd64,bash,zsh,bash-completion,sudo,net-tools,inetutils-ping,iproute2,ifupdown,rsyslog,logrotate,cron,systemd"
LC_ALL=C debootstrap --arch amd64 --include=$PKG --variant=minbase bullseye  $MY_CHROOT https://deb.debian.org/debian/

A part cette déviation, le reste est exactement le même.

❗ Attention à rajouter 'systemd' dans la liste. Bah oui, c'est l'init par defaut mais il ne fait pas partie du package minimal....

Mon seul problème dans ce setup était le nom de l'interface réseau. Dans le rescue, c'est à base de `ethXX` alors que pour Debian c'est `enp0truc`.

 

Une fois le debootstrap fini et la machine redémarrée sur Debian, il faut mettre proxmox

Installation de Proxmox

ℹ️ Documentation officielle : https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_11_Bullseye

Configuration réseau

Comme il est hors de question que mon Proxmox soit accessible depuis internet, la solution que j'emploie est d'utiliser une adresse IP locale.
Soit je prévois de connecter au VPN et donc j'attribue une adresse dans ce sous-réseau, soit juste une adresse locale et la connexion se fera avec une redirection de port SSH.

Comment ? Proxmox cherche une entrée avec le nom de la machine dans le fichier host et se met en écoute sur celle-ci. Il est donc important (c'est marqué dans la doc ci-dessus) que l'unique entrée contenant le hostname (dans le fichier host) soit l’adresse IP sur laquelle Proxmox va écouter.

% cat /etc/hosts
127.0.0.1       localhost
10.10.0.1       superhostname

::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

/etc/network/interfaces*

💡 Les interfaces configurées dans /etc/network/interfaces.d/* n'apparaitront pas dans la webUI de Proxmox

/etc/network/interfaces.d/internet

Dans l'idée où plusieurs adresses IP publiques seraient utilisées, il est indispensable de créer un bridge afin de connecter toutes les VMs avec une IP Publique sur l'interface de l'hyperviseur.
Dans le cas où une seule IP Publique est nécessaire, cela n'est pas indispensable, mais ne peut pas créer de problème (si ce n'est un peu plus de complexité), et permet de rester flexible.

⚠️ Tout d'abord, il est important d'avoir le paquet `bridge-utils` d'installé.

% cat /etc/network/interfaces.d/internet
###################### Physical
# LAN interface
auto enp0s31f6
iface enp0s31f6 inet manual
iface enp0s31f6 inet6 manual

################ INTERNET
auto vmbr999
iface vmbr999 inet static
  # Main IP address of the server
  address 123.124.125.126
  netmask 255.255.255.192
  # explicit host route to the gateway
  gateway 123.124.125.1
  pointopoint 123.124.125.1
# pre-up iptables-restore < /etc/iptables/up.rules
  post-up ip route add 123.124.125.1/32 dev vmbr999
  bridge-ports enp0s31f6
  bridge-stp off
  bridge-fd 0
  bridge_hw 90:1b:0e:f7:14:c6
##### We do NOT want ipv6 on the hypervisor !
  accept_ra 0
  autoconf 0
iface vmbr999 inet6 static
⚠️ Il est absolument nécessaire d'attribuer l'adresse MAC de la carte physique au bridge ! Sans cela, le switch de l’hébergeur va couper le port réseau ! 

/etc/network/interfaces

Il faut maintenant créer une interface avec l'adresse IP renseignée dans le fichier hosts (celle sur laquelle Proxmox va écouter).

J'ai fait le choix d'utiliser un bridge et de la rendre accessible à Proxmox pour être en mesure de la connecter à mon VPN interne et donc de connecter certaines VMs au VPN. (On en profite pour créer un bridge ou deux supplémentaires qui seront utilisés par les VMs)

% cat /etc/network/interfaces
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

iface enp0s31f6 inet manual
# /! NEVER TOUCH ! Configured in /etc/network/interfaces.d/internet

auto vmbr10
iface vmbr10 inet static
        address 10.10.0.1/24
        gateway 10.10.0.254
        bridge-ports none
        bridge-stp off
        bridge-fd 0

auto vmbr56
iface vmbr56 inet manual
        bridge-ports none
        bridge-stp off
        bridge-fd 0

 

Maintenant il suffit de suivre la procédure officielle :

sudo -i

echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
# verify
sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
7fb03ec8a1675723d2853b84aa4fdb49a46a3bb72b9951361488bfd19b29aab0a789a4f8c7406e71a69aabbc727c936d3549731c4659ffa1a08f44db8fdcebfa  /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg 

apt update && apt full-upgrade

apt install pve-kernel-5.19

reboot
########
sudo -i

apt install proxmox-ve postfix open-iscsi -y

apt remove linux-image-amd64 'linux-image-5.10*'

update-grub

 

Et voilà 🙂

Par mesure de sécurité, on crée un fichier de configuration pour filtrer les réseaux autorisés à accéder à l'interface Proxmox :

% cat /etc/default/pveproxy
LISTEN_IP="10.10.0.1"
ALLOW_FROM="10.0.0.0/24"
#DENY_FROM="all"
POLICY="deny"

(après, il faut redémarrer le service : sudo systemctl restart pveproxy.service)

Une petite redirection de ports :

ssh hyperviseur -L 1234:10.10.0.1.1:8006

et le tour est joué :

Ajouter un utilisateur

Pour pouvoir accéder à l'interface, il faut ajouter un utilisateur.

Ici, cela crée un groupe d'administration, dans lequel on va ajouter l'utilisateur nouvellement créé.
Comme l'utilisateur existera dans le realm 'Proxmox VE Authentication server', il ne faudra pas oublier de sélectionner la bonne entrée à la connexion.

sudo pveum group add admin -comment "System Administrators"
sudo pveum acl modify / -group admin -role Administrator
sudo pveum user add nailyk@pve
sudo pveum passwd nailyk@pve
sudo pveum user modify nailyk@pve -group admin

 

Ajouter le stockage

(J'ai changé de machine, et donc de setup en cours de route à cause de l'augmentation des prix. La configuration ci-dessous est donc différente de celle du partitionnement en haut de cet article)

C'est prêt 🥳

Écrire un commentaire

Quelle est le troisième caractère du mot wxcnae ?

Fil RSS des commentaires de cet article