%\documentclass[12pt,xcolor=x11names,compress,a4paper]{beamer} \documentclass[15pt,xcolor=x11names]{beamer} \usepackage[utf8]{inputenc} \usepackage[french]{babel} %\usepackage{ucs} \usepackage[T1]{fontenc} %\usepackage{amsmath} %\usepackage{amsfonts} %\usepackage{amssymb} %\usepackage{mathtools} %\usepackage{mathrsfs} \usepackage{verbatim} %\usepackage{color} \usepackage{graphicx} \usepackage{tikz} %\usetikzlibrary{decorations.fractals} \usetikzlibrary{snakes,arrows,shapes} %% Beamer Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \useoutertheme[subsection=false,shadow]{miniframes} %\useoutertheme{infolines} \useinnertheme{default} %\usefonttheme{serif} %\usepackage{palatino} %\usepackage{inconsolata} \setbeamerfont{title like}{shape=\scshape} \setbeamerfont{frametitle}{shape=\scshape} \setbeamercolor*{lower separation line head}{bg=DeepSkyBlue4} \setbeamercolor*{normal text}{fg=black,bg=white} \setbeamercolor*{alerted text}{fg=red} \setbeamercolor*{example text}{fg=black} \setbeamercolor*{structure}{fg=black} % \setbeamercolor*{palette tertiary}{fg=black,bg=black!10} \setbeamercolor*{palette quaternary}{fg=black,bg=black!10} % \definecolor{my-light-blue}{HTML}{D3DCEC} \definecolor{my-dark-blue}{HTML}{093A7A} \definecolor{my-dark-blue2}{HTML}{00688B} \definecolor{my-light-red}{HTML}{FFBABA} \definecolor{my-dark-red}{HTML}{D51111} \definecolor{my-light-green}{HTML}{7BEF71} \definecolor{my-dark-green}{HTML}{00D000} \definecolor{my-light-grey}{HTML}{E6E6E6} % \setbeamertemplate{blocks}[rounded] \setbeamercolor{block body}{bg=my-light-blue} \setbeamercolor{block title}{bg=my-dark-blue2,fg=white} \setbeamercolor{block body alerted}{bg=my-light-red} \setbeamercolor{block title alerted}{bg=my-dark-red,fg=white} \setbeamercolor{block body example}{bg=my-light-green} \setbeamercolor{block title example}{bg=my-dark-green,fg=white} \setbeamertemplate{navigation symbols}{} % From /usr/share/texmf-dist/tex/latex/beamer/themes/outer/beamerouterthemeinfolines.sty \setbeamertemplate{footline}{ \begin{beamercolorbox}[wd=\paperwidth,ht=2.25ex,dp=1ex,right]{parent=palette primary} \scriptsize{ \vspace*{0.1cm}\insertframenumber/\inserttotalframenumber\hspace*{0.1cm} } \end{beamercolorbox} } %\renewcommand{\(}{\begin{columns}} %\renewcommand{\)}{\end{columns}} %\newcommand{\lcol}{\begin{column}[l]{0.5\textwidth}} %\newcommand{\rcol}{\begin{column}[r]{0.5\textwidth}} %\renewcommand{\>}{\end{column}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\sep}{$\; \triangleright \ $} \title[IPv6]{Introduction à IPv6} \author[B. Jonglez]{Baptiste Jonglez} \institute{JDLL 2015} \date[29/03/2015]{29 mars 2015} \begin{document} \begin{frame} \maketitle \end{frame} % Plan : rester abordable. % - carte d'Internet, comment tout ça tient debout, qu'est qu'IP % - problèmes liés à IPv4 : exhaustion, complexité & coût qui s'ensuivent (NAT, CGNAT). Expliquer le NAT (avec des figures plus jolies). Problème du NAT, expliqué simplement : plusieurs personnes ont le même numéro de téléphone ! Plus précisément, pose problème pour certains protocoles (SIP/VoIP), coût énorme en conception et développement, coût du matériel pour les CGNAT + logs % - nouveaux besoins : nombreux appareils, connectivité de bout en bout pour P2P/VOIP/etc (ou pas ?), multihoming % - différences fondamentales : taille de l'espace, auto-configuration % - format des adresses IPv6 % - c'est compliqué ? Il y a le DNS ! % - en pratique, qu'est ce que ça change ? → du point de vue utilisateur, pas grand chose ! C'est juste une évolution nécessaire (et douloureuse). Dual stack (forme de compatibilité) % - mythes : IPv6 n'est pas sécurisé (pas de NAT), IPv6 ne sert à rien parce que personne ne l'a déployé, etc % - références : Lothaire Yarding, blog bortzmeyer, RIPE, présentation Ju % → peut-être trop ambitieux, se limiter à des choses plus pratiques ? \section*{Introduction} \begin{frame} \frametitle{Une carte d'Internet} %\begin{figure}[h] % \centering % \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps} % \caption{} %\end{figure} \end{frame} \begin{frame} \frametitle{Internet Protocol} \begin{alertblock}{Un protocole commun} \textbf{Internet Protocol} (IP) est le protocole commun à toutes les machines d'Internet \end{alertblock} \begin{block}{Service fourni} \begin{itemize} \item Adressage (qui je suis) \item Routage (où je suis et comment me joindre) \item \ldots{} et c'est à peu près tout \end{itemize} \end{block} \end{frame} \begin{frame} \frametitle{Place dans le modèle TCP/IP} \begin{figure}[h] \centering \includegraphics[scale=0.3]{figures/couches.eps} \end{figure} \end{frame} \begin{frame} \begin{figure}[h] \centering \includegraphics[scale=0.6]{figures/Ipv4-exhaust.eps} \caption{Espace libre dans le pool d'adresses IPv4. Crédit : CC-BY-SA Mro (Wikimédia) } \end{figure} \end{frame} \section{Remplacer IPv4} \begin{frame} \frametitle{Remplacer IPv4, pourquoi ?} \begin{block}{IPv4 n'est plus adapté} \begin{itemize} \item 32 bits : \textbf{4 milliards d'adresses} (moins en pratique) \item Complexité \item Nouveaux besoins (mobilité, auto-configuration, multi-homing) \end{itemize} \end{block} Réflexion sur un successeur à IPv4 dès 1993 : \textbf{IPng} \end{frame} % A partir d'ici, tri à faire \section{Typologie} \begin{frame} \frametitle{Place dans le modèle TCP/IP} \begin{figure}[h] \centering \includegraphics[scale=0.3]{figures/couches.eps} \end{figure} \end{frame} \begin{frame} \frametitle{En-tête d'un paquet IPv4} \begin{figure}[h] \centering \includegraphics[scale=0.6]{figures/IPv4_Header.eps} \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Bruno Wenk (Wikimédia)} \end{figure} \end{frame} \begin{frame} \frametitle{En-tête d'un paquet IPv6} \begin{figure}[h] \centering \includegraphics[scale=0.4]{figures/Ipv6_header.eps} \caption{En-tête de paquet IPv4. Crédit : CC-BY-SA Mro (Wikimédia)} \end{figure} \end{frame} \begin{frame} \frametitle{Format de paquet} RFC 2460 \begin{block}{Particularités} \begin{itemize} \item Beaucoup plus simple \item Plus souple : liste chaînée d'en-têtes optionnels \end{itemize} \end{block} \begin{block}{Extensibilité}<2-> Tout est déporté dans le Next Header : \begin{itemize} \item Fragmentation (uniquement réalisée par l'expéditeur) \item Mobilité \item Sécurité (IPsec) \item \og piggyback\fg{} (informations de routage, \ldots{}) \end{itemize} \end{block} \end{frame} \begin{frame} \frametitle{En-tête d'un paquet IPv6} \begin{figure}[h] \centering \includegraphics[scale=0.4]{figures/Ipv6_header.eps} \caption{En-tête de paquet IPv6. Crédit : CC-BY-SA Mro (Wikimédia)} \end{figure} \end{frame} \begin{frame} \frametitle{Format des en-têtes facultatifs} \begin{figure}[h] \centering \includegraphics[scale=0.4]{figures/next-header.eps} \caption{Exemple d'en-tête facultatif via l'utilisation de \og Next Header\fg{}} \end{figure} \end{frame} \begin{frame}[fragile] \frametitle{Format des adresses et adressage} % RFC 4291 \begin{block}{Adresses} \begin{itemize} \item Adresses sur 128 bits \item Notation hexa par bloc de 16 bits \sep \verb+2001:db8:cafe:deca:0:0:0:1+ \item Compression de zéros \sep \verb+2001:db8:cafe:deca::1+ \end{itemize} \end{block} \begin{block}{Sous-réseaux}<2-> \begin{itemize} \item Deux parties : \begin{itemize} \item \textbf{préfixe} ou \textbf{identifiant de sous-réseau} (subnet ID) : partie gauche de l'adresse \item \textbf{identifiant de machine} (host ID) : partie droite \end{itemize} \item notation CIDR : \begin{itemize} \item \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+ \item subnet correspondant \sep \verb+2001:db8:cafe:deca::+ \end{itemize} \end{itemize} \end{block} \end{frame} \begin{frame}[fragile] \frametitle{Exemples d'adresses et des préfixes} \begin{block}{Préfixes} \begin{itemize} \item<1-> Préfixe de documentation \sep \verb+2001:db8::/32+ \item<2-> Préfixe link-local \sep \verb+fe80::/10+ \item<3-> Préfixe multicast \sep \verb+ff02::/10+ \item<4-> Exemple de préfixe \og end-user\fg{} \sep \verb+2001:db8:fada:ba00:/56+ \end{itemize} \end{block} \begin{block}{Adresses}<5-> \begin{itemize} \item Unicast \sep \verb+2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64+ \item Link-local \sep \verb+fe80::a9e:1ff:fe6b:25c9/64+ \item<6-> Notation IPv4 \sep \verb+2001:db8::cafe:192.168.0.1+ égal à \verb+2001:db8::cafe:c0a8:1+ \item<7-> Localhost \sep \verb+::1+ \item<7-> Tout les bits à 0 \sep \verb+::+ \end{itemize} \end{block} \end{frame} \section{Avantages} \begin{frame} \frametitle{Taille de l'espace d'adressage} \begin{alertblock}{IPv4} \begin{itemize} \item Une seule IP publique par abonné \item Adresses \textbf{non routables} et \textbf{non globalement uniques} \item Technologie de traduction d'adresses (NAT) qui casse le \textbf{end-to-end principle} \end{itemize} \end{alertblock} \begin{block}{IPv6}<0> \begin{itemize} \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses \item On ne distribue plus des \textbf{adresses}, mais des \textbf{sous-réseaux} \end{itemize} \end{block} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (1)} \begin{figure}[h] \centering \includegraphics[scale=0.28]{figures/nat1.eps} \caption{L1, L2, L3 sont des adresses locales. Le routeur qui fait du NAT, N3, possède également une adresse publique A.} \end{figure} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (2)} \begin{figure}[h] \centering \includegraphics[scale=0.28]{figures/nat2.eps} \caption{N2 envoie un paquet vers M. Notons que l'on distingue hôte (nœud) et adresse d'une interface.} \end{figure} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (3)} \begin{figure}[h] \centering \includegraphics[scale=0.28]{figures/nat3.eps} \caption{N3 retient qu'il a vu passer un paquet de L2 vers B, et change l'adresse source du paquet pour faire croire que ça vient de lui.} \end{figure} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (4)} \begin{figure}[h] \centering \includegraphics[scale=0.28]{figures/nat4.eps} \caption{M répond à N3, puisque du point de vue de M, c'est N3 qui a envoyé le paquet au départ.} \end{figure} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (5)} \begin{figure}[h] \centering \includegraphics[scale=0.28]{figures/nat5.eps} \caption{N3 se sert de l'information qu'il avait retenu pour renvoyer le paquet à la bonne machine locale.} \end{figure} \end{frame} \begin{frame} \frametitle{Traduction d'adresses (NAT) en IPv4 (6)} \begin{block}{En pratique} \begin{itemize} \item Couple $(source, destination)$ non suffisant : non unique \item TCP et UDP : $(port\ source, port\ destination)$ en plus \item ICMP : \textbf{sequence number} et type de paquet \end{itemize} \end{block} \begin{alertblock}{Bref\ldots{}}<2-> C'est le mal ! \begin{itemize} \item Pas de communication de bout en bout \item Dépend d'une couche supérieure (transport, ICMP) \item Système \textbf{avec état} : SPOF (Single Point Of Failure) \end{itemize} \end{alertblock} \uncover<3->{Et très bientôt, \textbf{Carrier-grade NAT} (CGNAT) au niveau du FAI} \end{frame} \begin{frame} \frametitle{Espace d'adressage} \begin{alertblock}{IPv4} \begin{itemize} \item Une seule IP publique par abonné \item Adresses \textbf{non routables} et \textbf{non globalement uniques} \item Technologie de traduction d'adresses (NAT) qui casse le \textbf{end-to-end principle} \end{itemize} \end{alertblock} \begin{exampleblock}{IPv6}<2-> Chaque machine a une adresse globalement routable ! \begin{itemize} \item Plus petit sous-réseau : \textbf{/64}, soit $2^{64}$ adresses \item On ne donne plus des \textbf{adresses}, mais des \textbf{sous-réseaux} \end{itemize} \end{exampleblock} \end{frame} \begin{frame}[fragile] \frametitle{Attribution d'adresses} \begin{block}{IPv4} \begin{itemize} \item Attribué par DHCP \item Peut changer, car c'est le serveur DHCP qui décide \end{itemize} \end{block} \begin{block}{IPv6}<2-> Stateless autoconfiguration : \begin{itemize} \item Le routeur annonce son préfixe \sep \verb+2001:db8:deca::/64+ \item Chaque machine \textbf{choisit} son adresse (au hasard, ou calculé à partir de l'adresse MAC, d'où le /64). \sep Unicité\ldots{} \end{itemize} \end{block} \begin{exampleblock}{Avantages}<3-> \begin{itemize} \item \textbf{Sans état} \item Beaucoup plus simple et rapide \item Plusieurs routeurs peuvent annoncer leur préfixe \end{itemize} \end{exampleblock} \end{frame} \begin{frame}[fragile] \frametitle{Adresses link-local} Préfixe \verb+fe80::/10+ \begin{block}{Principe} \begin{itemize} \item Toujours présente sur une interface, sans configuration \item Calculé via l'adresse MAC (unicité) \item Non routable \end{itemize} \end{block} \begin{block}{Intérêt}<2-> \begin{itemize} \item Permet de communiquer avec les machines du même réseau L2 \item Découverte de services, informations de routage, \ldots{} \end{itemize} \end{block} \end{frame} \section{Cohabitation} \begin{frame}[fragile] \frametitle{Cohabitation} \begin{block}{Dual stack} \begin{itemize} \item IPv4 et IPv6 peuvent cohabiter ! \end{itemize} \end{block} \begin{block}{DNS}<2-> \begin{itemize} \item Deux enregistrements dans le DNS \begin{itemize} \item example.net A 192.168.42.1 \item example.net AAAA \verb+2001:db8::1337:1+ \end{itemize} \item On essaie d'abord l'IPv6, puis l'IPv4. Code transparent ! \begin{itemize} \item En C, utiliser \texttt{getaddrinfo()} \end{itemize} \end{itemize} \end{block} \begin{alertblock}{Écoute sur un socket}<3-> \begin{itemize} \item Problème : besoin de deux sockets qui écoutent ? \item<4-> Non ! Un seul socket qui fait tout. \item<4-> Astuce : adresses IPv4-mapped \sep \verb+::ffff:192.168.42.1+ \end{itemize} \end{alertblock} \end{frame} \section*{Conclusion} \begin{frame} \frametitle{Conclusion} \begin{block}{Avantages} \begin{itemize} \item Espace plus grand, plus besoin de NAT \item Auto-configuration : ça juste marche ! \item Cohabitation grâce au DNS \item Applications prêtes depuis 15 ans \end{itemize} \end{block} \begin{block}{Qu'est ce qu'on attend ?}<2-> \begin{itemize} \item Déploiement au niveau hôtes (\og fournisseurs de contenu\fg{}) \begin{itemize} \item Google, Facebook, plein de petits \end{itemize} \item Déploiement des FAI \begin{itemize} \item Free, FDN, Illyse \ldots mais pas \alert{Orange} \end{itemize} \end{itemize} \end{block} \begin{block}{En attendant}<3-> Plein de technologies de transition pour s'amuser (6to4, 6in4, Teredo, NAT64, DNS64), tunnel brokers \end{block} \end{frame} \begin{frame} \frametitle{Questions ?} \begin{figure}[h] \centering \includegraphics[scale=0.4]{figures/aviancarrier.jpg} \caption{RFC 6214 : Avian carriers over IPv6 !} \end{figure} \end{frame} \end{document}