Le but de ce TP est de construire et utiliser un réseau étendu IPv4 et IPv6, ainsi que de revoir les bases de la programmation réseau.
Il vous est demandé de faire un compte-rendu individuel
à rendre avant la veille du prochain TP 18h00
sur AMETICE.
Vous accompagnerez votre CR d’une archive contenant les fichiers (Vagrantfile
, config.yml
, …) définissant vos VMs.
1. Construction
Corrigé IPv6
Déployez le corrigé du TP précédent. Vérifiez que cela fonctionne bien en mode adresse statique ou automatique.
Nouvelle Configuration Réseau
Nous allons construire ce système mixte IPv4 et IPv6, en attribuant les adresses suivantes à vos 6 machines virtuelles.
LAN1 | LAN2 | LAN3 | LAN4 | LAN1-6 | LAN2-6 | |
---|---|---|---|---|---|---|
réseau | 172.16.2.128/28 | 172.16.2.160/28 | 172.16.2.144/28 | 172.16.2.176/28 | fc00:1234:1::/64 | fc00:1234:2::/64 |
VM1 | 172.16.2.131 | 172.16.2.151 | ||||
VM2 | 172.16.2.132 | 172.16.2.162 | ||||
VM3 | 172.16.2.163 | 172.16.2.183 | ||||
VM1-6 | 172.16.2.156 | auto | ||||
VM2-6 | fc00:1234:1::26 | fc00:1234:2::26 | ||||
VM3-6 | 172.16.2.186 | 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.
Configuration
Vous pouvez déployez l’ensmble de ce réseau de la manière suivante, sachant qu’il faudra finaliser via ansible.
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 ansible. Important: Bien repartir de VMs “neuves” pour tester/mettre en place vos configurations.
2. Utilisation
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
sur VM2-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. === 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 (utiliser
ss -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 ?