P24 Annexe
Cette page est un guide pas à pas pour reconstruire l'architecture de notre projet sur une machine Debian (Jessie 8) avec un noyau Linux 3.16.0-4-amd64.
Sur la machine hôte
Mise à jour et outils pratiques
Sur une machine Debian Jessie, il est nécessaire d'installer les outils suivants :
apt-get update -y; apt-get upgrade -y apt-get install -y xen-hypervisor-4.4-amd64 xen-tools sqlite3 nginx ssh xen-utils-common bridge-utils
Les outils suivants sont également conseillés :
apt-get install -y vim python curl lynx nmap
Création du bridge général
Nous créons une interface tap dédiée à la connexion des interfaces du bridge. L'interface eth0 est dédiée au support. Pour que la configuration soit identique si la machine redémarre, nous éditons le fichier /etc/network/interfaces comme suit :
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 172.26.64.13 netmask 255.255.240.0 gateway 172.26.79.254 auto tap0 iface tap0 inet manual #MASQUERADE pre-up iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE pre-up ip tuntap add mode tap dev $IFACE pre-up ip addr add 172.26.79.230/20 dev $IFACE up ip link set dev $IFACE up #post-up ip route add 172.26.79.230/32 dev $IFACE down ip link set $IFACE down post-down ip link del dev $IFACE #Bridge réunissant les conteneurs auto Summoners iface Summoners inet static bridge-ports tap0 address 10.0.0.1 netmask 255.0.0.0
La mascarade doit s'effectuer manuellement plutôt que l'option iptables-restore. En effet nous risquons d'écraser les nouvelles règles de routages de machines virtuelles Xen.
Création des machines virtuelles Xen
Une fois les outils Xen installé, on créée autant de vm que nécessaire
xen-create-image --hostname=teemo --ip=10.2.0.1 --netmask=255.0.0.0 --gateway=10.0.0.1 \ --dir=/usr/local/xen --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie --passwd
Puis on lance la VM ainsi créée:
xl create /etc/xen/teemo.cfg
Sur la machine Xen
On se connecte à la machine Xen via la commande xl console teemo
Mise a jour et outils pratiques
Une fois reconnecté, nous devrions avoir une connexion internet valide.
apt-get update -y; apt-get upgrade -y apt-get install -y vim curl nmap ssh bridge-utils
Pour activer le ssh :
sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config service ssh restart
Architecture réseau
Dans une premier temps il est nécessaire d'établir les bons paramètres réseaux. La création d'un bridge personnalisé nous servira par la suite pour y mettre tous les conteneurs. Il faut éditer le fichier /etc/network/interfaces comme suit :
# The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static pre-up ip link set $IFACE up post-down ip link set $IFACE down # The primary network interface auto br0 iface br0 inet static bridge_ports eth0 address 10.2.0.1 netmask 255.0.0.0 gateway 10.0.0.1
reboot
Installation de Docker
Ajout des dépôts docker de jessie où se trouve le paquet nécessaire.
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D echo -e "deb http://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list apt-get update -y
Installation proprement dite de Docker.
apt-get install -y docker-engine
Ajout du proxy dans l’environnement Docker.
mkdir /etc/systemd/system/docker.service.d echo -e "[Service]\nEnvironment=HTTP_PROXY=http://proxy.polytech-lille.fr:3128/" > /etc/systemd/system/docker.service.d/http-proxy.conf systemctl daemon-reload systemctl restart docker
Création d'un bridge personnalisé pour Docker
Pour changer le réseau par défaut de Docker, on doit dans un premier temps détruire toute la configuration existante.
service docker stop ip link set docker0 down brctl delbr docker0 iptables -t nat -F POSTROUTING
On doit ensuite indiquer au démon de Docker d'utiliser notre bridge br0 précédemment créée. On édite pour cela /lib/systemd/system/docker.service. On y indique aussi que l'on souhaite que les conteneurs prennent leurs adresses dans la plage donnée par l'option fixed-cidr. Par défaut, la passerelle par défaut est construite en fonction de l'adresse de l'hôte du conteneur (ici 10.1.0.1 au lieu de 10.0.0.1). Nous devons également la préciser ici. Voici la ligne a remplacer dans le fichier :
ExecStart=/usr/bin/docker daemon -H fd:// -b=br0 --fixed-cidr=10.1.0.1/16 --default-gateway=10.0.0.1
On recharge le démon pour prendre en compte la configuration.
systemctl daemon-reload service docker restart
On peut alors vérifier que notre configuration a bien été prise en compte avec les commandes suivantes.
ifconfig iptables -t nat -L -n
Mise en place des scripts
SSH
On doit dans un premier temps établir une connexion sécurisée en ssh entre l'hyperviseur et la vm Xen. Sur la VM xen, il faut créer :
mkdir /root/.ssh/ touch /root/.ssh/authorized_keys
Sur l'hyperviseur :
ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa_teemo cat /root/.ssh/id_rsa_teemo.pub | ssh root@10.2.0.1 "cat - >> /root/.ssh/authorized_keys" ssh-add /root/.ssh/id_rsa_teemo
Base de données
Une base de données est nécessaire pour stocker les associations entre conteneur, adresse ip, nom de domaine et login.
sqlite3 /root/projet.db "PRAGMA foreign_keys=OFF;BEGIN TRANSACTION;\ CREATE TABLE users(login varchar(10), vlan int, docker_ip varchar(15),domain varchar(50) primary key);COMMIT;"
On peut alors télécharger les scripts suivants :
mkdir /root/projet wget https://zegbicho.lol/Projet/creation.sh.txt; mv creation.sh.txt /root/projet/creation.sh wget https://zegbicho.lol/Projet/delete.sh.txt; mv delete.sh.txt /root/projet/delete.sh wget https://zegbicho.lol/Projet/checkIP.sh.txt; mv checkIP.sh.txt /root/projet/checkIP.sh chmod u+x /root/projet/*
Tests
Voici quelques commandes qui permettent de tester nos outils.
/root/projet/creation.sh