Rendu des TPs
Les TPs sont évalués par un contrôle continu, ie par des rendus de TP
(en début d’année) ainsi qu’un projet (en fin de semestre).
Vous devez rendre votre compte-rendu individuel pour ce TP (sur
AMETICE)
au plus tard mardi 19/11 à 18h00. Vous accompagnerez votre CR, le cas échéant, d’une archive contenant les fichiers (Vagrantfile
, config.sls
, …) définissant vos VMs.
1. Corrigé du TP n°1
Avant de continuer, vérifier que la box est bien installée
$ vagrant box list m1reseaux (virtualbox, 0)
Si vous ne l’avez jamais fait, et avez donc des problèmes de quotas, changer l’endroit où virtualbox
stocke ses images-disques.
VBoxManage setproperty machinefolder "/tmp"
Se reporter à la FAQ en cas de souci avec les VMs
Télécharger le corrigé du TP précédent. Dans chaque répertoire, faire
vagrant up
Lire puis appliquer la configuration salt (en root dans la VM).
VM # salt-call -l info state.apply
Vérifier que tout fonctionne correctement.
2. Un Réseau IPv6
Créer un dossier nommé tp2,
$ mkdir tp2
Créer trois nouvelles machines VM1-6
, VM2-6
et VM3-6
sous Debian dotées des interfaces réseaux et associées aux LANs indiqué sur le schéma.
On va voir dans la section suivante comment configurer VM2-6
comme routeur IPv6 entre les deux LAN.
2.1. Configuration des Machines
Important: Bien penser à désactiver IPv4 dans chaque configuration créée.
Il est préférable de déterminer et tester les paramètres un par un
(en utilisant l’interface graphique ou la commande ip
).
Une fois ces paramètres déterminés, vous pouvez faire la configuration en salt.
Si vous faites directement la configuration en salt, alors
bien lire préalablement cette partie.
NB Vous devrez rendre la configuration salt.
On prendra pour adresses:
- pour tout le LAN1-6 :
fc00:1234:1::/64
- pour tout le LAN2-6 :
fc00:1234:2::/64
- IP
VM1-6
:fc00:1234:1::1
- IP
VM2-6
:fc00:1234:1::2
- IP
VM2-6
:fc00:1234:2::2
- IP
VM3-6
:fc00:1234:2::3
- De quel type d’adresses s’agit-il ?
- On n’oubliera pas d’activer le drapeau de routage
ip_forward
pour IPv6 parVM2-6:~$ sudo sysctl -w net.ipv6.conf.all.forwarding=1
ou bien directement dans/etc/sysctl.conf
(voir TP1 pour la configuration sous Debian)
2.2. Vérifications
- Vérifier qu’on a bien accès à toutes les autres machines depuis
chacune en utilisant
ping6
. - Les tables de routage peuvent être affichées avec
ip -6 route
. - Faire une capture du trafic sur
VM2-6
et vérifier que le trafic correspond fonctionnellement à celui de ARP adapté à IPv6.
2.3. Configuration avec salt
Ci-dessous un exemple de configuration des adresses IPv6 en mode statique ou en automatique (SLAAC).
# en statique eth1: network.managed: - enabled: True - type: eth - proto: none - enable_ipv4: false - ipv6proto: static - enable_ipv6: true - ipv6_autoconf: no - ipv6ipaddr: fc00:1234:1::1 - ipv6netmask: 64
## Configuration de la route vers LAN2-6 via ``VM2-6`` routes: network.routes: - name: eth1 - routes: - name: LAN2-6 ipaddr: fc00:1234:2::/64 gateway: fc00:1234:1::2
3. Réseau Hétérogène
3.1. Un nouveau réseau
Nous allons construire ce système mixte IPv4 et IPv6, en attribuant les adresses suivantes à vos 6 machines virtuelles.
LAN1 | LAN2 | LAN3-6 | LAN4-6 | LAN1-6 | LAN2-6 | |
---|---|---|---|---|---|---|
réseau | 172.16.2.128/28 | 172.16.2.160/28 | fc00:1234:3::/64 | fc00:1234:4::/64 | fc00:1234:1::/64 | fc00:1234:2::/64 |
VM1 | 172.16.2.131 | fc00:1234:3::1 | ||||
VM2 | 172.16.2.132 | 172.16.2.162 | ||||
VM3 | 172.16.2.163 | fc00:1234:4::3 | ||||
VM1-6 |
fc00:1234:3::16 | auto | ||||
VM2-6 |
fc00:1234:1::26 | fc00:1234:2::26 | ||||
VM3-6 |
fc00:1234:4::36 | auto |
Si l’on ne souhaite pas utiliser l’auto-configuration IPv6, on pourra
utiliser fc00:1234:1::16 pour VM1-6
dans LAN1-6
et fc00:1234:2::36 pour VM3-6
dans LAN2-6.
3.2. Configuration
Vous pouvez déployez l’ensemble de ce réseau de la manière suivante,
sachant qu’il faudra finaliser via salt
.
Cela peut se faire soit de manière manuelle, puis de manière entièrement automatisée (éventuellement en fin de TP, si vous préférer bien tester et utiliser au préalable), soit de manière entièrement automatisée.
- Configuration manuelle
-
Mettre en place tous ces paramètres réseaux à la main:
adresses et tables de routage
(au choix méthode graphique ou bien en CLI avec
ip
ounmcli
). - Configuration automatisée
-
Déployez votre configuration avec
salt
. Important: Bien repartir de VMs “neuves” pour tester/mettre en place vos configurations.
4. Utilisation en simple et double pile
Installation d’un service echo sur “VM3-6“
Un service sur “VM3-6“
Nous allons installer un serveur echo
(RFC 862) sur VM3-6
afin de
profiter de notre réseau. Vous aurez besoin des droits administration
dans ce qui suit.
- Réinstaller un accès à Internet. Pour cela, il faut remettre une passerelle par défaut et un DNS via un appel DHCP.
``VM3-6`` # dhclient eth0
- Installer le paquet
inetd
, qui est un méta-service réseau.``VM3-6`` # apt install inetutils-inetd * Not starting internet superserver: no services enabled.
- Vous pouvez désactiver la route par défaut (Attention à ne pas casser la configuration réseau avec le routeur).
VM3-6
# ip route del default
Ensuite il faut activer le service echo
.
- Tout d’abord, l’ajouter dans la base de données de
inetd
:``VM3-6`` # update-inetd --add "echo stream tcp6 nowait nobody internal"
- Lancer
inetd
``VM3-6`` # service inetutils-inetd start * Starting internet superserver inetd [ OK ]
- Vérifier que le service est bien démarré
``VM3-6`` $ service inetutils-inetd status * Active: active (running)
- Si il est affiché
Active: active (exited)
, redémarrer le service:``VM3-6`` # service inetutils-inetd restart
Tester depuis “VM1-6“
Dans VM1-6
- Tester le service :
``VM1-6`` $ telnet fc00:1234:2::36 echo Trying fc00:1234:2::36 Escape character is '^]'. test test echo echo
FaireCtrl+]
puisquit
pour sortir du telnet. - Observer les trames avec
wireshark
surVM2-6
Compte-rendu et fichiers: Compléter le fichier config.yml
pour la
section précédente.
On rappelle que pour installer un paquet (ie un logiciel), la syntaxe est
- name: Installer radvd package: name: nom_du_paquet state: present
Voir aussi avec les TPs précédents.
Serveur Applicatif IPv6
Documentation et Exemples
- Documentation: pages de man et le cours et le cours L3 Applications Réseaux. Vous pouvez utiliser les exemples suivants
- code serveur en Java:
EchoServer.java
, - code client en Java:
EchoClient.java
, - code serveur en C:
echoserveur.c
, - code client en C:
echoclient.c
, - code serveur en C/IPv6:
echoserveur6.c
, - code client en C/IPv6:
echoclient6.c
, - client python:
echoclient.py
Remarques
- Penser à utiliser les répertoires partagés (
/vagrant
et/mnt/partage
) pour faciliter les manipulations de fichiers.
- Il n’est pas toujours possible de compiler les fichiers
.c
directement sur la machine hôte (si l’architecture des VMs est en 32 bits).
- L’option
-target <version>
pourjavac
permet de compiler pour un bytecode correspondant à une version plus basse que celle de la machine hôte. Ou bien simplement avec “ java EchoServer.java“.
Client/serveur simples
- Compiler les programmes
EchoServer
etEchoClient
(dans un répertoire local puis copier le bytecode dans le répertoire partagé/mnt/partage
). - Exécuter les programmes clients et serveurs sur deux VMs différentes
``VM3-6`` $ java EchoServer 1234
``VM1-6`` $ java EchoClient fc00:1234:2::36 1234
- Quelle est la différence entre terminer le client par
Ctrl-C
ouCtrl-D
? - Sur quel port écoute votre serveur? Comment cela est-il configurable?
- Quels sont tous les ports utilisés sur
VM3-6
(utiliserss -plat6
)? - Pouvez-vous lancer un serveur en java et un serveur en C en même temps ? Pourquoi ?
Autres Clients
Vous pouvez utiliser d’autres clients pour vous connecter au serveur.
- Utiliser
telnet
VM1 $ telnet fc00:1234:2::36 1234
Y a-t-il une différence avecjava EchoClient
? - Utiliser le client python
echoclient.py
VM1 $ python echoclient.py fc00:1234:2::36 1234
- En quoi cette partie illustre-t-elle le paradigme client/serveur?
API “socket“ et TCP/IP
- Capturer chaque session à l’aide de
wireshark
. - Mettre en correspondance les appels de fonctions de l’API socket et le trafic réseau (Indication: modifier le code afin de pouvoir faire des pauses)
- Constatez-vous des différences à l’utilisation des différents clients ?
Serveur Applicatif IPv6
Pouvez vous vous connecter sur VM3-6
avec le client python sur VM1 ?
Sur VM2 ? Pourquoi ?