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

De Wiki d'activités IMA
Ligne 26 : Ligne 26 :
 
Bootstrap d'un systeme Debian au sein de la partition montée
 
Bootstrap d'un systeme Debian au sein de la partition montée
 
  debootstrap --include=apache2,vim,nano  stable /tmp/fs1
 
  debootstrap --include=apache2,vim,nano  stable /tmp/fs1
 +
 +
On inclue les package Apache2 et nano pour nos conteneurs.
  
 
Preparation du montage du systeme
 
Preparation du montage du systeme
Ligne 36 : Ligne 38 :
  
 
Duplication de l'image deux fois, puis montage des trois systemes de fichier
 
Duplication de l'image deux fois, puis montage des trois systemes de fichier
  cp disc.img disc2.img
+
  cp diskTPconteneur diskTPconteneur2
  cp disc.img disc3.img
+
  cp diskTPconteneur diskTPconteneur3
 
 
mount -o loop disc.img /tmp/fs1
 
mount -o loop disc2.img /tmp/fs2
 
mount -o loop disc3.img /tmp/fs3
 
 
 
On verifie le resultat avec un autre df -h
 
 
 
 
 
Demarrage des conteneurs en chargeant les systemes de fichier.
 
unshare -n -u -p -f -m chroot /tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash";
 
# La commande unshare permet de couper la liaison d'un processus avec les differentes tables de nom
 
# -n : table de nom reseau
 
# -u : table des hostnames
 
 
 
Si la creation du conteneur fonctionne bien : on ne peut pas revenir dans le dossier parent en faisant la commande 'cd ..', et de plus la commande ps ne retourne le resultat suivant :
 
 
 
[[Fichier:Ps.png]]
 
 
 
On voit bien qu'il n'y a pas d'autre processus lancé, on se trouve donc bien dans le conteneur
 
 
 
En lancant donc les trois conteneurs, chacun est alors independant de l'autre, et l'on peut lancer la commande suivante pour voir "l'existence" des trois conteneurs
 
ps aux | grep unshare
 
 
 
 
 
==== Mise en réseau des conteneurs ====
 
Creation du bridge (commutateur virtuel) sur la machine hote
 
ip link add bridge2 type bridge
 
 
 
Sur la machine hote, on crée également les différentes interfaces réseaux (une par conteneur + une pour le mandataire)
 
ip link add vif1 type veth peer name eth0@vif1  #conteneur 1
 
ip link add vif2 type veth peer name eth0@vif2  #conteneur 2
 
ip link add vif3 type veth peer name eth0@vif3  #conteneur 3
 
ip link add vif4 type veth peer name eth1@vif4  #mandataire
 
 
 
Ajout puis activation des differentes interfaces reseaux dans leur bridge respectif.
 
ip link set vif1 master bridge2
 
ip link set vif2 master bridge2
 
ip link set vif3 master bridge2
 
ip link set vif4 master bridge
 
 
 
ip link set vif1 up
 
ip link set vif2 up
 
ip link set vif3 up
 
ip link set vif4 up
 
 
 
On recupere les PID des differents conteneurs
 
ps aux | grep unshare
 
[[Fichier:Grepunshare.png]]
 
 
 
 
 
Il est necessaire "d'envoyer" les differentes interfaces reseaux a leur conteneur respectif
 
ip link set eth0@vif1 netns /proc/[PID CONTENEUR 1]/ns/net name eth0 #conteneur 1
 
ip link set eth0@vif2 netns /proc/[PID CONTENEUR 2]/ns/net name eth0 #conteneur 2
 
ip link set eth0@vif3 netns /proc/[PID CONTENEUR 3]/ns/net name eth0 #conteneur 3
 
 
 
On ajoute ensuite les adresses IP a chaque conteneur
 
 
 
Dans le conteneur 1
 
ip addr add 192.168.1.11/24 dev eth0
 
ip link set eth0 up
 
ip link set lo up
 
 
 
Dans le conteneur 2
 
ip addr add 192.168.1.12/24 dev eth0
 
ip link set eth0 up
 
ip link set lo up
 
 
 
Dans le conteneur 3
 
ip addr add 192.168.1.13/24 dev eth0
 
ip link set eth0 up
 
ip link set lo up
 
 
 
On peut donc alors parfaitement pinger les conteneurs entre eux ainsi qu'avec la machine hote
 
  
On ajoute egalement l'interface eth1 au conteneur 3 qui servira de mandataire
 
  
ip link set eth1@vif4 netns /proc/[PID CONTENEUR 3]/ns/net name eth1
+
  mount -o loop diskTPconteneur /tmp/fs1
ip addr add 172.26.145.140/24 dev eth1
+
  mount -o loop diskTPconteneur2 /tmp/fs2
ip link set eth1 up
+
  mount -o loop diskTPconteneur3 /tmp/fs3
 
 
 
 
==== Mise en place des mandataires inverses ====
 
 
 
==TP Conteneur Reseau==
 
 
 
====Etapes de realisation des conteneurs (a la main)====
 
Creation d'un fichier (utilisé en tant que partition) de 10240 bloc de 1024k octets (Soit un fichier de 10Go)
 
dd if=/dev/zero of=disc.img bs=1024k count=10240
 
 
 
Creation d'un systeme d'un systeme de fichier linux au sein du fichier precedemment créé
 
mkfs disc.img
 
 
 
Creation des dossiers temporaires dans lequel le systeme sera monté
 
mkdir /tmp/fs1
 
mkdir /tmp/fs2
 
mkdir /tmp/fs3
 
 
 
Montage du systeme de fichier dans fs1
 
mount -o loop disc.img /tmp/fs1
 
 
 
La commande df -Ath permet d'avoir la liste des partitions montés par le systeme
 
 
 
[[Fichier:Df_ath.png]]
 
 
 
On voit bien que le /tmp/fs0 propose un emplacement memoire de 10Go
 
 
 
Bootstrap d'un systeme Debian au sein de la partition montée
 
debootstrap --include=apache2,vim,nano  stable /tmp/fs1
 
 
 
Preparation du montage du systeme
 
echo "proc /proc proc defaults 0 0" >> rootfs/etc/fstab
 
 
 
Unmount de la partition
 
umount /tmp/fs1
 
 
 
(On remarque bien que la partition n'est plus montée via df -h)
 
 
 
Duplication de l'image deux fois, puis montage des trois systemes de fichier
 
cp disc.img disc2.img
 
cp disc.img disc3.img
 
 
 
  mount -o loop disc.img /tmp/fs1
 
  mount -o loop disc2.img /tmp/fs2
 
  mount -o loop disc3.img /tmp/fs3
 
  
 
On verifie le resultat avec un autre df -h
 
On verifie le resultat avec un autre df -h
  
[[Fichier:Dfh2.png]]
 
  
 
Demarrage des conteneurs en chargeant les systemes de fichier.  
 
Demarrage des conteneurs en chargeant les systemes de fichier.  
Ligne 173 : Ligne 55 :
 
  # -u : table des hostnames
 
  # -u : table des hostnames
  
Si la creation du conteneur fonctionne bien : on ne peut pas revenir dans le dossier parent en faisant la commande 'cd ..', et de plus la commande ps ne retourne le resultat suivant :
+
Si la creation du conteneur fonctionne bien : on ne peut pas revenir dans le dossier parent en faisant la commande 'cd ..', et de plus la commande ps ne retourne que les processus isolés du conteneur.
  
[[Fichier:Ps.png]]
+
En lancant donc les trois conteneurs, chacun est alors independant de l'autre. On peut lancer sur la machine physique un ps et on observe bien les processus unshare liés à nos conteneurs.
  
On voit bien qu'il n'y a pas d'autre processus lancé, on se trouve donc bien dans le conteneur
 
 
En lancant donc les trois conteneurs, chacun est alors independant de l'autre, et l'on peut lancer la commande suivante pour voir "l'existence" des trois conteneurs
 
ps aux | grep unshare
 
 
[[Fichier:Psaux.png]]
 
  
 
==== Mise en réseau des conteneurs ====
 
==== Mise en réseau des conteneurs ====
Creation du bridge (commutateur virtuel) sur la machine hote
+
Creation du bridge (commutateur virtuel) sur la machine hôte
 
  ip link add bridge2 type bridge
 
  ip link add bridge2 type bridge
  
Ligne 195 : Ligne 71 :
  
 
Ajout puis activation des differentes interfaces reseaux dans leur bridge respectif.
 
Ajout puis activation des differentes interfaces reseaux dans leur bridge respectif.
  ip link set vif1 master bridge2
+
  ip link set vif1 master commutPM
  ip link set vif2 master bridge2
+
  ip link set vif2 master commutPM
  ip link set vif3 master bridge2
+
  ip link set vif3 master commutPM
 
  ip link set vif4 master bridge
 
  ip link set vif4 master bridge
  
Ligne 207 : Ligne 83 :
 
On recupere les PID des differents conteneurs
 
On recupere les PID des differents conteneurs
 
  ps aux | grep unshare
 
  ps aux | grep unshare
[[Fichier:Grepunshare.png]]
 
  
  
Il est necessaire "d'envoyer" les differentes interfaces reseaux a leur conteneur respectif
+
Il faut ensuite connecter les differentes interfaces reseaux du commutateur virtuel à leur conteneur respectif
 
  ip link set eth0@vif1 netns /proc/[PID CONTENEUR 1]/ns/net name eth0 #conteneur 1
 
  ip link set eth0@vif1 netns /proc/[PID CONTENEUR 1]/ns/net name eth0 #conteneur 1
 
  ip link set eth0@vif2 netns /proc/[PID CONTENEUR 2]/ns/net name eth0 #conteneur 2
 
  ip link set eth0@vif2 netns /proc/[PID CONTENEUR 2]/ns/net name eth0 #conteneur 2
Ligne 218 : Ligne 93 :
  
 
Dans le conteneur 1
 
Dans le conteneur 1
  ip addr add 192.168.1.11/24 dev eth0
+
  ip addr add 192.168.1.4/24 dev eth0
 
  ip link set eth0 up
 
  ip link set eth0 up
 
  ip link set lo up
 
  ip link set lo up
  
 
Dans le conteneur 2
 
Dans le conteneur 2
  ip addr add 192.168.1.12/24 dev eth0
+
  ip addr add 192.168.1.3/24 dev eth0
 
  ip link set eth0 up
 
  ip link set eth0 up
 
  ip link set lo up
 
  ip link set lo up
  
 
Dans le conteneur 3
 
Dans le conteneur 3
  ip addr add 192.168.1.13/24 dev eth0
+
  ip addr add 192.168.1.2/24 dev eth0
 
  ip link set eth0 up
 
  ip link set eth0 up
 
  ip link set lo up
 
  ip link set lo up
  
On peut donc alors parfaitement pinger les conteneurs entre eux ainsi qu'avec la machine hote
+
On peut pinger les conteneurs entre eux ainsi qu'avec la machine hôte pour verifier les interconnexions
  
 
On ajoute egalement l'interface eth1 au conteneur 3 qui servira de mandataire
 
On ajoute egalement l'interface eth1 au conteneur 3 qui servira de mandataire
  
 
  ip link set eth1@vif4 netns /proc/[PID CONTENEUR 3]/ns/net name eth1
 
  ip link set eth1@vif4 netns /proc/[PID CONTENEUR 3]/ns/net name eth1
  ip addr add 172.26.145.140/24 dev eth1
+
  ip addr add 172.26.145.3/24 dev eth1
 
  ip link set eth1 up
 
  ip link set eth1 up
 
  
 
==== Mise en place des mandataires inverses ====
 
==== Mise en place des mandataires inverses ====

Version du 19 novembre 2018 à 11:31

TP Systeme Reseau

Vous trouverez sur cette page Wiki tous les travaux relatifs au cours de Systeme Reseau réalisés par Delobelle Matthieu

TP Conteneur Reseau

Etapes de realisation des conteneurs (a la main)

Creation d'un fichier (utilisé en tant que partition) de 10240 bloc de 1024k octets (Soit un fichier de 10Go)

dd if=/dev/zero of=disc.img bs=1024k count=10240

Creation d'un systeme d'un systeme de fichier linux au sein du fichier precedemment créé

mkfs disc.img

Creation des dossiers temporaires dans lequel le systeme sera monté

mkdir /tmp/fs1
mkdir /tmp/fs2
mkdir /tmp/fs3

Montage du systeme de fichier dans fs1

mount -o loop disc.img /tmp/fs1

La commande df -Ath permet d'avoir la liste des partitions montés par le systeme

Df ath.png

On voit bien que le /tmp/fs0 propose un emplacement memoire de 10Go

Bootstrap d'un systeme Debian au sein de la partition montée

debootstrap --include=apache2,vim,nano  stable /tmp/fs1

On inclue les package Apache2 et nano pour nos conteneurs.

Preparation du montage du systeme

echo "proc /proc proc defaults 0 0" >> rootfs/etc/fstab

Unmount de la partition

umount /tmp/fs1

(On remarque bien que la partition n'est plus montée via df -h)

Duplication de l'image deux fois, puis montage des trois systemes de fichier

cp diskTPconteneur diskTPconteneur2
cp diskTPconteneur diskTPconteneur3


mount -o loop diskTPconteneur /tmp/fs1
mount -o loop diskTPconteneur2 /tmp/fs2
mount -o loop diskTPconteneur3 /tmp/fs3

On verifie le resultat avec un autre df -h


Demarrage des conteneurs en chargeant les systemes de fichier.

unshare -n -u -p -f -m chroot /tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash";
# La commande unshare permet de couper la liaison d'un processus avec les differentes tables de nom
# -n : table de nom reseau
# -u : table des hostnames

Si la creation du conteneur fonctionne bien : on ne peut pas revenir dans le dossier parent en faisant la commande 'cd ..', et de plus la commande ps ne retourne que les processus isolés du conteneur.

En lancant donc les trois conteneurs, chacun est alors independant de l'autre. On peut lancer sur la machine physique un ps et on observe bien les processus unshare liés à nos conteneurs.


Mise en réseau des conteneurs

Creation du bridge (commutateur virtuel) sur la machine hôte

ip link add bridge2 type bridge

Sur la machine hote, on crée également les différentes interfaces réseaux (une par conteneur + une pour le mandataire)

ip link add vif1 type veth peer name eth0@vif1   #conteneur 1
ip link add vif2 type veth peer name eth0@vif2   #conteneur 2
ip link add vif3 type veth peer name eth0@vif3   #conteneur 3
ip link add vif4 type veth peer name eth1@vif4   #mandataire

Ajout puis activation des differentes interfaces reseaux dans leur bridge respectif.

ip link set vif1 master commutPM
ip link set vif2 master commutPM
ip link set vif3 master commutPM
ip link set vif4 master bridge
ip link set vif1 up
ip link set vif2 up
ip link set vif3 up
ip link set vif4 up

On recupere les PID des differents conteneurs

ps aux | grep unshare


Il faut ensuite connecter les differentes interfaces reseaux du commutateur virtuel à leur conteneur respectif

ip link set eth0@vif1 netns /proc/[PID CONTENEUR 1]/ns/net name eth0 #conteneur 1
ip link set eth0@vif2 netns /proc/[PID CONTENEUR 2]/ns/net name eth0 #conteneur 2
ip link set eth0@vif3 netns /proc/[PID CONTENEUR 3]/ns/net name eth0 #conteneur 3

On ajoute ensuite les adresses IP a chaque conteneur

Dans le conteneur 1

ip addr add 192.168.1.4/24 dev eth0
ip link set eth0 up
ip link set lo up

Dans le conteneur 2

ip addr add 192.168.1.3/24 dev eth0
ip link set eth0 up
ip link set lo up

Dans le conteneur 3

ip addr add 192.168.1.2/24 dev eth0
ip link set eth0 up
ip link set lo up

On peut pinger les conteneurs entre eux ainsi qu'avec la machine hôte pour verifier les interconnexions

On ajoute egalement l'interface eth1 au conteneur 3 qui servira de mandataire

ip link set eth1@vif4 netns /proc/[PID CONTENEUR 3]/ns/net name eth1
ip addr add 172.26.145.3/24 dev eth1
ip link set eth1 up

Mise en place des mandataires inverses

Configuration du fichier sites-enables/000-default.conf du mandataire inverse (conteneur 3)

<VirtualHost *:80>
 ServerName oli.plil.space
 ServerAdmin webmaster@localhost
 ProxyPass / http://192.168.0.4
 ProxyPassRever / http://192.168.0.4
 ProxyRequests Off
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
 ServerName eti.plil.space
 ServerAdmin webmaster@localhost
 ProxyPass / http://192.168.0.3
 ProxyPassRever / http://192.168.0.3
 ProxyRequests Off
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

11h10 => Serveurs Web unshare OK