TP sysres IMA5sc 2018/2019 G9 : Différence entre versions

De Wiki d'activités IMA
(Configuration d'apache2)
(Séance 1)
Ligne 5 : Ligne 5 :
  
 
===Création de l'image disque===
 
===Création de l'image disque===
dd if=/dev/zero of=disc1.img bs=1024K count=10240
+
  dd if=/dev/zero of=disc1.img bs=1024K count=10240
  
 
===Mise en place du file system===
 
===Mise en place du file system===
mkfs disc1.img
+
  mkfs disc1.img
  
 
===Création du point de montage et montage de l'image===
 
===Création du point de montage et montage de l'image===
mkdir /tmp/rootfs1
+
  mkdir /tmp/rootfs1
mount -o loop disc1.img /tmp/rootfs1
+
  mount -o loop disc1.img /tmp/rootfs1
  
 
===Installation du debian dans le point de montage===
 
===Installation du debian dans le point de montage===
 
Afin de pouvoir installer debian, il faut que la machine accède à internet :
 
Afin de pouvoir installer debian, il faut que la machine accède à internet :
  
export http_proxy=http://proxy.polytech-lille.fr:3128/
+
  export http_proxy=http://proxy.polytech-lille.fr:3128/
 +
  debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :
  
debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :
+
  debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1
 
 
debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1
 
  
 
===Simplification de l'accès===
 
===Simplification de l'accès===
echo "proc /proc proc defaults 0 0" >> /tmp/rootfs1/etc/fstab
+
  echo "proc /proc proc defaults 0 0" >> /tmp/rootfs1/etc/fstab
  
 
===Clonage des images===
 
===Clonage des images===
L'image est maintenant prête, nous pouvons maintenant la cloner afin d'en avoir 3 identiques. Pour cela on démonte l'image 1 :
+
  L'image est maintenant prête, nous pouvons maintenant la cloner afin d'en avoir 3 identiques. Pour cela on démonte l'image 1 :
  
umount /tmp/rootfs1
+
  umount /tmp/rootfs1
  
 
On copie l'image :
 
On copie l'image :
  
cp disc1.img disc2.img
+
  cp disc1.img disc2.img
cp disc1.img disc3.img
+
  cp disc1.img disc3.img
  
 
On monte les 3 images :
 
On monte les 3 images :
  
mount -o loop disc1.img /tmp/rootfs1
+
  mount -o loop disc1.img /tmp/rootfs1
mount -o loop disc2.img /tmp/rootfs2
+
  mount -o loop disc2.img /tmp/rootfs2
mount -o loop disc3.img /tmp/rootfs3
+
  mount -o loop disc3.img /tmp/rootfs3
  
 
===Lancement des trois containers===
 
===Lancement des trois containers===
unshare nous permet de lancer les trois images précédemment montées :
+
  unshare nous permet de lancer les trois images précédemment montées :
  
unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c "mount /proc ; /bin/bash"
+
  unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c "mount /proc ; /bin/bash"
unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c "mount /proc ; /bin/bash"
+
  unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c "mount /proc ; /bin/bash"
unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c "mount /proc ; /bin/bash"
+
  unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c "mount /proc ; /bin/bash"
  
 
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.
 
Les trois containers sont maintenant lancés, nous pouvons travailler dessus.
Ligne 57 : Ligne 56 :
 
===Création de 4 interfaces virtuelles===
 
===Création de 4 interfaces virtuelles===
  
ip link add vif1 type veth peer name eth0@vif1
+
  ip link add vif1 type veth peer name eth0@vif1
ip link add vif2 type veth peer name eth0@vif2
+
  ip link add vif2 type veth peer name eth0@vif2
ip link add vif3 type veth peer name eth0@vif3
+
  ip link add vif3 type veth peer name eth0@vif3
ip link add vif4 type veth peer name eth1@vif4
+
  ip link add vif4 type veth peer name eth1@vif4
  
 
===Connexion de chaque interface à une interface eth0 sur les containers===
 
===Connexion de chaque interface à une interface eth0 sur les containers===
  
ip link set eth0@vif1 netns /proc/<pid1>/ns/net name eth0
+
  ip link set eth0@vif1 netns /proc/<pid1>/ns/net name eth0
ip link set eth0@vif2 netns /proc/<pid2>/ns/net name eth0
+
  ip link set eth0@vif2 netns /proc/<pid2>/ns/net name eth0
ip link set eth0@vif3 netns /proc/<pid3>/ns/net name eth0
+
  ip link set eth0@vif3 netns /proc/<pid3>/ns/net name eth0
  
 
pid1, pid2, pid3 peuvent être déterminés via la commande :
 
pid1, pid2, pid3 peuvent être déterminés via la commande :
ps aux | grep unshare
+
  ps aux | grep unshare
  
 
===Connexion à eth1 sur le premier container===
 
===Connexion à eth1 sur le premier container===
  
ip link set eth1@vif1 netns /proc/<pid1>/ns/net name eth1
+
  ip link set eth1@vif1 netns /proc/<pid1>/ns/net name eth1
  
 
===Création d'un bridge===
 
===Création d'un bridge===
  
ip link add interne type bridge
+
  ip link add interne type bridge
  
 
===Ajout de vif4 à bridge===
 
===Ajout de vif4 à bridge===
 
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge
 
L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge
  
ip link set vif4 master bridge
+
  ip link set vif4 master bridge
  
 
===Ajout de vif1, vif2, vif3 à interne===
 
===Ajout de vif1, vif2, vif3 à interne===
  
ip link set vif1 master interne
+
  ip link set vif1 master interne
ip link set vif2 master interne
+
  ip link set vif2 master interne
ip link set vif3 master interne
+
  ip link set vif3 master interne
  
 
===Activation de toutes les interfaces===
 
===Activation de toutes les interfaces===
  
ip link set vif1 up
+
  ip link set vif1 up
ip link set vif2 up
+
  ip link set vif2 up
ip link set vif3 up
+
  ip link set vif3 up
ip link set bridge up
+
  ip link set bridge up
ip link set interne up
+
  ip link set interne up
  
 
===Attribution des adresses ip===
 
===Attribution des adresses ip===
Ligne 102 : Ligne 101 :
 
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :
 
On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :
  
nsenter -t <PID1> -n ip address add dev eth0 192.168.4.1/24
+
  nsenter -t <PID1> -n ip address add dev eth0 192.168.4.1/24
  
nsenter -t <PID2> -n ip address add dev eth0 192.168.4.2/24
+
  nsenter -t <PID2> -n ip address add dev eth0 192.168.4.2/24
  
nsenter -t <PID3> -n ip address add dev eth0 192.168.4.3/24
+
  nsenter -t <PID3> -n ip address add dev eth0 192.168.4.3/24
  
 
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :
 
On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :
  
nsenter -t <PID1> -n ip address add dev eth1 172.26.145.234/24
+
  nsenter -t <PID1> -n ip address add dev eth1 172.26.145.234/24
  
 
===Activation des interfaces sur les containers>===
 
===Activation des interfaces sur les containers>===
 
Sur chaque containers, lancer :
 
Sur chaque containers, lancer :
  
ip link set dev eth0 up
+
  ip link set dev eth0 up
ip link set dev lo up
+
  ip link set dev lo up
  
 
Ainsi que sur le container 1 :
 
Ainsi que sur le container 1 :
  
ip link set dev eth1 up
+
  ip link set dev eth1 up
  
 
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :
 
Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :
  
bridge : eth0 eth1 vif4
+
  bridge : eth0 eth1 vif4
  
interne : vif1 vif2 vif3
+
  interne : vif1 vif2 vif3
  
 
=Séance 2=
 
=Séance 2=

Version du 25 novembre 2018 à 15:43

Séance 1

Lors de cette première séance, nous avons eu pour objectif de créer les 3 containers et de les faire communiquer.

Création d'un container

Création de l'image disque

 dd if=/dev/zero of=disc1.img bs=1024K count=10240

Mise en place du file system

 mkfs disc1.img

Création du point de montage et montage de l'image

 mkdir /tmp/rootfs1
 mount -o loop disc1.img /tmp/rootfs1

Installation du debian dans le point de montage

Afin de pouvoir installer debian, il faut que la machine accède à internet :

 export http_proxy=http://proxy.polytech-lille.fr:3128/
 debootstrap permet d'installer debian ainsi que apache2 et vim pour que nous puissions travailler dans la séance 2 :
 debootstrap --include=nano,vim,apache2 stable /tmp/rootfs1

Simplification de l'accès

 echo "proc /proc proc defaults 0 0" >> /tmp/rootfs1/etc/fstab

Clonage des images

 L'image est maintenant prête, nous pouvons maintenant la cloner afin d'en avoir 3 identiques. Pour cela on démonte l'image 1 :
 umount /tmp/rootfs1

On copie l'image :

 cp disc1.img disc2.img
 cp disc1.img disc3.img

On monte les 3 images :

 mount -o loop disc1.img /tmp/rootfs1
 mount -o loop disc2.img /tmp/rootfs2
 mount -o loop disc3.img /tmp/rootfs3

Lancement des trois containers

 unshare nous permet de lancer les trois images précédemment montées :
 unshare -n -u -p -f -m chroot /tmp/rootfs1 /bin/sh -c "mount /proc ; /bin/bash"
 unshare -n -u -p -f -m chroot /tmp/rootfs2 /bin/sh -c "mount /proc ; /bin/bash"
 unshare -n -u -p -f -m chroot /tmp/rootfs3 /bin/sh -c "mount /proc ; /bin/bash"

Les trois containers sont maintenant lancés, nous pouvons travailler dessus.

Mise en place du réseau

Nos containers étant lancés et fonctionnels, nous allons maintenant les connecter en réseau.

Création de 4 interfaces virtuelles

 ip link add vif1 type veth peer name eth0@vif1
 ip link add vif2 type veth peer name eth0@vif2
 ip link add vif3 type veth peer name eth0@vif3
 ip link add vif4 type veth peer name eth1@vif4

Connexion de chaque interface à une interface eth0 sur les containers

 ip link set eth0@vif1 netns /proc/<pid1>/ns/net name eth0
 ip link set eth0@vif2 netns /proc/<pid2>/ns/net name eth0
 ip link set eth0@vif3 netns /proc/<pid3>/ns/net name eth0

pid1, pid2, pid3 peuvent être déterminés via la commande :

 ps aux | grep unshare

Connexion à eth1 sur le premier container

 ip link set eth1@vif1 netns /proc/<pid1>/ns/net name eth1

Création d'un bridge

 ip link add interne type bridge

Ajout de vif4 à bridge

L'interface eth0 de la zabeth est sur le bridge, on connecte donc vif4 à bridge

 ip link set vif4 master bridge

Ajout de vif1, vif2, vif3 à interne

 ip link set vif1 master interne
 ip link set vif2 master interne
 ip link set vif3 master interne

Activation de toutes les interfaces

 ip link set vif1 up
 ip link set vif2 up
 ip link set vif3 up
 ip link set bridge up
 ip link set interne up

Attribution des adresses ip

On commence par attribuer les ip de la forme 192.168.4.xxx aux interfaces connectées à bridge :

 nsenter -t <PID1> -n ip address add dev eth0 192.168.4.1/24
 nsenter -t <PID2> -n ip address add dev eth0 192.168.4.2/24
 nsenter -t <PID3> -n ip address add dev eth0 192.168.4.3/24

On attribue une ip vacante sur 172.26.145.xxx au container 1 sur l'interface eth1 :

 nsenter -t <PID1> -n ip address add dev eth1 172.26.145.234/24

Activation des interfaces sur les containers>

Sur chaque containers, lancer :

 ip link set dev eth0 up
 ip link set dev lo up

Ainsi que sur le container 1 :

 ip link set dev eth1 up

Les containers sont maintenant fonctionnels et connectés selon le schéma suivant :

 bridge : eth0 eth1 vif4
 interne : vif1 vif2 vif3

Séance 2

Lors de cette séance, nous allons configurer apache2 afin de pouvoir accéder à deux sites web différents hébergés sur les containers 2 et 3, et ce depuis des noms de domaine choisis.

Attribution des noms de domaine

Afin d'obtenir un nom de domaine, nous nous connections sur gandi.net.

Onglet Domaines, on choisit le domaine plil.space.

Onglet DNS Records, on ajoute un DNS type A :

Nom : tham2 IP : 172.26.145.234

Puis on ajoute deux DNS type Cname :

Nom : tham1 & tham3 Nom d'hote : tham2

De cette manière, nous pouvons maintenant accéder à 172.26.145.234 via tham1.plil.space et tham3.plil.space

Configuration d'apache2

Fichier conf

Les configurations de site se trouvent dans /etc/apache2/sites-available/, nous allons donc configurer 000-default.conf :

 <VirtualHost *:80>
 	ServerName tham1.plil.space
 	ServerAdmin webmaster@tham1.plil.space
 	DocumentRoot /var/www/html/tham1/
 
 	ProxyPass / http://192.168.4.2/
 	ProxyPassReverse / http://192.168.4.2/
 	ProxyRequests Off
 
 	ErrorLog ${APACHE_LOG_DIR}/error.log
 	CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>
 <VirtualHost *:80>
     ServerName tham3.plil.space
     ServerAdmin webmaster@tham3.plil.space
 	DocumentRoot /var/www/html/tham3/
 	
     ProxyPass / http://192.168.4.3/
     ProxyPassReverse / http://192.168.4.3/
     ProxyRequests Off
 
 	ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

On redirige tham1.plil.space vers le container 2 et tham3.plil.space vers le container 3 via leurs ip (192.168.4.2 et 192.168.4.3)

Activation des modules proxy et proxy_http

 a2enmod proxy
 a2enmod proxy_http

Activation du site

 a2ensite 000-default.conf

Tout est maintenant configuré, on peut donc rebooter apache :

 service apache2 restart

Création d'une page web

Dans les containers 2 et 3 on créé une simple page web et on reboot apache :

Container 2 :

 cat 1 /var/www/html/index.html
 service apache2 restart

Container 3 :

 cat 3 /var/www/html/index.html
 service apache2 restart

Visualisation de la page web

On commence par désactiver le proxy sur firefox, et on peut accéder aux pages :

 tham1.plil.space/index.html

firefox affiche 1

 tham3.plil.space/index.html

firefox affiche 3

11h10 => Serveurs Web OK (unshare)

12h20 => Serveurs Web OK (docker)