Modifications entre les versions 3 et 15 (s'étendant sur 12 versions)
Version 3 à la date du 2007-05-31 00:44:57
Taille: 3210
Commentaire: ajout d'une section sur un frontal web
Version 15 à la date du 2008-09-25 11:28:53
Taille: 3296
Éditeur: ThomasNoël
Commentaire: JC, tu pourras remettre ta méthode en dessous mais je préfère n'indiquer que celle du bridge
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Ce document présente quelques possibilités d'organisation réseau pour des serveurs virtuels OpenVZ sur un serveur [:Debian:]. Pour la configuration réseau des machines virtuelle, la méthode « pont Ethernet » est celle qui est conseillée à l'AUF. L'avantage de cette méthode est de présenter, '''côté machines virtuelle, une configuration réseau 100% similaire à celle de machines physiques'''.
Ligne 3: Ligne 3:
== La méthode « ProgFou » ==  * [[http://en.wikipedia.org/wiki/Ethernet_bridge|Explications de la notion de pont Ethernet (en anglais)]]
 * [[http://wiki.openvz.org/Veth| Configuration du pont Ethernet avec OpenVZ (en anglais)]]
Ligne 5: Ligne 6:
=== Principes ===
 * les serveurs virtuels sont une segmentation sécuritaire des services offerts
 * cette segmentation ne devrait pas être visible ou gênante pour les utilisateurs
 * l'organisation réseau doit être la plus « naturelle » possible (pas de bidouillage infâme)
 * mise en réseau autonome (une sorte de DMZ) des serveurs virtuels
/* ajouter des schémas ici */
Ligne 11: Ligne 8:
=== Implémentation ===
 * utilisation du bloc d'adresses `192.168.127.0/24`, choix arbitraire en référence au réseau `127.0.0.0/8`
 * utilisation d'une interface `dummy` pour la « connexion » du serveur hôte :
 {{{
sudo sh -c 'echo dummy >> /etc/modules'
sudo modprobe dummy
sudo sh -c 'cat >> /etc/network/interfaces' << __EOF__
Installer le package {{{bridge-utils}}}
Ligne 19: Ligne 10:
auto dummy0
iface dummy0 inet static
    address 192.168.127.254
    netmask 255.255.255.0
    network 192.168.127.0
    broadcast 192.168.127.255
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 :
Ligne 26: Ligne 12:
__EOF__
sudo ifup dummy0
{{{
auto vz1
iface vz1 inet manual
        bridge_ports eth1
        bridge_stp off
        bridge_fd 1
        bridge_maxwait 0
Ligne 29: Ligne 20:
 * deux méthodes possibles d'interaction avec les serveurs virtuels :
  * masquage à l'aide de la traduction d'adresses
  * utilisation d'un frontal se positionnant en intermédiaire
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.
Ligne 33: Ligne 22:
=== Masquage des serveurs virtuels via traduction d'adresse === 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.
Ligne 35: Ligne 24:
À mettre dans un script lancé au démarrage du serveur hôte :
Ligne 37: Ligne 25:
IPT="/sbin/iptables"
IPTN="$IPT -t nat"
% cat /etc/vz/vznet.conf
EXTERNAL_SCRIPT=/usr/local/sbin/vzaddbr
}}}
Exemple de script :
Ligne 40: Ligne 30:
IF_PUBLIC="eth0"
IP_PUBLIC="207.46.232.182"
{{{
% cat /usr/local/sbin/vzaddbr
#!/bin/bash
Ligne 43: Ligne 34:
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"
BRIDGE=vz1
ETH=$3
Ligne 52: Ligne 37:
# masquage en sortie :
$IPTN -A POSTROUTING -s "$NET_VZ" -o "$IF_PUBLIC" -j SNAT --to-source "$IP_PUBLIC"
/sbin/ifconfig $ETH up
Ligne 55: Ligne 39:
# 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"
/usr/sbin/brctl addif $BRIDGE $ETH
Ligne 63: Ligne 41:
Enfin, dernière étape, configurer une interface Ethernet virtuelle sur chaque machine :
Ligne 64: Ligne 43:
=== Installation d'un frontal === {{{vzctl set 211 --netif_add "eth0,00:E1:00:00:21:1A,veth211.1,00:E1:00:00:21:1B" --save}}}
Ligne 66: Ligne 45:
''...(à compléter)...'' Choix des adresses mac :
Ligne 68: Ligne 47:
==== Frontal web avec Apache ≥ 2.0 ====  * ne pas attribuer deux fois la même adresse mac pour deux machines différente.
 * à Dakar, j'utilise pour les deux derniers octets le numéro de la machine elle même (le VEID), avec A et B respectivement pour l'interface côté machine virtuelle et côté hôte.
 * Attention au préfixe ! Choisir un préfixe légèrement supérieur à celui de l'adresse mac de l'interface physique : dans l'algorithme de gestion de pont, c'est toujours la plus petite adresse mac qui est choisie pour être celle du pont. Le fait que l'adresse mac change lorsqu'une machine est démarrée ou stoppée peut provoquer des perturbations diverses.
Ligne 70: Ligne 51:
Exemple renvoyant les requêtes vers un serveur virtuel : Enfin (ENFIN), côté machine virtuelle : rien de particulier, configurer l'interface eth0 comme si de rien n'était :
Ligne 72: Ligne 54:
  <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>
# cat /var/lib/vz/private/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
Ligne 82: Ligne 63:

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

== La méthode « Tini » ==

''...(Tini, tu mets quelques mots sur le bridge ?)...''
La machine virtuelle est connectée au réseau comme si de rien n'était.
Ligne 90: Ligne 66:
CatégorieVirtualisation  . CatégorieVirtualisation

Pour la configuration réseau des machines virtuelle, la méthode « pont Ethernet » est celle qui est conseillée à l'AUF. 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.

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 :

  • ne pas attribuer deux fois la même adresse mac pour deux machines différente.
  • à Dakar, j'utilise pour les deux derniers octets le numéro de la machine elle même (le VEID), avec A et B respectivement pour l'interface côté machine virtuelle et côté hôte.
  • Attention au préfixe ! Choisir un préfixe légèrement supérieur à celui de l'adresse mac de l'interface physique : dans l'algorithme de gestion de pont, c'est toujours la plus petite adresse mac qui est choisie pour être celle du pont. Le fait que l'adresse mac change lorsqu'une machine est démarrée ou stoppée peut provoquer des perturbations diverses.

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

# cat /var/lib/vz/private/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.


OpenVZ/OrganisationRéseau (dernière édition le 2018-01-19 17:16:04 par MoussaNombre)