Ce document présente quelques possibilités d'organisation réseau pour des serveurs virtuels OpenVZ sur un serveur [:Debian:].

TableOfContents()

La méthode « ProgFou »

Principes

Implémentation

Masquage des serveurs virtuels via traduction d'adresse

À mettre dans un script lancé au démarrage du serveur hôte :

IPT="/sbin/iptables"
IPTN="$IPT -t nat"

IF_PUBLIC="eth0"
IP_PUBLIC="207.46.232.182"

NET_VZ="192.168.127.0/24"
IF_VZ="dummy0"
IP_VZ="192.168.127.254"
IP_VZ_DNS="192.168.127.9"
IP_VZ_MYSQL="192.168.127.10"
IP_VZ_SMTP="192.168.127.11"
IP_VZ_IMAP="192.168.127.11"
IP_VZ_WWW="192.168.127.12"

# masquage en sortie :
$IPTN -A POSTROUTING -s "$NET_VZ" -o "$IF_PUBLIC" -j SNAT --to-source "$IP_PUBLIC"

# masquage en entrée :
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p udp -m udp --dport 53 -j DNAT --to-destination "$IP_VZ_DNS"
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p tcp -m tcp --dport 53 -j DNAT --to-destination "$IP_VZ_DNS"
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p tcp -m tcp --dport 3306 -j DNAT --to-destination "$IP_VZ_MYSQL"
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p tcp -m multiport --dports 25,465 -j DNAT --to-destination "$IP_VZ_SMTP"
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p tcp -m multiport --dports 143,993 -j DNAT --to-destination "$IP_VZ_IMAP"
$IPTN -A PREROUTING -d "$IP_PUBLIC" -p tcp -m multiport --dports 80,443 -j DNAT --to-destination "$IP_VZ_WWW"

Installation d'un frontal

...(à compléter)...

Frontal web avec Apache

/!\ Attention : il faut utiliser au minimum la version 2.0 de Apache.

Il faut au préalable activer le module proxy de Apache :

sudo a2enmod proxy
sudo apache2ctl graceful

Exemple pour renvoyer les requêtes vers un serveur virtuel, à mettre par exemple dans /etc/apache2/sites-available/default :

  <IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPass / http://192.168.127.12/moodle
    ProxyPassReverse / http://192.168.127.12/moodle
  </IfModule>

(!) Pour sécuriser au mieux les services web, on pourra utiliser des sites virtuels (VirtualHost) sur le frontal pour renvoyer vers plusieurs serveurs virtuels indépendants.

La méthode « pont Ethernet »

L'avantage de cette méthode est de présenter, côté machines virtuelle, une configuration réseau 100% similaire à celle de machines physiques.

Installer le package bridge-utils

Configurer un pont Ethernet sur la machine hôte. Si l'interface choisie est eth1, par exemple, mettre pour cela dans le /etc/network/interfaces quelque chose du genre :

auto vz1
iface vz1 inet manual
        bridge_ports    eth1
        bridge_stp      off
        bridge_fd       1
        bridge_maxwait 0

Si la machine dispose de plusieurs interfaces, je préfère ne pas mettre d'ip sur l'interface associée au pont, et de configurer une autre interface pour accéder à la machine hôte. Dans ce cas, ajouter un net.ipv4.conf.eth0.forwarding=0 dans le /etc/sysctl.conf pour l'interface (ici, eth0) qui servira uniquement à administrer la machine. Cette interface peut même être branchée sur un réseau différent, ultra-protégé, pour limiter les accès à l'hôte, qu'il est vital de bien protéger : un accés illégitime à l'hôte donnerait accès à tous les serveurs hébergés dessus.

Vérifier que le forwarding est bien activé pour la machine :

% grep ^net.ipv4.ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 1

Le fichier /etc/vz/vznet.conf configure le comportement réseau lors du démarrage de nouvelle machines. Y ajouter le chemin vers un script qui ajoutera à chaque fois l'interface Ethernet de la machine démarrée au pont créé à la première étape.

% cat /etc/vz/vznet.conf 
EXTERNAL_SCRIPT=/usr/local/sbin/vzaddbr

Exemple de script :

% cat /usr/local/sbin/vzaddbr
#!/bin/bash

BRIDGE=vz1
ETH=$3

/sbin/ifconfig $ETH up

/usr/sbin/brctl addif $BRIDGE $ETH

Enfin, dernière étape, configurer une interface Ethernet virtuelle sur chaque machine :

vzctl set 211 --netif_add "eth0,00:E1:00:00:21:1A,veth211.1,00:E1:00:00:21:1B" --save

Choix des adresses mac :

Enfin (ENFIN), côté machine virtuelle : rien de particulier, configurer l'interface eth0 comme si de rien n'était :

# cat /var/lib/vz/root/211/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 172.18.1.211
        netmask 255.255.255.0

La machine virtuelle est connectée au réseau comme si de rien n'était.


CatégorieVirtualisation