2001
Commentaire: premier jet...
|
3849
à lire, relire, relire... et comprendre, un jour ?
|
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)]] * En français : http://www.libresys.fr/2008/10/14/les-differentes-formes-de-configuration-du-reseau-avec-openvz/ |
Ligne 5: | Ligne 7: |
=== 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 9: |
=== 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__ |
= sur la machine hôte = |
Ligne 19: | Ligne 11: |
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 |
* Installer le package {{{bridge-utils}}} |
Ligne 26: | Ligne 13: |
__EOF__ sudo ifup dummy0 }}} * 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 |
* 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 33: | Ligne 15: |
=== 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_WWW="192.168.127.10" # 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 tcp --dport 80 -j DNAT --to-destination "$IP_VZ_WWW" |
{{{ # extrait de /etc/network/interfaces sur la machine hôte auto vz1 iface vz1 inet manual bridge_ports eth1 bridge_stp off bridge_fd 1 bridge_maxwait 0 |
Ligne 55: | Ligne 25: |
=== Installation d'un frontal === | . Remarque : si la machine dispose de plusieurs interfaces, il est intéressant de ne pas mettre d'ip sur l'interface associée au pont. On configure une autre interface pour accéder à la machine hôte directement. Dans ce cas, ajouter `net.ipv4.conf.eth0.forwarding=0` dans le /etc/sysctl.conf pour l'interface (ici, eth0) qui servira uniquement à accéder à la machine hôte. 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 ses serveurs virtuels...! |
Ligne 57: | Ligne 27: |
''...(à compléter)...'' | * 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 59: | Ligne 29: |
== La méthode « Tini » == | {{{ $ cat /etc/vz/vznet.conf EXTERNAL_SCRIPT=/usr/local/sbin/vzaddbr }}} |
Ligne 61: | Ligne 34: |
''...(Tini, tu mets quelques mots sur le bridge ?)...'' | . Exemple de script : |
Ligne 63: | Ligne 36: |
---- CatégorieVirtualisation |
{{{ $ cat /usr/local/sbin/vzaddbr #!/bin/bash BRIDGE=vz1 ETH=$3 # on active l'interface /sbin/ifconfig $ETH up # on l'ajoute sur le bridge (comme si on la branchait sur le switch correspondant) /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}}} . '''Attention au choix des adresses MAC''' : 1. ne pas attribuer deux fois la même adresse MAC pour deux machines différente. 1. Attention au préfixe ! Choisir un préfixe légèrement supérieur à celui de l'adresse MAC de l'interface physique. En effet dans l'algorithme de gestion de pont, c'est toujours '''la plus petite adresse MAC qui est choisie pour être celle du pont'''. Il ne faut pas que l'adresse MAC change lorsqu'une machine virtuelle est démarrée ou stoppée. Il faut donc que l'adresse MAC la plus petite soit celle de la machine physique, qui ne change pas. 1. Astuce pour s'y retrouver : utiliser 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. = et sur les machines virtuelles = Enfin, 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 elle était sur un switch... comme si de rien n'était. |
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.
En français : http://www.libresys.fr/2008/10/14/les-differentes-formes-de-configuration-du-reseau-avec-openvz/
sur la machine hôte
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 :
# extrait de /etc/network/interfaces sur la machine hôte auto vz1 iface vz1 inet manual bridge_ports eth1 bridge_stp off bridge_fd 1 bridge_maxwait 0
Remarque : si la machine dispose de plusieurs interfaces, il est intéressant de ne pas mettre d'ip sur l'interface associée au pont. On configure une autre interface pour accéder à la machine hôte directement. Dans ce cas, ajouter net.ipv4.conf.eth0.forwarding=0 dans le /etc/sysctl.conf pour l'interface (ici, eth0) qui servira uniquement à accéder à la machine hôte. 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 ses serveurs virtuels...!
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 # on active l'interface /sbin/ifconfig $ETH up # on l'ajoute sur le bridge (comme si on la branchait sur le switch correspondant) /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
Attention au choix des adresses MAC :
- ne pas attribuer deux fois la même adresse MAC pour deux machines différente.
Attention au préfixe ! Choisir un préfixe légèrement supérieur à celui de l'adresse MAC de l'interface physique. En effet dans l'algorithme de gestion de pont, c'est toujours la plus petite adresse MAC qui est choisie pour être celle du pont. Il ne faut pas que l'adresse MAC change lorsqu'une machine virtuelle est démarrée ou stoppée. Il faut donc que l'adresse MAC la plus petite soit celle de la machine physique, qui ne change pas.
- Astuce pour s'y retrouver : utiliser 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.
et sur les machines virtuelles
Enfin, 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 elle était sur un switch... comme si de rien n'était.