Table des matières
Machines virtuelles
Présentation générale
Notre infrastructure de VM est basée sur Ganeti, c'est un outil de gestion de machines virtuelles qui sont réunies au sein d'un cluster (une ou plusieurs machines physiques).
Le cluster Ganeti est composé de noeuds (ce sont des ordinateurs physiques avec un hyperviseur (Xen ou Kvm) installé dessus). Les VM sont crées sur le cluster. Une VM tourne sur un des noeuds du cluster.
Il est possible de déplacer une VM d'un noeud du cluster à un autre tout en la laissant tourner.
Dans un cluster, un noeud est élu Master. Lorsque l'on doit discuter avec le cluster, il faut se connecter à la machine maître, pour le moment il s'agit de Mutine. Ce master est l'unique noeud sur lequel des commandes gnt-* peuvent être exécutées. Si on utilise ces commandes sur les autres noeuds, Ganeti nous invite à nous connecter sur le master :)
____ |====| | | 89.234.176.129/28 __mutine__ __fresk___ vm | |<-----------------------[_...__...°]<-----------------------[_...__...°] 89.234.176.1/28 |____| /89.234.176.2/28 10.10.30.0/32 | ____ / | |====| / | | | 89.234.176.13O/28 / | vm | |<-------------------/ | |____| | ____ | service vm : 89.234.176.128/27 |====| 89.234.176.131/28 ____dh____ 10.10.30.0/32 __camber__ | |<-----------------------[_...__...°]<-----------------------[_...__...°] vm | | /89.234.176.3/28 |____| / ____ / |====| / | | 89.234.176.132/28 / vm | |<------------------/ |____|
Procédure de création de VM
Procédure pour l'utilisateur
Les étapes qui suivent sont à réaliser par l'utilisateur qui fait la demande de création d'une machine virtuelle (VM).
Demander la création de sa VM
Vous commencez par envoyer une demande de création de VM sur bureau@ en joignant une clé SSH publique.
Si vous êtes bien adhérent le bureau@ transmettra votre demande aux administrateurs de FAImaison. Un administrateur vous communiquera les informations suivantes :
$REF_ABO
la référence de votre abonnement (p. exREF-HOST-VM-42
)$IP_VM
: l'adresse IP de votre VM (p. ex89.234.176.130
)$NOM_VM
: le nom de votre VM (p. ex.REF-HOST-VM-42.faimaison.net
)$HYP
: le nom ou l'adresse IP de l'hyperviseur de votre VM (p. ex89.234.176.131
oumutine.faimaison.net
)$VNC_PORT
:: le port VNC de votre VM (p. ex11666
)
Une fois ces informations reçues, vous êtes prêt à installer votre VM.
Installer et configurer sa VM
Pour accéder à votre VM, vous devez établir un pont SSH entre votre ordinateur et votre VM puis utiliser le protocole VNC.
- Ouvrer un terminal
- Lancer la commande suivante, en remplacant les variables
$HYP
et$VNC_PORT
par les valeurs transmises par l'adminsysssh -N -L $VNC_PORT:localhost:$VNC_PORT $HYP
- Lancer le client VNC de votre choix avec en serveur
localhost
et en port$VNC_PORT
.
Si tout se passe bien, vous devriez maintenant vois l'écran d'installation de votre VM (une debian).
Vous pouvez maintenant procéder à l'installation de votre VM. Le client Vinagre , inclus sur Debian et Ubuntu fonctionne très bien. Petites astuces :
- Pour la configuration IP, il n'y a pas de serveur DHCP, il faut donc configurer manuellement : utiliser l'IP et le masque (le /quelque-chose) choisit.
- Pour la gateway, garder la valeur par défaut.
- Pour les serveurs DNS, vous pouvez utiliser ceux de LDN et FDN (80.67.188.188, 80.67.169.12) https://www.faimaison.net/category/actualites2.html#methode-1-ignorer-les-mensonges-de-son-fai
- Si vous chiffrez votre disque (FDE), il est conseillé de mettre une passphrase simple dans une premier temps, puis de la changer une fois que dropbear est installé. En effet, si vous devez déchiffrer votre machine via VNC, sachez que le support du clavier est loin d'être parfait : vous serez peut-être en qwerty, et la touche
Alt Gr
ne fonctionnera peut-être pas. En attendant mieux…
Redémarrage de votre VM
Maintenant que votre VM est correctement installée, vous devez envoyer un mail à adminsys@
en précisant votre $REF_ABO
pour demander à ce que l'on configure votre VM pour qu'elle démarre sur votre disque au lieu de l'ISO d'installation.
Finalisation et accès SSH à votre VM
Une fois que l'adminsys a configuré votre VM pour qu'elle boot sur votre disque et l'a redémarré, vous pouvez vous y connecter de la même façon que pour l'installation (via ssh+VNC).
Comme ce n'est pas très pratique de se connecter par VNC en permanence, nous allons maintenant configurer votre VM pour que vous puissiez y accéder par SSH uniquement.
- Installer le paquet
openssh-server
sur votre VM. - Si besoin, générer une clé SSH avec la commande suivante :
ssh-keygen -f ~/.ssh/$REF_ABO
- Copier votre clé SSH sur votre serveur à l'aide de la commande suivante :
ssh-copy-id -i ~/.ssh/$REF_ABO $REF_ABO@$IP_VM
- Vous pouvez maintenant vous connecter à votre VM avec la commande :
ssh -i ~/.ssh/votre_cle_ssh $REF_ABO@$IP_VM
Si la connexion fonctionne correctement vous pouvez rajouter la configuration suivante au fichier ~/.ssh/config
(s'il n'existe pas, crée le).
Host ma-vm Hostname $IP_VM Username $REF_ABO Port 22 IdentifyFile ~/.ssh/$REF_ABO
Les étapes suivantes sont optionnelles mais sont des mesures de sécurité recommandées :
Désactiver l'authentification par phrase de passe
Sur votre VM, éditez le fichier /etc/ssh/sshd_config
(vous devez être root
), chercher les options PasswordAuthentication
et PermitEmptyPasswords
et les désactiver.
Le fichier doit maintenant contenir les lignes suivantes :
PasswordAuthentication no PermitEmptyPasswords no
Protection contre les attaques de type bruteforce
Installer fail2ban
pour bloquer des attaques de type bruteforce.
apt install fail2ban
Conclusion
Et voilà, vous pouvez maintenant accéder à votre VM en SSH et n'avez plus besoin de l'accès par VNC. Cet accès reste présent et vous pourrez l'utiliser pour débugger votre machine si vous cassez quelque chose :)
Procédure pour le bureau
Lorsqu'une demande de VM arrive sur la liste bureau@ il faut :
- vérifier que la personne est adhérente, sinon, lui proposer d'adhérer à l'association avant de procéder à la suite
- vérifier que l'adhérent à joint une clé SSH publique, sinon lui demander de le faire
- créer un abonnement de type VM dans COIN lié au compte de l'adhérent
- demander la création d'une VM aux adminsys en leurs transmettant :
- la référence COIN de l'abonnement
- la clé SSH de l'adhérent
- l'email de l'adhérent
- Une fois qu'un adminsys à confirmé la création de la VM, il faut transmettre à l'adhérent :
- le RIB de FAImaison
- l'url + identifiants sur https://transparence.faimaison.net
- la référence de son abonnement
Procédure pour les adminsys
Quand le bureau@ transmet une demande de création de VM avec les informations suivantes :
- référence COIN de l'adhérent ($
REF_ABO
pour la suite) - la clé SSH publique de l'adhérent
- le mail de l'adhérent
NB: Toutes les commandes ganeti sont a exécutées sur l'hyperviseur maître (mutine.faimaison.net
).
Sélectionner l'IP et l'hyperviseur pour la VM
- Sélectionner une ip (
$IP_VM
pour la suite) de disponible dans le sous-réseau dédié aux VM et mettre à jour la page du wiki adressage - Ajouter un nouvel enregistrement A pour faire pointer le nom de la VM vers l'IP.
$REF_ABO.faimaison.net A $IP
- Choisir l'hyperviseur pour la VM avec le moins de VM pour équilibrer la charge:
gnt-instance list --no-headers | sort -k 4
Création de la VM
Créer la VM sur l'hyperviseur choisi ($PRIMARY_NODE
pour la suite, l'autre hyperviseur étant $SECONDARY_NODE)
gnt-instance add -s 10G --net 0:ip=$IP_VM,mode=routed,mac=generate -o debootstrap+default --node $PRIMARY_NODE:$SECONDARY_NODE $REF_ABO.faimaison.net
Créer le compte de l'adhérent pour l'accès VNC
- Récupérer le port VNC (
$VNC_PORT
pour la suite) de la VM :gnt-instance list -o +network_port $REF_ABO
- Créer un compte utilisateur sur les deux hyperviseurs :
adduser --gecos '' --gid `getent group ref-host-vm | cut -d: -f3` --disabled-password --shell /bin/false $REF_ABO
- Ajouter dans la configuration sshd sur les deux hyperviseurs
Match User $REF_ABO Banner /home/$REF_ABO/banner PermitOpen localhost:$VNC_PORT Match all # end Match group block
- Copier la clé SSH de l'utilisateur sur les deux hyperviseurs dans
/home/$REF_ABO/.ssh/authorized_keys
- Créer sur les deux hyperviseurs un fichier
/home/$REF_ABO/banner
contenant :
Hyperviseur hébergeant votre VM : $PRIMARY_NODE Port VNC pour accéder à votre VM : $VNC_PORT Utilisez la commande suivante pour créer un tunnel entre votre ordinateur et le port VNC de votre VM avec la commande : ssh -N -L $VNC_PORT:localhost:$VNC_PORT $PRIMARY_NODE Configurez votre client VNC pour qu'il se connecte sur l'hôte (/host/) localhost et sur le port $VNC_PORT. Par exemple : vncviewer localhost:$VNC_PORT
- Recharger la configuration de SSHD (en vérifiant la conf avant) :
sshd -t && systemctl reload ssh
Prévenir l'adhérent
Prévenir l'adhérent que la VM est prête à être installer et lui donner les informations suivantes :
$PRIMARY_NODE
: l'hyerviseur sur lequel tourne sa VM$VNC_PORT
: le port VNC pour accéder à sa VM$IP_VM
: l'IP de sa VM$REF_ABO.faimaison.net
: l'enregistrement DNS FAImaison de sa VM
Faire booter la VM sur le disque
Quand l'adhérent aura terminé son installation, il faudra redémarrer sa VM en changeant l'ordre de boot pour qu'elle boot sur le disque plutôt que l'ISO.
- On éteind la VM :
gnt-instance shutdown $REF-ABO
- On modifie l'option de démarrage
gnt-instance modify -H boot_order=disk $REF_ABO
- On relance la VM
gnt-instance startup $REF_ABO
Autres opérations
Migration de VM entre les hyperviseurs
La migration d'une VM d'un hyperviseur à l'autre se fait de la façon suivante :
- Migrer la VM sur un hyperviseur (identifié par
$NEW_NODE
) :gnt-instance migrate -n $NEW_NODE
- Si la VM migrée est la VM d'un adhérent, c'est à dire que la VM est nommée
REF-HOST-VM-XX
, il faut mettre à jour le$PRIMARY_NODE
dans/home/ref-host-vm-xx/banner
.
Configuration des hyperviseurs
Pour configurer les hyperviseurs :
- Créer le groupe
ref-host-vm
:addgroup ref-host-vm
- Rajouter sur les deux hyperviseurs et à la fin du fichier
/etc/ssh/sshd_config
:
Match group ref-host-vm AllowAgentForwarding no AllowStreamLocalForwarding no X11Forwarding no PermitTTY no PermitTunnel no PermitUserRC no PermitOpen none Match all # end Match group block