Créer son propre cloud : installer proxmox et une première VM connectée au net sur un serveur kimsuffi

A priori ce tutoriel est valable pour n’importe quel serveur (kimsuffi ou autre) du moment que vous pouvez intaller proxmox VE6 dessus, et pour du proxmox 5 il ne devrait pas y avoir beaucoup de différences

En ce moment je travaille pour deux projets différents, une startup qui a besoin d’un site web, tout ce qu’il y a de plus basique, et pour moi, je souhaite avoir mon propre cloud pour pouvoir tester rapidement des applications auto-hébergées. Dans les deux cas j’ai besoin d’avoir une architecture évolutive. Quand je teste des applications je veux pouvoir créer une VM temporaire, et pour héberger un site web la, des VMs on en a besoin pour tout un tas de choses quand on développe. J’ai besoin d’une solution pour pouvoir installer des VMs sur un serveur distant. Il existe plein de solutions (Xen server, VMWare ESXi, et d’autres … j’avais déjà utilisé vSphere par le passé avec un client en flash ! lol). J’ai choisi proxmox VE 6 (PVE6), gratuit, open source, basé sur KVM et disposant de plein de fonctionnalités interressantes : cluster, snapshot, migration live, interface de gestion web, CLI, et plein d’autres choses (comme Ceph que je ne connais pas encore mais que je vais bientôt étudier).

Kimsuffi, ce sont des serveurs OVH un peu datés avec une interface de gestion minimaliste. En gros vous pouvez installer une distribution dessus et c’est à peu près tout. C’est parfait pour moi, ils proposent PVE6 justement. Je lance, je reçois le mot de passe root et en avant. Il n’y a aucune configuration à faire, je me loggue sur Proxmox et j’arrive sur l’interface de gestion :

Parfait. Maitenant pour créer sa première VM c’est la que les problèmes commencent. D’abord, il me demande un ISO, mais la liste est vide !! Après quelques recherches, je trouve, il faut la télécharger soi même en ligne de commande (Boutton « Shell »). Je prends la dernière LTS ubuntu server :

cd /var/lib/vz/template/iso; wget http://releases.ubuntu.com/18.04/ubuntu-18.04.3-live-server-amd64.iso

Je vous invites à faire un upgrade en passant de proxmox. Kimsuffi installe la v6.0 mais la v6.1 apporte des choses intéressantes, notamment le rechargement de la conf réseau.

apt update; apt upgrade

Maintenant je peux créer ma VM :

Le reste du wizard est simplissime, j’ai mis 2 coeurs, 2Go de RAM, 32Go de disque. Par contre la partie réseau, c’est la que ça s’est compliqué !! Première tentative ma VM s’installe correctement mais je n’ai pas d’accès au réseau. Ouch ! Et configurer un réseau sous linux ce n’est pas ma tasse thé. J’ai galéré. Je suis habitué sous Virtual Box à faire du NAT ou un Bridge avec mes VM et basta. Proxmox propose les même choses mais …

J’ai passé 2 jours entiers à chercher sur les forums et à tester des configurations. Le problème c’est que si vous mettez en l’air le réseau d’un serveur distant … et ben vous êtes bon pour le ré-installer from scratch.

Il y a plusieurs possibilités, installer une VM avec DHCP, utiliser « cloud init » mais le problème c’est que si je n’arrive pas à faire le truc le plus simple, je me vois mal m’engager dans des manoeuvres beaucoup plus compliquées. La plupart des tutos font des suppositions sur votre architecture et les choses évoluent vite (et malheureusement ça sera un peu pareil avec le mien). Bref, voici la solution que j’ai trouvée et qui corresponds à ce qu’on a dans le manuel proxmox. Je vous l’aie condensée en une seule ligne de commande :

cat >> /etc/network/interfaces <<EOF

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

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
EOF

Et voila !

Ha non, n’oubliez pas de rebooter proxmox, sinon il ne prendra pas en compte votre nouvelle interface réseau.

On rajouter un réseau NAT « vmbr1 » qui utilises le réseau pré-configuré vmbr0 par défaut (ça peut être différent dans votre configuration) et ensuite il faut configurer la VM en manuel pour utiliser ce réseau. Le sous-réseau 192.168.1.0/24 sera utilisé (c’est à dire toutes les adresses entre 0 et 254). Les règles iptable servent à transférer de vmbr1 à vmbr0.

Par défaut dans mon fichier de configuration des interfaces j’ai ceci (et on n’y touche pas, il y a plein de tutos qui démarrent avec des IP statiques dans cette partie) :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

iface enp1s0 inet manual

auto vmbr0
iface vmbr0 inet dhcp
  bridge-ports enp1s0
  bridge-stp off
  bridge-fd 0

D’abord à la création de la VM pensez bien à mettre vmbr1 :

Ensuite, lors de la configuration d’ubuntu server, il va falloir mettre les bon paramètres (je passe les étapes bidons de choix de la langue) :

Continuer sans le réseau ? ha ben non, pas question, je fais quoi de mon ubuntu server si je n’ai pas le réseau ? Proxmox fournit un accès VNC, soit, mais je ne vais pas aller bien loin avec ça. Donc … à ce stade ma seule solution c’est la configuration manuelle :

C’est la qu’il faut un minimum de connaissance réseaux pour remplir ces cases :

  • subnet: c’est le masque de sous-réseau, ça indique les adresses réseau autorisées
  • address: c’est l’IP de la nouvelle machine dans ce sous-réseau
  • gateway : la gateway c’est un peu comme votre box internet, c’est elle qui fait le routage des requettes internet. Au début je pensais qu’il fallait que je prenne cette de proxmox (donc celle de kimsuffi) avant que je ne réalise que la gateway c’est « proxmox » lui même, c’est à dire 192.168.1.1, l’adresse virtuelle que j’ai définie dans la conf réseau de proxmox.
  • name server : on met généralement l’IP du serveur de google

A partir de la on fini le wizard d’installation d’ubuntu server (moi j’installe sur tout le disque avec les options par défaut). On se retrouve avec un fichier netplan comme suit (/etc/netplan/50-cloud-init.yaml) sur la VM, qui reprends la configuration qu’on a entré à la main. A la rigueur vous pourriez installer ubuntu sans réseau et le rajouter après coup en modifiant le fichier :


network:
	ethernets:
		ens18:
			addresses:
			- 192.168.1.2/24
			gateway4: 192.168.1.1
			nameservers:
				addresses:
				- 8.8.8.8
	version: 2

La, vous avez une machine qui peut se connecter au net, faire ses updates, toussa toussa. Super, mais … est-ce que le net peut communiquer avec votre machine pour autant ? Non car vous êtes en NAT, c’est un réseau privé. Donc si vous installez (comme moi) un site dessus, internet ne pourra pas le voir.

Il faut donc modifier la table de routage pour que le traffic entrant des ports 80 et 443 (les ports généralements utilisés pour server un site web) soit redirigé vers la nouvelle VM. Et pour ça il faut encore aller modifier l’interface réseau de proxmox en rajoutant ces lignes dans vmbr1 :

	post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
	post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80
	post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.1.2:443
	post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to 192.168.1.2:443

Cette fois on reboote proxmox et on est bon. Pour tester rapidement si votre serveur réponds bien, petite astuce, utilisé python :

python -m SimpleHTTPServer 80

Si ça réponds sur l’IP ou le nom de domaine de votre serveur, c’est que la configuration de votre VM est correcte et que vous pouvez passer à la suite !

Etape par étape.

Les prochaines fois je prévoies justement d’installer un DHCP ou un « cloud init » parce que devoir modifier la configuration du réseau et rebooter à chaque nouvelle VM ça va vite devenir ennuyeux. Mais, je compte surtout faire un article bientôt sur « rancher », pour faire du SaaS, c’est dire installer des applications web en self hosted très rapidement.

Pour terminer quelques lignes de commande très utiles pour debugger quand ça ne marche pas, parce que oui, quand je lis les tutos personne n’explique jamais quoi faire si leur tuto ne s’adapte pas bien :

Pour tester si votre machine à accès à internet et si un carte réseau fonctionne:

ping -I vmbr0 www.google.fr

Pour avoir votre table de routage (et la gateway actuelle) :

route -n

Si vous modifié (sous ubuntu server) la configuration réseau, pour le redémarrer :

sudo netplan apply

Ce n’est pas grand chose mais quand on ne connait pas (comme moi) c’est bien pratique.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *