Machines virtuelles en NAT sur le RPN de dedibox Online

wpid1753-201209_visite_datacenter_iliad_salle_4.pngDepuis quelques temps, Online a mis en place, au sein du datacenter DC3 un réseau privé RPN qui permet aux clients disposant de plusieurs serveurs chez eux de les faire communiquer via la deuxième interface réseau de chaque serveur.
Si cela fonctionne sans souci particulier pour un serveur dédié installé nativement sous une ubuntu par exemple, il n’en n’est pas de même lorsque vous utilisez une distribution de virtualisation et que vous désirez faire communiquer vos machines virtuelles via RPN.
Réfléchissons un peu à la question …

La problématique

wpid1753-201209_visite_datacenter_iliad_salle_4.png

En fait, une fois activé le support RPN pour votre serveur dédié situé à DC3, celui-ci dispose d’une adresse MAC unique et permanente.
Il n’est ni possible de la changer, ni possible d’annoncer sur le réseau d’autres adresses MAC (celles des machines virtuelles par exemple), sous peine de voir Online prendre des mesures de rétorsion vis à vis de votre port réseau. Non, il ne feraient pas ça, quand même 🙂
Il va donc être nécessaire d’utiliser la translation d’adresse (NAT) assortie d’un masquerading des IP des machines virtuelles pour les faire communiquer.

Principe

Dans le cadre de ce billet, je vais aborder la configuration sous Proxmox 2.3.13, solution de virtualisation que j’ai utilisée.
Je vais partir du postulat que vous avez déjà un hôte proxmox qui fonctionne avec des machines virtuelles fonctionnelles, qui sont connectées au réseau via l’interface principale du serveur (avec adjonction d’IP failover KVM).

L’idée ici est d’ajouter sur votre serveur proxmox un deuxième pont réseau mais de ne pas le bridger avec vos vraies interfaces réseau (eth0, eth1), pour éviter de diffuser de mauvaises adresses MAC sur le réseau et de vous faire « blacklister ».

Paramétrages chez Online

wpid1754-Capture_d_ecran_2013-06-21_a_10.04.25.png

La première chose à faire est d’activer le RPN pour votre serveur dans « le niveau de service » de chaque serveur. Si vous êtes en niveau basic, alors votre débit sera limité à 100Mbps, ce qui n’est déjà pas mal.

Il convient ensuite d’aller dans l’onglet RPN/Groupes RPN pour créer votre propre groupe. Cette opération va définir vos adresses IP privées (10.90.X.X) pour chaque serveur et les autoriser à communiquer entre eux.

wpid1755-Capture_d_ecran_2013-06-21_a_10.20.33.png

Configuration de l’hôte proxmox

Une fois les IP assignées, elles seront utilisables directement sur votre serveur proxmox.
Vous pouvez ajouter l’interface réseau ETH1 et la laisser en attribution automatique d’IP DHCP. Au redémarrage, votre serveur va récupérer l’adresse assignée.

Capture_d_ecran_2013-06-21_a_10.32.03.png

Vous allez ensuite ajouter votre deuxième pont vmbr1 et attribuer une plage d’adresse pour votre réseau interne (hôte proxmox + machines hébergées sur ce serveur).
En ce qui me concerne, j’ai pris la plage 10.0.2.X/24 et j’ai défini l’adresse du proxmox comme passerelle avec l’adresse 10.0.2.254 (sur chaque serveur proxmox).

ATTENTION TRES IMPORTANT : Ne pas ajouter d’interface dans la case « bridge ports » (vous ne voulez pas vous fâcher avec online ?)

wpid1756-media_1370985996904.png

Vous pouvez rebooter votre serveur proxmox pour prendre en compte les modifications.

Une fois redémarré, votre serveur devrait avoir la configuration suivante :

- ETH0 : pas d'adresse IP
- ETH1 : l'IP du RPN Online 10.90.X.X
- VMBR0 : adresse IP publique du serveur proxmox 88.19X.X.X
- VMBR1 : adresse 10.0.2.254

Règles de firewall sur l’hôte proxmox

Afin de permettre à vos machines virtuelles d’avoir accès à Internet, il est nécessaire de « masquerader » les paquets IP des machines virtuelles « 10.0.2.0/24 » qui sortent par l’interface ETH1

iptables -t nat -A POSTROUTING -o eth1 -s 10.0.2.0/24 -j MASQUERADE

Si vous souhaitez que certains ports de certaines machines virtuelles soient accessibles publiquement sur le réseau RPN, il est également nécessaire de les « mapper » sur votre serveur proxmox.

Par exemple :

iptables -t nat -A PREROUTING -p tcp -d 10.90.47.228 --dport 8080 -i eth1 -j DNAT --to-destination 10.0.2.15:80

La machine proxmox 10.90.47.228 va rediriger tous les paquets qui lui arrivent sur le port 8080 vers la machine virtuelle 10.0.2.15 sur le port 80

Vous pouvez bien entendu sauvegarder ces règles IPtables et automatiser leur lancement au démarrage de l’hôte proxmox, ou les mettre dans /etc/rc.local.

Paramétrage des machines virtuelles

Capture_d_ecran_2013-06-21_a_11.11.23.png

Votre hôte proxmox étant maintenant paramétré correctement, il vous reste à ajouter une deuxième interface à vos machines virtuelles bridgée sur VMBR1.
Vous pouvez laisser l’attribution d’adresse mac vide. Cela n’a pas d’importance ici car il s’agit d’adresses mac qui sont internes au serveur proxmox et qui ne seront pas diffusées sur le réseau Online.

Rédémarrez ensuite votre machine virtuelle. Vous devriez avoir une deuxième interface réseau ETH1 que vous allez pouvoir configurer « aux petits oignons » 😉

Il ne vous reste plus qu’à configurer votre adresse IP pour ETH1 dans le fichier /etc/network/interfaces et le tour est joué.
Ce fichier, sur votre machine virtuelle, doit ressembler à peu près à ça :

auto eth0
 iface eth0 inet static
 address 88.190.X.X
 netmask 255.255.255.255
 broadcast 88.190.X.X
 post-up route add 88.190.55.1 dev eth0
 post-up route add default gw 88.190.55.1
 post-down route del 88.190.55.1 dev eth0
 post-down route del default gw 88.190.55.1
auto eth1
 iface eth1 inet static
 address 10.0.2.10
 netmask 255.255.255.0
 broadcast 10.0.2.255
 post-up route add -net 10.90.0.0 netmask 255.255.0.0 dev eth1
 post-up route add -net 10.90.0.0 netmask 255.255.0.0 gw 10.0.2.254

Ce qu’il est important de noter ici est que l’adresse assignée à ETH1 est 10.0.2.10 et que grace aux instructions post-up, les paquets pour le réseau RPN 10.90.X.X sont envoyés par ETH1 au lieu de ETH0 (route par défaut) et routés vers la passerelle proxmox 10.0.2.254 (qui a été configurée pour les masquerader et les envoyer sur le RPN en son nom).

Vos machines virtuelles peuvent maintenant accéder au RPN et aux différents services offerts (RPN San…), et même communiquer entre elles, sans passer par le réseau public dedibox.

Si vous souhaitez par exemple partager un serveur de base de données entre plusieurs serveurs web, vous pouvez le faire par votre RPN en mettant à l’écoute le serveur MySQL de la machine virtuelle sur le port 3306 de la machine Proxmox qui l’héberge et en rajoutant la règle de prerouting correspondante.

iptables -t nat -A PREROUTING -p tcp -d 10.90.47.228 --dport 3306 -i eth1 -j DNAT --to-destination 10.0.2.16:3306

N’hésitez pas à laisser un petit commentaire si ce billet vous a été utile ou si vous avez des précisions à apporter. Il pourra servir aux internautes qui vont vous suivre sur ce site.
Le cas échéant j’apporterai quelques modification pour compléter cet article.

Vous pouvez également faire part de vos retours sur twitter

3 thoughts on “Machines virtuelles en NAT sur le RPN de dedibox Online”

  1. bonjour merci pour ce how to bien expliqué.

    effectivement mes machines peuvent communiquer avec le reseau RPN mais pas entres elles

    la vm1 (hébergé par l’host1) ping host2 (sur le reseau 10.90….)
    la vm2 (hébergé par l’host2) ping host1 (sur le reseau 10.90….)
    mais vm1 et vm2 ne se ping pas (sur leur réseau 192.168….)

    une idée ?

    cordialement

  2. Je pense avoir compris,

    il est évident que les vm sur deux hosts différents ne pourrons pas se « voir » (au niveau réseau privé virtuel).

    pour cela il faudra que je passe par l’hote proxmox avec la règle de POSTROUTING qui va bien et la redirection de port associé.

Laisser un commentaire

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