Updated Modifié

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
  1. De quel type d’adresses s’agit-il ?

  2. On n’oubliera pas d’activer le drapeau de routage ip_forward pour IPv6 par

    VM2-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

  1. Vérifier qu’on a bien accès à toutes les autres machines depuis chacune en utilisant ping6.
  2. Les tables de routage peuvent être affichées avec ip -6 route.
  3. 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 ou nmcli).

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
    
    
    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. Ou bien simplement avec “ java EchoServer.java“.

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 ?