Updated Modifié

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 ou nmcli).

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
    
    
    Faire Ctrl+] puis quit 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

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> pour javac permet de compiler pour un bytecode correspondant à une version plus basse que celle de la machine hôte.

    === Client/serveur simples ===
  1. Compiler les programmes EchoServer et EchoClient (dans un répertoire local puis copier le bytecode dans le répertoire partagé /mnt/partage).
  2. 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
    

  3. Quelle est la différence entre terminer le client par Ctrl-C ou Ctrl-D?
  4. Sur quel port écoute votre serveur? Comment cela est-il configurable?
  5. Quels sont tous les ports utilisés sur VM3-6 (utiliser ss -plat6)?
  6. 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.

  1. Utiliser telnet
    VM1 $ telnet fc00:1234:2::36 1234
    
    Y a-t-il une différence avec java EchoClient?

  2. Utiliser le client python echoclient.py
    VM1 $ python echoclient.py fc00:1234:2::36 1234
    

  3. En quoi cette partie illustre-t-elle le paradigme client/serveur?

API “socket“ et TCP/IP

  1. Capturer chaque session à l’aide de wireshark.
  2. 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)
  3. 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 ?