\documentclass[a4paper,french,12pt]{article}

\title{Panorama des réseaux WAN\\TP2~: IPv6}
\author{Tunui Franken}
\date{Dernière compilation~: \today{} à \currenttime}

\usepackage{styles}
\usepackage{enumitem}
\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}

\maketitle
\clearpage
\tableofcontents

\clearpage

\section{Introduction}

\begin{enumerate}

    \item Quelle est la taille d'un mot de l'en-tête IPv6~?
        Combien de mots comporte l'en-tête d'un paquet IPv4 au minimum~?
        Quelle est la taille d'un paquet IPv6~?

        \emph{Un mot fait la moitié d'un \texttt{DWORD}, soit 16 bits}.
        \emph{L'en-tête du paquet IPv4 fait 5 mots, et la taille du paquet IPv6 est de 1500 octets, avec un en-tête de 40 octets}.

    \item Comment fait un n\oe{}ud, lorsqu'il reçoit une trame Ethernet, pour savoir si c'est un paquet IPv4 ou IPv6~?

        \emph{Il doit regarder le champ \texttt{Version}, qui vaut 4 pour IPv4 et 6 pour IPv6.}

    \item Décrire la différence du traitement de la fragmentation entre IPv4 et IPv6.

        \emph{Avec IPv4, chaque routeur traversé peut fragmenter, alors qu'en IPv6, c'est la source qui fragmente, le paquet n'est ensuite plus fragmenté jusqu'à la destination.}

    \item Expliquer le rôle des adresses IPv6 de type Local Link.

        \emph{Les adresses de lien local ne sont pas routables (elles ne sortent pas des routeurs).}
        \emph{Elles permettent de joindre les passerelles et de faire des demandes \texttt{unicast} sur le réseau local.}
        \emph{La principale utilisation est l'autoconfiguration et le DHCP.}
        \emph{On peut ajouter que comme les adresses sont réutilisables sur différents réseaux (car non routables), ceci permet d'utiliser des adresses simples à retenir pour les communications locales.}

    \item À l'aide de PaquetTracer, connecter 2 machines~:

        \begin{center}
        \includegraphics[width=0.7\linewidth]{./img/pkt_ex1.png}
        \end{center}

        À partir de la machine M1, lancer la commande \texttt{ping fe80:\ldots} sur M2 (ping en link-local).
        Modifier par la suite les adresses de lien local en mettant \texttt{fe80::1} pour M1 et \texttt{fe80::2} pour M2.

\end{enumerate}

\section{Configuration IPv6 sur routeur Cisco}

L'objectif est de réaliser la configuration suivante~:

\begin{center}
\includegraphics[width=\linewidth]{./img/pkt_ex2.png}
\end{center}

\subsection{Configuration statique}

\begin{enumerate}

    \item Quelle est la commande qui nous permet d'avoir des adresses link local~?

        \begin{lstlisting}[gobble=12]
            Router(config-if)# ipv6 address x:x:x:x::x link-local
        \end{lstlisting}

    \item Réaliser la maquette ci-dessus en respectant les adresses IPv6 indiquées.
        Vérifier à l'aide de la commande \texttt{show ipv6} la bonne prise en compte de votre configuration.

        \begin{lstlisting}[gobble=12]
            R1(config)# int g0/0
            R1(config-if)# ipv6 address 2001:828:105:1::1/64
            R1(config-if)# no shut
            R1(config)# int g0/1
            R1(config-if)# ipv6 address 2001:828:105::1/64
            R1(config-if)# no shut
            R1(config-if)# do show ipv6 int brief

            R2(config)# int g0/0
            R2(config-if)# ipv6 address 2001:828:105:2::1/64
            R2(config-if)# no shut
            R2(config)# int g0/1
            R2(config-if)# ipv6 address 2001:828:105::2/64
            R2(config-if)# no shut
            R2(config-if)# do show ipv6 int brief
        \end{lstlisting}

        \begin{center}
        \includegraphics[width=\linewidth]{./img/pc-ipv6-ex2.png}
        \end{center}

    \item Par défaut, pas de routage IPv6, il faut l'activer.
        Quelle est la commande qui permet de le faire~?
        Afficher ensuite la table de routage.

        \begin{lstlisting}[gobble=12]
            R1(config)# ipv6 unicast routing
            R1(config)# do show ipv6 route
        \end{lstlisting}

    \item Ajouter les routes nécessaires pour que tous les équipements puissent communiquer.

        \begin{lstlisting}[gobble=12]
            R1(config)# ipv6 route 2001:828:105:2::/64 2001:828:105::2
            R2(config)# ipv6 route 2001:828:105:1::/64 2001:828:105::1
        \end{lstlisting}

\end{enumerate}

\subsection{EUI-64 --- Extended Unique Identifier}

L'IEEE a défini un identificateur global de 64 bits (format EUI-64) pour les réseaux IEEE 1394 qui vise une utilisation dans le domaine de la domotique.
Les 2 bits \texttt{u} (7\up{e} bit du premier octet) et \texttt{g} (8\up{e} bit du premier octet) ont une signification spéciale~:

\begin{itemize}
    \item \texttt{u} vaut 0 si l'identifiant EUI-64 est universel.
    \item \texttt{g} indique si l'adresse est individuelle ($g = 0$), c'est-à-dire désigne un seul équipement sur le réseau, ou de groupe ($g = 1$), par exemple une adresse multicast.
\end{itemize}

L'dientifiant d'interface dans IPv6 à 64 bits est dérivé de l'EUI-64 en inversant le bit \texttt{u}.
En effet, pour la construction des adresses IPv6, on a préféré utiliser 1 pour marquer l'unicité mondiale.
Cette inversion de la sémantique du bit permet de garder la valeur 0 pour une numérotation manuelle, autorisant à numéroter simplement les interfaces locales à partir de 1.

Voici un schéma qui décrit comment déduire l'\texttt{interface ID} à partir d'une adresse MAC~:

\begin{center}
\includegraphics[width=0.8\linewidth]{./img/eui-mac.png}
\end{center}

\begin{enumerate}\setcounter{enumi}{4}

    \item Configurer l'adresse IPv6 d'un routeur Cisco en utilisant le standard EUI-64.
        Vérifier la bonne prise en compte de votre configuration.

        \emph{On commence par chercher l'adresse MAC de notre interface à configurer~:}

        \begin{lstlisting}[gobble=12]
            R1#show int g0/1 | include address
              Hardware is CN Gigabit Ethernet, address is 0060.708b.2402 (bia 0060.708b.2402)
        \end{lstlisting}

        \emph{On a donc deux 6 groupes de deux nombres hexadécimaux~: \texttt{00 60 70 8b 24 02}.}

        \emph{On peut maintenant inverser le bit \texttt{u} dans le premier octet~:}

        \emph{$00 \rightarrow 00000000 \rightarrow 00000010 \rightarrow 02$.}

        \emph{Après avoir inséré les octets \texttt{FF} et \texttt{FE} au milieu de l'adresse MAC, on obtient alors l'adresse IPv6 suivante~:}
        \emph{\texttt{02:60:70:ff:fe:8b:24:02}.}
        \emph{Affectons-là à l'interface du routeur~:}

        \begin{lstlisting}[gobble=12]
            R1(config-if)# ipv6 address 02:60:70:ff:fe:8b:24:02/64
            R1(config-if)# do show ipv6 int brief
              GigabitEthernet0/0         [up/up]
                FE80::260:70FF:FE8B:2401
                2001:828:105:1::1
              GigabitEthernet0/1         [up/up]
                FE80::260:70FF:FE8B:2402
                2:60:70:FF:FE:8B:24:2
        \end{lstlisting}

\end{enumerate}

\section{Auto-configuration}

Soit la maquette suivante~:

\begin{center}
\includegraphics[width=0.7\linewidth]{./img/ex3.png}
\end{center}

\begin{enumerate}

    \item Configurer l'adresse IPv6 du routeur R2 statiquement.

        \begin{lstlisting}[gobble=12]
            R2(config-if)# ipv6 address 2001:2:3:4::2/64
        \end{lstlisting}

    \item Activer le mode debug des messages Neighbor Discovery de IPv6 sur R1 et R2.

        \begin{lstlisting}[gobble=12]
            R1# debug ipv6 nd
            R2# debug ipv6 nd
        \end{lstlisting}

    \item Configurer maintenant R1 pour qu'il obtienne une adresse IPv6 automatiquement.

        \begin{lstlisting}[gobble=12]
            R1(config)# int g0/0/0
            R1(config-if)# no shut
            R1(config-if)# ipv6 address autoconfig
        \end{lstlisting}

    \item Analyser les messages affichés.

        \begin{lstlisting}[gobble=12]
            *Mar 1 00:18:09.337: ICMPv6-ND: (GigabitEthernet0/0/0) IPv6 Opr Disabled
            *Mar 1 00:18:09.337: ICMPv6-ND: Finished with ND context on  (GigabitEthernet0/0/0) [6]
            *Mar 1 00:18:09.337: ICMPv6-ND: Free ND context on  (GigabitEthernet0/0/0) [6]
            *Mar 1 00:18:09.337: ICMPv6-ND: (Null0) L3 going down
            *Mar 1 00:18:09.337: ICMPv6-ND: (Null0) L3 down
            *Mar 1 00:18:09.337: ICMPv6-ND: [default] Delete all routers on Null0
            *Mar 1 00:18:09.337: ICMPv6-ND: (Null0, FE80::1) Linklocal Down
            *Mar 1 00:18:09.337: ICMPv6-ND: (Null0) IPv6 Opr Dis
            *Mar 1 00:18:09.337: ICMPv6-ND: Finished with ND context on Null0[1]
            *Mar 1 00:18:09.337: ICMPv6-ND: Free ND context on Null0[1]
            *Mar 1 00:18:09.337: ICMPv6-ND: Module shutdown.
            *Mar 1 00:18:09.337: ICMPv6-ND: Shutdown OL prefix database
            *Mar 1 00:18:09.337: ICMPv6-ND: Cleanup OL prefix database
            *Mar 1 00:18:09.337: ICMPv6-ND: Destroyed ND RA Desc Chunk pool

            R1# show ipv6 int b
              GigabitEthernet0/0/0       [up/up]
                FE80::201:43FF:FEE4:2A01
        \end{lstlisting}

\end{enumerate}

\section{Tunnel statique}

Soit la topologie suivante~:

\begin{center}
\includegraphics[width=0.7\linewidth]{./img/ex4.png}
\end{center}

Nous voulons connecter le routeur Futura avec le routeur Destiny en IPv6 sans pour autant configurer IPv6 sur Cryo.
Effectuer cette configuration en utilisant les tunnels statiques.

\paragraph{Étapes à suivre}

\begin{enumerate}

    \item Configuration des adresses IP

        \begin{lstlisting}[gobble=12]
            Futura(config)# int g0/0/0
            Futura(config-if)# ip address 192.168.12.1 255.255.255.0
            Futura(config-if)# no shutdown
            Futura(config)# int loopback 0
            Futura(config-if)# ipv6 address 2001::1/128
            Futura(config-if)# no shutdown

            Cryo(config)# int g0/0/0
            Cryo(config-if)# ip address 192.168.12.2 255.255.255.0
            Cryo(config-if)# no shutdown
            Cryo(config-if)# int g0/0/1
            Cryo(config-if)# ip address 192.168.23.2 255.255.255.0
            Cryo(config-if)# no shutdown

            Destiny(config)# int g0/0/0
            Destiny(config-if)# ip address 192.168.23.3 255.255.255.0
            Destiny(config-if)# no shutdown
            Destiny(config)# int loopback 0
            Destiny(config-if)# ipv6 address 2001::3/128
            Destiny(config-if)# no shutdown
        \end{lstlisting}

    \item Configuration du routage IPv4 et création des loopback IPv4 pour la stabilité des tunnels.

        \begin{lstlisting}[gobble=12]
            Futura(config)# int loopback 0
            Futura(config-int)# ip address 1.1.1.1 255.255.255.0
            Futura(config-int)# exit
            Futura(config)# router eigrp 123
            Futura(config-router)# no auto-summary
            Futura(config-router)# network 192.168.12.0
            Futura(config-router)# network 1.1.1.0

            Cryo(config)# int loopback 0
            Cryo(config-int)# ip address 2.2.2.2 255.255.255.0
            Cryo(config-int)# exit
            Cryo(config)# router eigrp 123
            Cryo(config-router)# no auto-summary
            Cryo(config-router)# network 192.168.12.0
            Cryo(config-router)# network 192.168.23.0
            Cryo(config-router)# network 2.2.2.0

            Destiny(config)# int loopback 0
            Destiny(config-int)# ip address 3.3.3.3 255.255.255.0
            Destiny(config-int)# exit
            Destiny(config)# router eigrp 123
            Destiny(config-router)# no auto-summary
            Destiny(config-router)# network 192.168.23.0
            Destiny(config-router)# network 3.3.3.0
        \end{lstlisting}

    \item Créer les interfaces tunnel.

        \begin{lstlisting}[gobble=12]
            Futura(config)# int tunnel 0
            Futura(config-int)# tunnel source loopback 0
            Futura(config-int)# tunnel destination 3.3.3.3
            Futura(config-int)# tunnel mode ipv6ip

            Destiny(config)# int tunnel 0
            Destiny(config-int)# tunnel source loopback 0
            Destiny(config-int)# tunnel destination 1.1.1.1
            Destiny(config-int)# tunnel mode ipv6ip
        \end{lstlisting}

    \item Vérification de l'établissement du tunnel~:

        \begin{lstlisting}[gobble=12]
            Futura# show interfaces tunnel 0
              Tunnel0 is up, line protocol is up (connected)
            Destiny# show interfaces tunnel 0
              Tunnel0 is up, line protocol is up (connected)
        \end{lstlisting}

    \item Activation du routage IPv6 sur \texttt{loopback 0} et \texttt{tunnel 0} sur Futura et Destiny.

        \begin{lstlisting}[gobble=12]
            Futura(config)# ipv6 unicast-routing
            Futura(config)# ipv6 router rip RIPNG
            Futura(config-rtr)# exit
            Futura(config)# int loopback 0
            Futura(config-if)# ipv6 rip RIPNG enable
            Futura(config-if)# exit
            Futura(config)# int tunnel 0
            Futura(config-if)# ipv6 enable
            Futura(config-if)# ipv6 rip RIPNG enable

            Destiny(config)# ipv6 unicast-routing
            Destiny(config)# ipv6 router rip RIPNG
            Destiny(config-rtr)# exit
            Destiny(config)# int loopback 0
            Destiny(config-if)# ipv6 rip RIPNG enable
            Destiny(config-if)# exit
            Destiny(config)# int tunnel 0
            Destiny(config-if)# ipv6 enable
            Destiny(config-if)# ipv6 rip RIPNG enable
        \end{lstlisting}

    \item Vérification de la route~: la route IPv6 vers 2001::3 doit apparaître.

        \begin{lstlisting}[gobble=12]
            Futura# show ipv6 route
              R   2001::3/128 [120/2]
                  via FE80::2D0:58FF:FEE1:40E1, Tunnel0
        \end{lstlisting}

    \item Faire un ping à partir de Futura, conclusion.

        \begin{lstlisting}[gobble=12]
            Futura#ping 2001::3
              Type escape sequence to abort.
              Sending 5, 100-byte ICMP Echos to 2001::3, timeout is 2 seconds:
              !!!!!
              Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms
        \end{lstlisting}

        \emph{Le succès du ping montre une connexion en IPv6 entre Futura et Destiny.}
        \emph{Comme aucun cable ne les relie, cette connexion passe forcément par Cryo, qui n'est configuré qu'en IPv4.}

        \emph{Un premier routage IPv4 a été fait grâce à EIGRP pour que Futura et Destiny puissent se joindre en IPv4.}
        \emph{Ensuite, un tunnel IPv6 $\rightarrow$ IPv4 a été monté, sur lequel a été déployé un routage IPv6 avec RIPNG\@.}

        \emph{Ceci permet à Futura de router les paquets à destination de l'adresse IPv6 de Destiny par le tunnel.}
        \emph{Grâce à ce tunnel, Cryo peut router ces paquets sans avoir pour autant implémenté IPv6.}

\end{enumerate}

\section{Tunnel dynamique}

Cette technique est applée dynamique parce que la détermination des adresses IPv4 de la destination du tunnel se fait dynamiquement.
L'inconvénient est que cette technique ne supporte pas les protocoles de routage internes.
Nous serons donc obligés d'utiliser soit le routage statique, soit BGP\@.

Il existe deux techniques~: \texttt{automatic 6to4} et \texttt{ISATAP}.
Le préfixe 2002::/16 est réservé à \texttt{6to4}.
Voici comment les adresses sont constituées~:

\begin{center}
\includegraphics[width=0.7\linewidth]{./img/6to4-prefix.png}
\end{center}

Une façon de les calculer automatiquement est la suivante~:

\begin{lstlisting}[gobble=4]
    Destiny(config)# ipv6 general-prefix MYPREFIX 6to4 f0/0
    Destiny# show ipv6 general-prefix
      IPv6 Prefix MYPREFIX, acquired via 6to4
        2002:c0a8:1703::/48
\end{lstlisting}

\begin{enumerate}

    \item Calcul des préfixes IPv6~:

        \emph{Sur les routeurs PacketTracer, le calcul automatique 6to4 n'existe pas.}
        \emph{On va donc entrer les adresses en dur~:}

        \begin{lstlisting}[gobble=12]
            Futura(config)# no int tunnel 0
            Futura(config)# ipv6 general-prefix MYPREFIX 2002:c0a8:c01::/48
            Destiny(config)# no int tunnel 0
            Destiny(config)# ipv6 general-prefix MYPREFIX 2002:c0a8:1703::/48
        \end{lstlisting}

    \item Création du tunnel~:

        \begin{lstlisting}[gobble=12]
            Futura(config)# int tunnel 0
            Futura(config-if)# ipv6 address 2002:c0a8:c01::1/64
            Futura(config-if)# tunnel source g0/0/0
            Futura(config-if)# tunnel mode ipv6ip

            Destiny(config)# int tunnel 0
            Destiny(config-if)# ipv6 address 2002:c0a8:1703::3/64
            Destiny(config-if)# tunnel source g0/0/0
            Destiny(config-if)# tunnel mode ipv6ip
        \end{lstlisting}

    \item Configuration du routage statique~:

        \begin{lstlisting}[gobble=12]
            Futura(config)# ipv6 route 2001::3/128 2002:c0a8:1703::3
            Futura(config)# ipv6 route 2002::/16 tunnel 0
            Destiny(config)# ipv6 route 2001::1/128 2002:c0a8:c01::3
            Destiny(config)# ipv6 route 2002::/16 tunnel 0
        \end{lstlisting}

        \emph{L'interface \texttt{tunnel 0} n'est pas proposée par PacketTracer.}
        \emph{On ne va pas avoir l'équipement nécessaire pour continuer cet exercice.}

\end{enumerate}


\end{document}
