Si vous trouviez des erreurs ou des imprécisions dans ce document faites m'en part sur le [ chan IRC]
Olivier aka Olivier_54
Introduction
Cette documentation décrit l'installation d'AlternC sur un vserver installé sur une dedibox.
Il est possible que la méthode ne diffère pas de beaucoup pour des vservers sur d'autres machines, mais cette document prend en compte certaines spécificités des dedibox.
Pré-requis
- Une dedibox
- Une installation de la dedibox en Debian GNU/Linux "Etch"
- Un nom de domaine par exemple mondomaine.net
Principe de fonctionnement
Pourquoi utiliser des vservers
Dedibox fournit un service à un prix très attractif, à ce prix, si la bande passante est très largement fournie ainsi que la quasi non limitation du volume de données, avoir plusieurs adresses ip a un coût. Comme dans mon cas, en tant que particulier je ne voulais pas trop dépasser le prix d'un abonnement internet, je me suis résolu à ne disposer que d'une adresse ip. L'utilisation de vservers me permet de disposer potentiellement de plusieurs serveurs, en particulier pour faire mes tests, ou de backup mes serveurs dans un état spécifique et pouvoir revenir dessus rapidement si nécessaire. Je me suis rendu compte par la suite que travailler avec une seule ip et plusieurs vservers derrière m'a permis de changer un serveur derrière un port de la dedibox de façon quasi transparente pour les utilisateurs de mon alternc. Pour avoir eu besoin dans d'autres circonstances de transférer des vservers d'une machine à une autre, j'ai choisi cette solution pour me permettre de migrer sur d'autres serveurs si le besoin s'en faisait sentir.
Par ailleurs c'est aussi à ma connaissance la seule solution de "virtualisation" qui n'engendre pas de perte de performance par rapport au même processus fonctionnant nativement sur le serveur.
Bref c'est très souple ... et on verra par la suite que c'est en même temps un peu contraignant.
Comment ça marche
Le principe est de gérer les différents ports ouverts sur l'ip publique de la dedibox et de les diriger avec netfilter vers les vservers comme s'il s'agissait d'un réseau local avec plusieurs serveur distinct. La nuance réside dans le fait que le routage n'est pas activé, au niveau du noyau c'est uniquement par réécriture d'adresses que les vservers repondent.
Un exemple de script iptables qui fait ce travail
#!/bin/bash IPTABLES="/sbin/iptables"; ROUTE="/sbin/route"; LAN="192.168.1.0/24"; LAN_GW="192.168.1.254"; # Vous devez créer une interface eth0:0 ayant l'adresse ip 192.168.1.254 qui servira de "passerelle" WAN_GW="88.191.11.1"; WAN_IFACE="eth0"; WAN_IP="88.191.11.109"; ALTERNC_HOST="192.168.1.1"; # Flushing tables $IPTABLES -F $IPTABLES -X $IPTABLES -t nat -F # Define default policy $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP # Define standard fw rules $IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 22 $IPTABLES -t nat -A POSTROUTING -o $WAN_IFACE -s $LAN -j MASQUERADE echo "0" > /proc/sys/net/ipv4/ip_forward $ROUTE add $WAN_GW gw $LAN_GW # SMTP $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 25 -d $ALTERNC_HOST -m state --state NEW $IPTABLES -t nat -A PREROUTING -p tcp --dport 25 -i eth0 -d $WAN_IP -j DNAT --to-destination $ALTERNC_HOST:25 # HTTP $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 80 -d $ALTERNC_HOST -m state --state NEW $IPTABLES -t nat -A PREROUTING -p tcp -s $LAN --dport 80 -i eth0 -j DNAT --to-destination $ALTERNC_HOST:80 # FTP $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 21 -d $ALTERNC_HOST -m state --state NEW $IPTABLES -t nat -A PREROUTING -p tcp -s $LAN --dport 21 -i eth0 -j DNAT --to-destination $ALTERNC_HOST:21 # HTTPS $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 443 -d $ALTERNC_HOST -m state --state NEW $IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to-destination $ALTERNC_HOST:443 #IMAP only internal $IPTABLES -A INPUT -j ACCEPT -d $ALTERNC_HOST -m state --state NEW # IMAPS $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 993 -d $ALTERNC_HOST -m state --state NEW $IPTABLES -t nat -A PREROUTING -p tcp --dport 993 -i eth0 -j DNAT --to-destination $ALTERNC_HOST:993 # MYSQL only internal $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 3306 -d $ALTERNC_HOST -m state --state NEW # DNS $IPTABLES -A INPUT -j ACCEPT -p udp --dport 53 -d $ALTERNC_HOST $IPTABLES -t nat -A PREROUTING -p udp -s ! 192.168.1.0/24 --dport 53 -d $WAN_IP -j DNAT --to-destination $ALTERNC_HOST:53
Installation de la dedibox
Je passerai rapidement sur l'installation de la dedibox en elle même dans la mesure ou l'installeur web fourni par dedibox se suffit à lui même. La seule chose à définir est que vous devrez à ce moment là demander une installation d'un système debian la plus minimale possible, c'est à dire avec rien de plus qu'un serveur ssh et le système de base Debian.
Pour le reste je vous laisserai consulter la documentation de [ dedibox]
Rendre la dedibox vserver proof
Installation du noyau
La capacité d'une machine à faire fonctionner des vservers, vient de son noyau linux qui a reçu un patch spécifique lui permettant d'isoler les processus entre eux dans plusieurs contextes différents. Pour celà debian fournit maintenant un paquet permettant de disposer d'un noyau de ce type sans recompilation, c'est lui que nous allons installer.
apt-get install linux-image-vserver-686
Installation des outils vserver
Pour créer, supprimer, ou déplacer nos vserver nous allons avoir besoin d'outils qui eux aussi sont inclus à Debian.
apt-get install util-vserver vserver-debiantools
Test du noyau vserver
Après reboot de la machine sur le nouveau noyau, la commande vserver-stat vous dira si le noyau est capable de supporter les vserver en répondant ceci
vserver-stat CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME 0 42 136.3M 19.5K 1d24h37 3h42m47 181d35h53 root server
Comme vous n'avez pas accès physiquement à la dedibox, je vous suggère ici de garder dans un premier temps le noyau fourni par dedibox comme noyau par défaut au démarrage (editer le /boot/grub/menu.lst) et à l'aide de grub-reboot de provoquer un reboot unique sur le nouveau noyau. En cas d'échec, vous pourrez ainsi rebooter matériellement la dedibox et la laisser démarrer sur le premier noyau. Si le reboot sur le kernel vserver est correct, vous pourrez alors modifier le boot pour que dorénavant se noyau démarre par défaut.
Je ne détaillerai pas plus la façon d'utiliser grub et grub-reboot, les manpages servent à ça.
Installation du vserver
Maintenant que nous avons un noyau capable de faire fonctionner notre vserver, nous allons installer celui-ci avec l'aide des commandes suivantes:
newvserver --hostname alternc --domain mondomaine.net --ip 192.168.1.1/24
Notre vserver s'appellera alternc.mondomaine.net et aura l'adresse ip 192.168.1.1 avec un masque de sous réseau à 255.255.255.0.
La commande que nous avons passée va utiliser debootstrap pour installer un système de base Debian, après environs 4 minutes (c'est le temps que j'ai mesuré sur une dedibox), il vous sera demandé de répondre à quelques questions concernant la localisation du serveur, le mot de passe root , l'utilisation ou non de MD5 pour les mots de passe. Une fois le processus d'installation terminé notre vserver sera prêt à être démarré.
Nous retrouvons l'arborescence du vserver dans /var/lib/vservers/alternc
et la configuration du vserver dans /etc/vservers/alternc.
Premier démarrage du vserver
Pour pouvoir démarrer notre vserver nous allons taper la commande suivante:
vserver alternc start
Pour vérifier que notre vserver est bien en marche nous réutilisons la commande vserver-stat
vserver-stat CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME 0 42 136.3M 19.5K 1d24h37 3h42m47 181d35h53 root server 49180 56 670.4M 49.4K 1m02s26 0m21s12 19h28m39 alternc
Si le résultat de vserver-stat donne quelque chose comme ceci, c'est bon signe nous pouvons poursuivre.
Préparation du système
Les limitations des vservers
Le vservers n'ont pas que des avantages et si on peut en trouver en suffisament grand nombre pour trouver cette solution séduisante, il ne faut pas ignorer que certaines limitations peuvent nous faire perdre un temps précieux. J'énoncerai les deux principales limitations qui posent problème avec alternc:
- Pas d'accès à localhost(127.0.0.1)
- Pas d'accès aux capabilities du noyau
Ces limitations posent problème surtout au niveau de l'installation de bind9 pour la partie dns qui utilise ces capabilities et au niveau des références à localhost dans les différentes configurations.
Installation de bind9
Pour que bind9 soit capable de fonctionner sur une machine vserver, il doit être compilé avec l'option --disable-linux-caps, malheureusement pour nous, les paquets debian ne sont pas compilés avec cette option; nous allons avoir deux possibilités:
- Installer un package précompilé avec l'option en question
- Compiler nous meme le package debian avec l'option en question puis l'installer
Pour faire vite, j'emploie la première solution qui fonctionne pour les processeurs 32 bits, pour les 64 bits il semble qu'il n'y ait actuellement pas de package disponible, c'est donc la seconde solution qui vous attend.
Modification du sources.list
Dans un premier temps nous modifions le fichier /etc/apt/sources.list en commentant tout ce qui existe puis en rajoutant les deux dernières lignes pointant vers les package bind9 nocaps.
#deb http://ftp.uk.debian.org/debian/ etch main #deb-src http://ftp.uk.debian.org/debian/ etch main #deb http://security.debian.org etch/updates main deb http://debian.home-dn.net/etch bind-nocaps/ deb-src http://debian.home-dn.net/etch bind-nocaps/
La mise en commentaire de toute les autres sources nous permet de nous assurer que c'est bien la version nocaps de bind que nous allons installer.
Installation de bind9
Ensuite nous ferons
apt-get update apt-get install bind9
puis décommenterons les lignes dans /etc/apt/sources.list
Résolution du problème du localhost
Pour résoudre le fait que le localhost pointe vers 127.0.0.1 nous éditerons le fichier /etc/hosts et remplacerons le 127.0.0.1 par l'adresse ip interne du vserver, au passage nous mettons à jour la ligne concernant l'ip publique du vserver pointant vers le fqdn de notre vserver.
# /etc/hosts 192.168.1.1 localhost 88.191.11.109 alternc.mondomaine.net alternc
Installation des paquets prérequis
Vous pouvez maintenant poursuivre et terminer sur la [documentation déjà existante]
Attachments
-
principe.png
(78.3 KB) - added by anonyme
4 years ago.
Principe de fonctionnement
