%!TEX root = /Users/nolith/Documents/Projects/presen/intro_ipv6/ipv6.slides.tex %decommentare per stampare + slide su una sola pagina %\usepackage{pgfpages} %\pgfpagesuselayout{4 on 1}[a4paper,border shrink=5mm] % =-> Tema Beamer. %\usetheme{Warsaw} % {progressbar} o altro... %\usecolortheme{progressbar} % {progressbar} or {dolphin} or {wolverine} or {whale} or {crane} or {seagull} %\usefonttheme{professionalfonts} % {progressbar} or {structureitalicserif} or {serif} %\useinnertheme{} %\useoutertheme{} % Progress Bar %\useinnertheme{progressbar} %\useoutertheme{progressbar} % \setbeamercovered{dynamic} % o altro (possibly just delete it) \usetheme[pageofpages=di,% String used between the current page and the % total page count. bullet=circle,% Use circles instead of squares for bullets. titleline=true,% Show a line below the frame title. alternativetitlepage=true,% Use the fancy title page. titlepagelogo=logo-lart,% Logo for the first page. % watermark=licenza_small,% Watermark used in every page. % watermarkheight=5px,% Height of the watermark. %watermarkheightmult=4,% The watermark image is 4 times bigger % than watermarkheight. ]{Torino} %colori per i box \setbeamercolor{lowercolor}{fg=black,bg=white} \setbeamercolor{uppercolor}{fg=black,bg=chameleongreen2} \newenvironment{colorblock} {\begin{beamerboxesrounded}[upper=uppercolor,lower=lowercolor,shadow=true]} {\end{beamerboxesrounded}} \newenvironment{tl_itm_year}[1] {\begin{colorblock}{#1}\begin{itemize}} {\end{itemize}\end{colorblock}} \newcommand{\tlelement}[3] {\only{\begin{tl_itm_year}{#2} #3 \end{tl_itm_year}}} \usepackage{multirow} \usepackage{array} \newcolumntype{x}[1]{% >{\centering\hspace{0pt}}p{#1}}% \newcommand{\tn}{\tabularnewline} \newcommand{\tnhl}{\tabularnewline\hline} %\beamertemplatetransparentcoveredhigh % =-> Package relativi alla gestione della Lingua. \usepackage[italian]{babel} \usepackage[utf8]{inputenc} %\usepackage{lmodern} % <- Aggiunta nel caso si abiliti T1 e siano assenti i Font Cm-Super. %\usepackage[T1]{fontenc} % <---- Aggiunta Consigliata. % O altro. Ricorda che 'encoding' e 'font' dovrebbero combaciare. % Se T1 non risulta ottimo, prova a cancellare la riga con fontenc. % Package relativi all'uso di materiale matematico. %\usepackage{amsmath} %\usepackage{amsfonts} %\usepackage{amssymb} % Per costruzione Tabelle. %\usepackage{booktabs} %Per gestione "figure in testo" %\usepackage{wrapfig} % Per gestione url. \usepackage{url} % Package relativi all'uso di codice di programmazione [alternativa a verbatim]. % \usepackage{listings} % Package per la gestione "frecce". %\usepackage{pifont} \usepackage{bytefield} %definiamo i bitbox colorati \newcommand{\colorbitbox}[3]{% \rlap{\bitbox{#2}{\color{#1}\rule{\width}{\height}}}% \bitbox{#2}{#3}} \usepackage{tikz} \usetikzlibrary{fit,arrows,calc,chains,positioning} %immagini per tikz \pgfdeclareimage{schermo}{immagini/schermo} \pgfdeclareimage{case}{immagini/case} \pgfdeclareimage{router}{immagini/router} \pgfdeclareimage{nuvola}{immagini/nuvola} \pgfdeclareimage{firewall}{immagini/firewall} %stili per tikz \tikzstyle{subnet}+=[rectangle,very thin,draw=gray] \tikzstyle{olink}+=[color=chameleongreen1,thick] %corregge il warning sulla dimensione dei font \renewcommand{\fontsubfuzz}{1pt} % Directory ove sono presenti le Immagini. \graphicspath{{immagini/}} % Titolo ! \title{Introduzione a IPv6} \author{Alessio Caiazza} \institute{ \scriptsize %Relatori: \\ %Ing. Tommaso Pecorella \\ %Prof. Romano Fantacci \\ %\vspace{0.25in} Gestione e sicurezza delle reti di telecomunicazione \\ Università degli Studi di Firenze \\ Facoltà di Ingegneria%\\Dipartimento di Informatica } \date{\today} %\date{28 settembre 2009} % Per inserire il Logo dell'Univ. \pgfdeclareimage[height=1.15cm]{LogoUniF}{immagini/LogoUniF} \logo{\pgfuseimage{LogoUniF}} % Utilizza l'outline %\AtBeginSection[] %{ % \begin{frame} % \frametitle{Outline} % \tableofcontents[currentsection] % \end{frame} %} \AtBeginSubsection[] { \begin{frame} \frametitle{Sommario} \tableofcontents[subsectionstyle=show/shaded/hide] \end{frame} } % Inizio Presentazione. \begin{document} % Prima pagina \begin{frame}[t,plain] \titlepage \end{frame} % Indice %\frame{\tableofcontents} \section{Perch\'e IPv6} \subsection{IPv6} \begin{frame}\frametitle{IPv6} IPv6 \`e la nuova versione del protocollo IP, \`e stato progettato per risolvere le debolezze di IPv4 e per esaltarne i punti di forza. %\begin{itemize}[<+->] % \item Un indirizzo IPv6 \texttt{2001:0db8:85a3:08d3:1319:8a2e:0370:7344} % \item la notazione CIDR per i prefix %\end{itemize} \vspace{1.5cm} \pause \begin{colorblock}{Vantaggi di IPv6} \begin{itemize} \item Maggior spazio di indirizzamento \item Abolizione dei NAT \item Header semplificato \item Autoconfigurazione \end{itemize} \end{colorblock} \end{frame} \subsection{Timeline} \begin{frame}[t]\frametitle{Gli indirizzi IP stanno finendo?} \begin{tikzpicture}[timeline/.style={->,color=chameleongreen1,thick}, every text node/.style={tiny text}, year label/.style={anchor=south west,rotate=45}, today/.style={<-,very thick,draw,color=chameleongreen3}, fact label/.style={anchor=east,yshift=-.7cm,rotate=45},] \draw[timeline] (-.5,0) -- (11.5,0); %red line \setbeamercovered{invisible} \uncover{ \draw[timeline,color=red] (8,0) -- (11.5,0);} \uncover{ \draw (9,0) node[year label] (2011) {\small \color{red}{2011}} +(0,-3pt) -- +(0,3pt); \draw (9.5,0) node[year label] (2012) {\small \color{red}{2012}} +(0,-3pt) -- +(0,3pt); \path[today,color=red] (2011) -- +(0,+1cm); \path[today,color=red] (2012) -- +(0,+1cm); } \setbeamercovered{dynamic} \draw (0,0) node[year label] (1993) {\small 1993} +(0,-3pt) -- +(0,3pt); \draw (1,0) node[year label] (1995) {\small 1995} +(0,-3pt) -- +(0,3pt); \draw (2,0) node[year label] (1997) {\small 1997} +(0,-3pt) -- +(0,3pt); \draw (3,0) node[year label] (1999) {\small 1999} +(0,-3pt) -- +(0,3pt); \draw (3.5,0) node[year label] (2000) {\small 2000} +(0,-3pt) -- +(0,3pt); \draw (5,0) node[year label] (2003) {\small 2003} +(0,-3pt) -- +(0,3pt); \draw (5.5,0) node[year label] (2004) {\small 2004} +(0,-3pt) -- +(0,3pt); \draw (6,0) node[year label] (2005) {\small 2005} +(0,-3pt) -- +(0,3pt); \draw (6.5,0) node[year label] (2006) {\small 2006} +(0,-3pt) -- +(0,3pt); \draw (7.5,0) node[year label] (2008) {\small 2008} +(0,-3pt) -- +(0,3pt); \draw (8,0) node[year label] (2009) {\small 2009} +(0,-3pt) -- +(0,3pt); \draw (11,0) node[year label] (2016) {\small 2016} +(0,-3pt) -- +(0,3pt); %freccie today \only{\path[today] (1993) -- +(0,+1cm);} \only{\path[today] (1995) -- +(0,+1cm);} \only{\path[today] (1997) -- +(0,+1cm);} \only{\path[today] (1999) -- +(0,+1cm);} \only{\path[today] (2000) -- +(0,+1cm);} \only{\path[today] (2003) -- +(0,+1cm);} \only{\path[today] (2004) -- +(0,+1cm);} \only{\path[today] (2005) -- +(0,+1cm);} \only{\path[today] (2006) -- +(0,+1cm);} \only{\path[today] (2008) -- +(0,+1cm);} \only{\path[today] (2009) -- +(0,+1cm);} %fatti \draw (1993) node[fact label] {\tiny CIDR}; \uncover{ \draw (1995) node[fact label] {\tiny IPv6}; } \uncover{ \draw (1997) node[fact label] {\tiny SURFNet}; } \uncover{ \draw (1999) node[fact label] {\tiny IPv6 Forum}; } \uncover{ \draw (2000) node[fact label] {\tiny SixXS}; } \uncover{ \draw (2003) node[fact label] {\tiny Parte 6bone - Asia}; } \uncover{ \draw (2004) node[fact label] {\tiny Supporto a IPv6 dai vendor}; } \uncover{ \draw (2005) node[fact label] {\tiny USA};} \uncover{ \draw (2006) node[fact label] {\tiny Termina 6bone}; } \uncover{ \draw (2008) node[fact label] {\tiny Root DNS - UE - Beijing}; } \uncover{ \draw (2009) node[fact label] {\tiny OGGI}; } \end{tikzpicture} \tlelement{1}{1993}{\item Viene introdotto CIDR per arginare il problema della fine degli indirizzi IP.} \tlelement{2}{1995}{\item Nasce ufficialmente IPv6 (RFC 1752).} \tlelement{3}{1997}{\item SURFNet, maintainer della rete accademica olandese, migra a IPv6.} \tlelement{4}{1999}{\item Nascita di IPv6Forum e delle task force regionali.} \tlelement{5}{2000}{\item Nasce SixXS, uno dei più grandi tunnel broker.} \tlelement{6}{2003}{\item Parte il testbed 6bone\item Giappone, Cina e Corea del Sud annunciano di voler diventare leader nel settore IPv6.} \tlelement{7}{2004}{\item La maggior parte degli apparati di rete supportano IPv6.} \tlelement{8}{2005}{\item Il governo USA richiede che tutti i backbone delle agenzie federali migrino a IPv6 entro il 2008.\item Sify, ISP indiano, fornisce connettività IPv6 end-user.\item Tony Hain di Cisco Systems pubblica uno studio stimando la fine degli indirizzi IPv4 tra il 2009 e il 2016.} \tlelement{9}{2006}{\item Viene dichiarata conclusa con successo la sperimentazione 6bone.} \tlelement{10}{2008}{\item I root DNS sono raggiungibili anche in IPv6.\item La Comunità Europea richiede l'adozione di IPv6 per almeno il 25\% della popolazione comunitaria entro il 2010.\item La Cina, con le olimpiadi di Beijing, fa il più grande uso mai visto di tecnologia IPv6.} \tlelement{11}{2009} {\item A oggi gli studi di Geoff Huston individuano la fine degli indirizzi IPv4 fra agosto 2011 e giugno 2012.} \end{frame} \subsection{Vantaggi principali} \begin{frame}[plain] \setbeamercovered{invisible} \tikzstyle{every picture}+=[remember picture] \tikzstyle{v6 arrow}+=[<<-,ultra thick,draw] \tikzstyle{ipv4}+=[rectangle,minimum size=1cm,fill=chameleongreen1,draw=chameleongreen3] \tikzstyle{na} = [baseline=-.5ex] \vspace{12em} \begin{itemize} \item<2-> Spazio di indirizzamento IPv4 \tikz[na] \node[coordinate] (ipv4_text) {}; \begin{itemize} \item<3-> $2^{32} = 4`294`967`296 $ indirizzi \end{itemize} \item<4-> Spazio di indirizzamento IPv6 \tikz[na] \node[coordinate] (ipv6_text) {}; \begin{itemize} \item<5-> $2^{128} = 340`282`366`920`938`463`463`374`607`431`768`211`456$ indirizzi \item<6-> Per mantenere le proporzioni dovremmo colorare di bianco l'intera superficie del Sistema Solare! \item<7-> Pi\`u di $6.66 \cdot 10^{23}$ indirizzi per metro quadrato della superficie terrestre (cioè 666 mila miliardi di miliardi). \end{itemize} \end{itemize} \begin{tikzpicture}[remember picture,overlay] \node at ($(current page.center) + (0,2cm) $) [ipv4] (ipv4) {} ; \coordinate (ipv6) at ($ (ipv4) + (2cm,-.5cm) $); \path[->]<2-> (ipv4_text) edge [bend right] (ipv4); \path[->]<4-> (ipv6_text) edge [bend right] (ipv6); \begin{actionenv}<6-> %\path[v6 arrow] (current page.north west) -- +(-1cm,-1cm); \path[v6 arrow] (current page.north) -- +(0,-.5cm); %(current page.south); \path[v6 arrow] (current page.south) -- +(0,+.5cm); \path[v6 arrow] (current page.west) -- +(+.5cm,0); \path[v6 arrow] (current page.east) -- +(-.5cm,0); \end{actionenv} \end{tikzpicture} \end{frame} \begin{frame}\frametitle{Network Address Translation (NAT)} %\begin{actionenv} Il Network Address Translation (NAT) è una tecnica che consiste nel modificare gli indirizzi IP dei pacchetti in transito su un sistema che agisce da router. \pause %Viene detto IP masquerading un caso particolare di source NAT, in cui le connessioni generate da un insieme di computer vengono "presentate" verso l'esterno con un solo indirizzo IP. %\pause %Il NAT non è ben visto dai puristi delle reti, in quanto mina profondamente la semplicità di IP, e in particolare viola il principio della comunicazione "da qualsiasi host a qualsiasi host" (any to any). Questa critica "filosofica" si ripercuote in conseguenze pratiche: \begin{itemize} \item L'instradamento dei pacchetti viene a dipendere anche da caratteristiche di livello di trasporto. \item Le configurazioni NAT possono diventare molto complesse e di difficile comprensione. \item L'apparato che effettua il NAT ha bisogno di mantenere in memoria lo stato delle connessioni attive in ciascun momento. \item Alcune applicazioni inseriscono nel payload informazioni relative al livello IP o TCP/UDP. \item IL NAT penalizza fortemente il peer-to-peer e tutti i programmi per la condivisione di file. \end{itemize} %\end{actionenv} %\begin{actionenv} %%questo riporta l'immagine in alto %%\vspace{-7cm} %\begin{center} % \includegraphics[scale=.37]{nat} %\end{center} %\end{actionenv} % \end{frame} \begin{frame}[fragile]\frametitle{Header semplificato} \begin{columns} \begin{column}{5.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{5.5cm} \begin{actionenv} \begin{colorblock}{Vantaggi di IPv6} \begin{itemize} \item<2-> Lunghezza fissa 40 byte \item<3-> Rimosso il controllo di errore \item<4-> Rimossa la frammentazione \item<5-> Header Extensions \end{itemize} \end{colorblock} \end{actionenv} \end{column} \end{columns} \end{frame} \begin{frame}\frametitle{Autoconfigurazione} \begin{itemize} %\begin{columns} % the "c" option specifies center vertical alignment %\column{.4\textwidth} % column designated by a command \item Anche in assenza di un router i nodi connessi allo stesso switch sono in grado di {\color{chameleongreen3}generare autonomamente un indirizzo locale per garantire la comunicazione}. (link-local unicast) \item Il comportamento predefinito di un router è di {\color{chameleongreen3}annunciare la propria rete affinch\'e i nodi possano generare autonomamente un indirizzo}. (global unicast) %\column{.6\textwidth} %\includegraphics[scale=.35]{calcio} %\end{columns} \end{itemize} \end{frame} \section{IPv6 nel dettaglio} % (fold) \subsection{Struttura di un indirizzo} % (fold) \begin{frame}\frametitle{Struttura di un indirizzo} Un indirizzo IPv6 \`e un dato a 128 bit. Si utilizza una rappresentazione a gruppi di 4 cifre esadecimali separati dal simbolo ``\texttt{:}''\\ \begin{center} \texttt{2001:0db8:2c05:0000:0000:0000:0000:0027} \end{center} \pause o in modo pi\`u contratto\\ \begin{center} \texttt{2001:db8:2c05::27} \end{center} \`e infatti possibile omettere gli zeri di sinistra in ogni blocco e si pu\`o introdurre \underline{una sola volta} la notazione ``\texttt{::}'' che viene espansa in gruppi di \texttt{0000} fino a completare l'indirizzo. \end{frame} \begin{frame}\frametitle{Struttura di un indirizzo (cont.)} Si definisce \emph{site} una rete amministrata da un unico gestore, il \emph{global routing prefix} è lo spazio di indirizzamento assegnatogli, la \emph{subnet ID} è la parte rimanente ad ottenere il \emph{prefix} (prefisso) di lunghezza 64~bit, i rimanenti bit identificano l'interfaccia di rete a cui è assegnato l'indirizzo e si chiamano \emph{interface ID}. \vspace{1.5cm} % \begin{figure} \begin{tabular}{| x{3.5cm} | x{1.7cm} | x{5cm} |} \hline Global routing prefix & Subnet ID & Interface ID \tnhl \multicolumn{1}{c}{n bit} & \multicolumn{1}{c}{64-n bit} & \multicolumn{1}{c}{64 bit} \end{tabular} % \caption{Struttura di un indirizzo global unicast} % \label{fig:Struttura di un indirizzo Global Unicast} % \end{figure} \end{frame} % subsection struttura_di_un_indirizzo (end) \subsection{Tipo e visibilità} \begin{frame}\frametitle{Visibilità di un indirizzo} \begin{colorblock}{Global} Gli indirizzi \emph{global} sono raggiungibili da tutta la rete IPv6 \end{colorblock}\pause \begin{colorblock}{Site-local (deprecati)} Gli indirizzi \emph{site-local} sono indirizzi privati interni ad un site che non devono essere instradati al di fuori della propria infrastruttura. Questa categoria di visibilità è attualmente deprecata. \end{colorblock}\pause \begin{colorblock}{Link-local} Gli indirizzi \emph{link-local} non devono mai essere inoltrati fuori dal link di origine.\\ L'indirizzo \texttt{::1/128} rappresenta il \emph{localhost} per l'interfaccia di \emph{loopback} mentre il prefix \texttt{fe80::/10} è stato riservato per l'autoconfigurazione stateless a livello di link. \end{colorblock} \end{frame} \begin{frame}\frametitle{Tipo di indirizzo} \begin{colorblock}{Unicast} % (fold) Un indirizzo \emph{unicast} identifica univocamente un'interfaccia.\\ Per gli indirizzi \textit{global unicast} lo IANA ha registrato il prefisso \texttt{2000::/3}, mentre il prefix \texttt{2001:db8::/32} è stato riservato per la scrittura di documentazione. \end{colorblock} \pause \begin{colorblock}{Multicast} Un indirizzo \emph{multicast} individua un gruppo di interfacce, i pacchetti destinati all'indirizzo vengono instradati a tutti i nodi partecipanti al multicast. \end{colorblock} \pause \begin{colorblock}{Anycast} Un indirizzo \emph{anycast} individua un gruppo di interfacce, i pacchetti destinati ad un indirizzo anycast vengono instradati verso una sola interfaccia, solitamente la più vicina. \end{colorblock} \end{frame} \subsection{Header} \begin{frame}[fragile]\frametitle{Header IPv4} \begin{bytefield}{32} \bitheader{0,3,4,7,8,15,16,18,19,31} \\ \bitbox{4}{Ver.} & \colorbitbox{lightgray}{4}{IHL} & \bitbox{8}{TOS} & \bitbox{16}{Total length} \\ \colorbitbox{lightgray}{16}{Identification} & \colorbitbox{lightgray}{3}{Flags} & \colorbitbox{lightgray}{13}{Fragment Offset} \\ \bitbox{8}{TTL} & \bitbox{8}{Protocol} & \colorbitbox{lightgray}{16}{Header Checksum} \\ \wordbox{1}{Source Address}\\ \wordbox{1}{Destination Address}\\ \colorbitbox{lightgray}{32}{Options (facoltativo)} \end{bytefield} \vspace{0.5cm}\pause Dimensione variabile tra 20 e 60 byte.\\I campi in grigio sono stati rimossi in IPv6. \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} %\begin{actionenv} %\begin{colorblock}{Vantaggi di IPv6} %\begin{itemize} %\item<2-> Lunghezza fissa 40 byte %\item<3-> Rimosso il controllo di errore %\item<4-> Rimossa la frammentazione %\item<5-> Header Extensions %\end{itemize} %\end{colorblock} %\end{actionenv} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Version} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \colorbitbox{chameleongreen2}{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Version (4 bit)} Specifica la versione del protocollo, in questo caso 6. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Traffic Class} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \colorbitbox{chameleongreen2}{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Traffic Class (1 byte)} Sostituisce il campo \texttt{Type of Service} di IPv4. Serve a gestire differenti tipologie di traffico in base alla loro priorità. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Flow Label} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \colorbitbox{chameleongreen2}{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Flow Label (20 bit)} Serve a marchiare i flussi per permetterne una gestione differenziata, attualmente è considerato un campo sperimentale. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Payload Length} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \colorbitbox{chameleongreen2}{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Payload Length (2 byte)} Specifica la lunghezza del \texttt{payload}, a differenza di IPv4 si dichiara esclusivamente la \underline{dimensione dei dati trasportati}, senza considerare l'header IP. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Next Header} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \colorbitbox{chameleongreen2}{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Next Header (1 byte)} Sostituisce il campo \texttt{Protocol Type} di IPv4. Mantiene i valori definiti per la vecchia versione del protocollo ed aggiunge dei nuovi codici per gli \texttt{Extension header} \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Hop Limit} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \colorbitbox{chameleongreen2}{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Hop Limit (1 byte)} Sostituisce il campo \texttt{TTL} di IPv4. Storicamente (in IPv4) il TTL misurava i ``secondi di vita'' del datagramma, mentre ora misura il numero di ``salti'' da nodo a nodo della rete, per questo motivo con IPv6 si è deciso di cambiargli nome. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Source Address} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \rlap{\wordbox{4}{\color{chameleongreen2}\rule{\width}{\height}}}\wordbox{4}{Source Address}\\ \wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Source Address (16 byte)} Indirizzo sorgente del datagramma. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}[fragile]\frametitle{Header IPv6 - Destination Address} \begin{columns} \begin{column}{1.5cm} \begin{bytefield}{32} \bitheader{0,3,4,11,12,15,16,23,24,31} \\ \bitbox{4}{Ver.} & \bitbox{8}{Traffic Class} & \bitbox{20}{Flow Label} \\ \bitbox{16}{Payload Length} & \bitbox{8}{Next Header} & \bitbox{8}{Hop Limit} \\ \wordbox{4}{Source Address}\\ \rlap{\wordbox{4}{\color{chameleongreen2}\rule{\width}{\height}}}\wordbox{4}{Destination Address} \end{bytefield} \end{column} \begin{column}{8.5cm} \begin{colorblock}{Destination Address (16 byte)} Indirizzo destinazione del datagramma. \end{colorblock} \end{column} \end{columns} \end{frame} \begin{frame}\frametitle{Header IPv6 - I campi rimossi} \begin{colorblock}{Gli svantaggi dei campi rimossi in IPv6} \pause \begin{description} \item[Checksum] Questo campo deve essere ricalcolato da ogni router a causa del decremento del \texttt{TTL}\pause \item[Identification, Flag e Fragment Offset] La frammentazione è a carico dei router in cui la \texttt{MTU} del link in uso non sia sufficiente a far transitare il pacchetto, in caso di perdita di un solo frammento è necessario ritrasmettere l'intero datagramma (che molto probabilemtne verrà frammentato di nuovo durante il tragitto)\pause \item[IHL e Options] La presenza di un campo opzionale a lunghezza variabile impedisce di accedere direttamente ai dati del datagramma senza aver fatto prima un'ispezione dei campi della testata \end{description} \end{colorblock} \end{frame} %\subsubsection{Extension headers} \begin{frame}\frametitle{Header IPv6 - Extension header} In IPv6 \`e possibile estendere l'header attraverso gli \textit{Extension header}, la loro presenza \`e indicata dal campo \texttt{Next Header} e se non sono di pertinenza del nodo di transito vengono ignorati inoltrando il pacchetto secondo le informazioni presenti nell'header.\pause \vspace{0.5cm} Questi \textit{Extension headers} sono considerati a tutti gli effetti parte del payload e ne influenzano la dimensione.\pause \vspace{0.5cm} Alcuni esempi sono \texttt{Hop-by-Hop Option header}, \texttt{Routing header}, \texttt{Fragment header}, \texttt{Destination Options header}, \texttt{Authentication header} ed \texttt{Encryption Security Payload header} \end{frame} \begin{frame}\frametitle{Header IPv6 - Extension header (cont.)} \begin{colorblock}{\texttt{Fragment header} ? Ma non avevamo rimosso la frammentazione?} \pause In questo caso la frammentazione è una opzione end-to-end, del tutto trasparente ai router intermedi e grava esclusivamente sui due estremi della comunicazione, che tipicamente sono due macchine più performanti dei router che li interconnettono.\\ Inoltre in caso di perdita di un frammento è necessario rispedire solo quello, perch\'e si tratta effettivamente di un vero pacchetto IP (anche se il suo payload è un frammento) \end{colorblock} \end{frame} \begin{frame}\frametitle{Header IPv6 - Extension header (cont.)} \begin{colorblock}{Ma con gli header extension non si torna ad avere una dimensione variabile della testata?} \pause No! \emph{Questi \textit{Extension headers} sono considerati a tutti gli effetti parte del payload e ne influenzano la dimensione.} Quindi saranno a tutti gli effetti parte del dato trasportato a meno che il nodo in transito non sia interessato alla specifica estensione, che è indicata dal campo \texttt{Next Header} \end{colorblock} \end{frame} \begin{frame}\frametitle{1 interfaccia $\Leftrightarrow$ N indirizzi} In IPv6 la relazione interfaccia - indirizzo è di tipo 1:N. Non esiste un indirizzo predefinito ed altri secondari, sono tutti allo stesso livello di importanza. \pause \begin{colorblock}{Vantaggi?} \pause Se consideramo la tipica infrastruttura di hosting web con qualche decina di siti per ogni singolo server, con un solo indirizzo IPv4, è evidente che è un problema fornire il supporto per SSL, perch\'e la trasmissione del certificato per istaurare il tunnel sicuro avviene prima di comunicare quale sito vogliamo raggiungere. Con IPv6 basterà assegnare alla stessa macchina un indirizzo per ogni sito ed a ognuno di questi uno specifico certificato per SSL. \end{colorblock} \end{frame} % section ipv6_nel_dettaglio (end) \section{Automatismi e routing} % (fold) \subsection{Introduzione} \begin{frame}\frametitle{Autoconfigurazione} \begin{itemize} \item Una delle novità introdotte da IPv6 è l'autoconfigurazione dei nodi di rete, che anche in assenza di un router sono in grado di generare autonomamente un indirizzo link-local unicast per garantire la comunicazione fra i nodi interconnessi. \item La generazione di questo tipo di indirizzo è il primo passo da eseguire per poter ottenere un indirizzo global unicast. \end{itemize} \end{frame} \subsection{ICMPv6} \begin{frame}\frametitle{ICMPv6 - Definizione} \begin{colorblock}{Definzione (Wikipedia)} L'Internet Control Message Protocol versione 6 (ICMPv6) è l'evoluzione nelle reti IPv6 del protocollo ICMP per le reti IPv4. In essa \emph{vengono aggiunte nuove funzionalità che nel protocollo precedente erano demandate ad altri livelli protocollari (come ad esempio l'ARP)} e tolte altre che, invece, erano poco usate. Come nel caso della versione precedente, l'ICMPv6 viene utilizzato per monitorare lo stato della rete e per inviare pacchetti di gestione e di errore. Essa è descritta nell'RFC 2463. \end{colorblock} \begin{flushright} \url{http://it.wikipedia.org/wiki/ICMPv6} \end{flushright} \end{frame} \begin{frame}[fragile]\frametitle{ICMPv6 - Pacchetto} \begin{colorblock}{Struttura del pacchetto} \begin{center} \begin{bytefield}{32} \bitheader{0,8,16,32} \\ %\wordgroupr{Generic Header} \bitbox{8}{Type} & \bitbox{8}{Code} & \bitbox{16}{Checksum}\\ %\endwordgroupr \\ \wordbox[lrt]{1}{Message body} \\ \skippedwords \\ \wordbox[lrb]{1}{} \\ \end{bytefield} \end{center} \end{colorblock} \end{frame} \begin{frame}\frametitle{Indirizzo link-local unicast autoconfigurato} \begin{colorblock}{Global Routing Prefix} Gli indirizzi link-local sono tutti nel prefix \texttt{FE80::/10}. All'interno di questo prefix è stato riservato il GRP \texttt{FE80::/64} per gli indirizzi link-local unicast autoconfigurati. \end{colorblock} \pause \vspace{0.5cm} \begin{colorblock}{Interface ID} Per assegnare la interface ID si utilizza l'EUI-64, un campo di 64 bit generato a partire dall'indirizzo MAC dell'interfaccia di rete. \end{colorblock} \end{frame} \subsection{EUI-64} \begin{frame}[fragile]\frametitle{Extended Unique Identifier (EUI-64) - Algoritmo} %\setlength{\byteheight}{4ex} \settowidth{\bitwidth}{\tiny 9i} \begin{bytefield}{64} \bitheader{0,8,16,24,32,40,48,56,64} \\ \wordgroupr{\tiny{MAC}} \bitbox{8}{MAC[0]} & \bitbox{8}{MAC[1]} &\bitbox{8}{MAC[2]} &\bitbox{8}{MAC[3]} &\bitbox{8}{MAC[4]} &\bitbox{8}{MAC[5]} \endwordgroupr \\ \wordbox[]{1}{$\Downarrow$ \\[1ex]} \\ \pause \bitbox{8}{MAC[0]} & \bitbox{8}{MAC[1]} &\bitbox{8}{MAC[2]} & \colorbitbox{chameleongreen2}{16}{\texttt{0xFF FE}} & \bitbox{8}{MAC[3]} & \bitbox{8}{MAC[4]} &\bitbox{8}{MAC[5]} \\ \wordbox[]{1}{$\Downarrow$ \\[1ex]} \\ \pause \wordgroupr{\tiny{EUI-64}} \colorbitbox{chameleongreen2}{8}{\texttt{0x02}} & \bitbox{8}{MAC[1]} &\bitbox{8}{MAC[2]} & \bitbox{16}{\texttt{0xFF FE}} & \bitbox{8}{MAC[3]} & \bitbox{8}{MAC[4]} &\bitbox{8}{MAC[5]} \endwordgroupr \end{bytefield} \end{frame} \begin{frame}[fragile]\frametitle{EUI-64 - esempio} Vediamo un esempio pratico con l'indirizzo MAC \texttt{00:16:cb:8c:de:8b} \pause \vspace{0.5cm} %\setlength{\byteheight}{4ex} \settowidth{\bitwidth}{\tiny 9i} \begin{bytefield}{64} \bitheader{0,8,16,24,32,40,48,56,64} \\ \wordgroupr{\tiny{MAC}} \bitbox{8}{\texttt{0x00}} & \bitbox{8}{\texttt{0x16}} &\bitbox{8}{\texttt{0xcb}} &\bitbox{8}{\texttt{0x8c}} &\bitbox{8}{\texttt{0xde}} &\bitbox{8}{\texttt{0x8b}} \endwordgroupr \\ \wordbox[]{1}{$\Downarrow$ \\[1ex]} \\ \pause \bitbox{8}{\texttt{0x00}} & \bitbox{8}{\texttt{0x16}} &\bitbox{8}{\texttt{0xcb}} & \colorbitbox{chameleongreen2}{16}{\texttt{0xff fe}} & \bitbox{8}{\texttt{0x8c}} & \bitbox{8}{\texttt{0xde}} & \bitbox{8}{\texttt{0x8b}} \\ \wordbox[]{1}{$\Downarrow$ \\[1ex]} \\ \pause \wordgroupr{\tiny{EUI-64}} \colorbitbox{chameleongreen2}{8}{\texttt{0x02}} & \bitbox{8}{\texttt{0x16}} & \bitbox{8}{\texttt{0xcb}} & \bitbox{16}{\texttt{0xff fe}} & \bitbox{8}{\texttt{0x8c}} &\bitbox{8}{\texttt{0xde}} & \bitbox{8}{\texttt{0x8b}} \\ \endwordgroupr \end{bytefield} \pause \vspace{0.25cm} L'indirizzo link-local EUI-64 è \texttt{fe80::2:16:cb:ff:fe:8c:de:8b} \end{frame} \subsection{IPv6 Stateless Address Autoconfiguration} \begin{frame}[allowframebreaks]\frametitle{Configurazione stateless - Definizioni} % (fold) \label{sub:configurazione_stateless} La configurazione stateless offre la possibilità di ottenere un indirizzo global unicast e un router verso cui instradare i pacchetti in modo automatico. Il procedimento fa uso di pacchetti ICMPv6 dedicati a questo scopo. \vspace{0.25cm} \textbf{Definizioni:} %\subsubsection{Definizioni} % (fold) %\label{ssub:definizioni} \begin{description} \item[tentative address] (indirizzo incerto) un indirizzo di cui si sta verificando l'unicità sul link, ancora non è stato assegnato all'interfaccia. \item[preferred address] (indirizzo preferito) un indirizzo assegnato all'interfaccia che può essere usato dai protocolli di livello superiore senza alcuna restrizione. Può figurare come indirizzo di sorgente o di destinazione. \item[deprecated address] (indirizzo deprecato) un indirizzo assegnato all'interfaccia il cui uso è scoraggiato, ma non proibito. I pacchetti inviati e ricevuti con questo indirizzo sono trattati normalmente, ma le nuove comunicazioni non dovrebbero utilizzarlo. Un indirizzo deprecato può essere ancora utilizzato per quei protocolli in cui cambiare in favore di un nuovo indirizzo preferito causerebbe problemi alla connessione (ad esempio una sessione TCP attiva.) \item[valid address] (indirizzo valido) un indirizzo deprecato o preferito. \item[invalid address] (indirizzo non valido) un indirizzo che non è assegnato a nessuna interfaccia. Un indirizzo valido diventa non valido quando il suo \emph{valid~lifetime} scade. Gli indirizzi non validi non devono essere utilizzati come indirizzo di sorgente o di destinazione. \item[preferred lifetime] il periodo di tempo in cui l'indirizzo deve essere considerato preferito. Alla scadenza l'indirizzo diventa deprecato. \item[valid lifetime] il periodo di tempo in cui l'indirizzo deve essere considerato valido. Questo valore deve essere maggiore o uguale del \emph{preferred~lifetime}. Alla sua scadenza l'indirizzo diventa non valido. \end{description} \end{frame} % subsubsection definizioni (end) \begin{frame}\frametitle{Configurazione stateless - Procedimento} \begin{colorblock}{Indirizzo link-local} \begin{itemize} \item<+-> generazione di un \emph{tentative address} link-local con il metodo EUI-64 \item<+-> invio di un pacchetto ICMPv6 Neighbor Solicitation con campo \texttt{Target Address} impostato sull'indirizzo da verificare \item<+-> se un nodo utilizza questo indirizzo risponde con un pacchetto ICMPv6 Neighbor Advertisement avvisando che l'indirizzo è già in uso. \item<+-> se non si ricevono Neighbor Advertisement l'indirizzo diventa \emph{valid address} \end{itemize} \end{colorblock} \vspace{.5cm} \uncover<5->{Il fallimento di questa procedura obbliga ad una configurazione manuale dell'host.} \end{frame} \begin{frame}[fragile,shrink=10]\frametitle{ICMPv6 - Neighbor Solicitation} \begin{center} \begin{bytefield}{32} \bitheader{0,8,16,32} \\ %\wordgroupr{Generic Header} \bitbox{8}{Type=\texttt{135}} & \bitbox{8}{Code=\texttt{0}} & \bitbox{16}{Checksum}\\ %\endwordgroupr \\ \wordbox{1}{Reserved}\\ \wordbox{4}{Target Address}\\ \wordbox[lrt]{1}{Options} \\ \skippedwords \\ \wordbox[lrb]{1}{} \\ \end{bytefield} \end{center} \end{frame} \begin{frame}[fragile,shrink=10]\frametitle{ICMPv6 - Neighbor Advertisement} \begin{center} \begin{bytefield}{32} \bitheader{0,1,2,3,8,16,32} \\ %\wordgroupr{Generic Header} \bitbox{8}{Type=\texttt{136}} & \bitbox{8}{Code=\texttt{0}} & \bitbox{16}{Checksum}\\ %\endwordgroupr \\ \bitbox{1}{ R } & \bitbox{1}{\tiny S \\ \texttt{1}} &\bitbox{1}{ O } & \bitbox{29}{Reserved}\\ \wordbox{4}{Target Address}\\ \wordbox[lrt]{1}{Options} \\ \skippedwords \\ \wordbox[lrb]{1}{} \\ \end{bytefield} \end{center} \end{frame} \begin{frame}\frametitle{Configurazione stateless - Procedimento (cont.)} % (fold) \begin{colorblock}{Indirizzo global} \begin{itemize} \item<+-> Una volta ottenuto un indirizzo link-local valido, un host cerca di determinare la presenza di router sul proprio link. \item<+-> I router inviano periodicamente dei pacchetti multicast di Router Advertisement in cui annunciano i prefix di loro competenza \begin{itemize} \item<+-> Router Solicitation all'indirizzo \texttt{FF02::2} per forzare l'invio \end{itemize} \item<+-> il pacchetto di Router Advertisement contiene le istruzioni per ottenre un indirizzo \begin{itemize}[<5->] \item \emph{autonomous address-configuration} (flag~A) \item \emph{managed address configuration} (flag~M) \item \emph{other statefull configuration} (flag~O) \end{itemize} \end{itemize} \end{colorblock} \end{frame} \begin{frame}\frametitle{Configurazione stateless - Procedimento (cont.)} \begin{colorblock}{\emph{autonomous address-configuration} (flag~A)} Se il nodo è riuscito a completare in modo automatico l'assegnazione di un indirizzo link-local, allora può assegnarsi come \emph{preferred address} un indirizzo composto dal prefix annunciato e dalla interface ID calcolata secondo lo standard EUI-64. \vspace{.5cm} \begin{tabular}{| x{5cm} | x{5cm} |} \hline Prefix annunciato & EUI-64 \tnhl \multicolumn{1}{c}{64 bit} & \multicolumn{1}{c}{64 bit} \end{tabular} \vspace{.5cm} Altrimenti registra l'indirizzo come \emph{tentative address} e lo verifica con i pacchetti ICMPv6. \end{colorblock} \end{frame} \begin{frame}\frametitle{Configurazione stateless - Procedimento (cont.)} \begin{colorblock}{\emph{managed address configuration} (flag~M) - statefull DHCP} Indica la presenza di un server DHCPv6. \end{colorblock} \vspace{.5cm} \pause \begin{colorblock}{\emph{other statefull configuration} (flag~O) - stateless DHCP} Indica la presenza di un server DHCPv6 per la richiesta di parametri \underline{diversi dall'indirizzo IP}. (DNS, NTP, SIP, etc \ldots) \end{colorblock} \end{frame} %\begin{frame}[fragile]\frametitle{ICMPv6 - Router Solicitation} % \begin{center} % \begin{bytefield}{32} % \bitheader{0,8,16,32} \\ % %\wordgroupr{Generic Header} % \bitbox{8}{Type=\texttt{133}} & \bitbox{8}{Code=\texttt{0}} & \bitbox{16}{Checksum}\\ % %\endwordgroupr \\ % \wordbox{1}{Reserved}\\ % \wordbox[lrt]{1}{Options} \\ % \skippedwords \\ % \wordbox[lrb]{1}{} \\ % \end{bytefield} % \end{center} %\end{frame} % %\begin{frame}[fragile]\frametitle{ICMPv6 - Router Advertisement} % \begin{center} % \begin{bytefield}{32} % \bitheader{0,8,16,32} \\ % %\wordgroupr{Generic Header} % \bitbox{8}{Type=\texttt{134}} & \bitbox{8}{Code=\texttt{0}} & \bitbox{16}{Checksum}\\ % %\endwordgroupr \\ % \bitbox{8}{Current Hop Limit} & \bitbox{1}{Code=\texttt{0}} & \bitbox{1}{Checksum}\\ % \wordbox{1}{Reserved}\\ % \wordbox[lrt]{1}{Options} \\ % \skippedwords \\ % \wordbox[lrb]{1}{} \\ % \end{bytefield} % \end{center} %\end{frame} \section{Routing OSPFv3} % (fold) \begin{frame}\frametitle{Routing OSPFv3} \begin{columns} \column{.4\textwidth} % column designated by a command \begin{itemize} \item Algoritmo identico alla versione 2 (IPv4) \item Utilizza solo indirizzi link-local \item rete $\rightarrow$ link \end{itemize} \column{.6\textwidth} \resizebox{.9\textwidth}{!}{ \includegraphics{aree_ospf} } \end{columns} \end{frame} %\begin{frame}[fragile,shrink]\frametitle{Tabella di routing} %\begin{verbatim} % Codes: % C - Connected, L - Local, S - Static B - BGP, R - RIP, D - EIGRP % O - OSPF Intra, OI - OSPF Inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2 % OE2 ::/0 [110/1], tag 1 % via FE80::20F:24FF:FECF:CF42, GigabitEthernet1/0/2 % OE2 2001:760:2C05:1::/64 [110/20] % via FE80::223:5DFF:FE15:FC41, GigabitEthernet1/0/5 % L 2001:760:2C05:F0FF::7/128 [0/0] % via GigabitEthernet1/0/2, receive % C 2001:760:2C05:F0FF::8/127 [0/0] % via GigabitEthernet1/0/5, directly connected % L 2001:760:2C05:F0FF::9/128 [0/0] % via GigabitEthernet1/0/5, receive % O 2001:760:2C05:F0FF::12/127 [110/2] % via FE80::223:5DFF:FE15:FC41, GigabitEthernet1/0/5 % O 2001:760:2C05:F0FF::14/127 [110/3] % via FE80::223:5DFF:FE15:FC41, GigabitEthernet1/0/5 % OE2 2001:760:2C05:F0FF::16/127 [110/20] % via FE80::223:5DFF:FE15:FC41, GigabitEthernet1/0/5 % L FF00::/8 [0/0] % via Null0, receive %\end{verbatim} %\end{frame} % section routing_ospfv3 (end) \section{DNS} % (fold) \begin{frame}[fragile]\frametitle{I record DNS per IPv6} \begin{colorblock}{Query DNS} Per gestire gli indirizzi IPv6 sono stati introdotti i record AAAA.\\ Esistono anche i record A6 ma sono ancora poco utilizzati. \end{colorblock} \pause \begin{colorblock}{Query inverse} Ogni sottodominio di \texttt{IP6.ARPA} rappresenta una cifra esadecimale dell'indirizzo IPv6 a partire da quella più significativa. Quindi per chiedere l'hostname per l'indirizzo \texttt{2001:db8::cafe} bisogna interrogare il server DNS per il nome di dominio \vspace{.25cm} \resizebox{\textwidth}{!}{ \texttt{e.f.a.c.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa}} \end{colorblock} \end{frame} \begin{frame}[fragile,shrink]\frametitle{Esempio record AAAA (BIND 9)} \begin{verbatim} $TTL 3600 @ 86400 IN SOA dns.ipv6.unifi.it. staffreti.unifi.it. ( 2009081102 ; Serial 86400 ; Refresh 7200 ; Retry 3600000 ; Expire 3600 ) ; Minimum @ 86400 IN NS dns.ipv6.unifi.it. @ 4800 IN AAAA 2001:760:2c05:1::20 IN A 150.217.1.20 dns 4800 IN AAAA 2001:760:2c05:1::20 4800 IN A 150.217.1.20 lenst 4800 IN AAAA 2001:760:2c05:1001::24 \end{verbatim} %$ \end{frame} \begin{frame}[fragile,shrink]\frametitle{Esempio record PTR (BIND 9)} \begin{verbatim} $TTL 3d ; Default TTL @ IN SOA 5.0.c.2.0.6.7.0.1.0.0.2.ip6.arpa. staffreti.unifi.it. ( 2009081102 ; Serial number (YYYYMMdd) 24h ; Refresh time 30m ; Retry time 2d ; Expire time 3d ) ; Default TTL IN NS dns.ipv6.unifi.it. ; prefix 2001:760:2c05:1::/64 $ORIGIN 1.0.0.0.5.0.c.2.0.6.7.0.1.0.0.2.ip6.arpa. 0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR dns.ipv6.unifi.it. ; prefix 2001:760:2c05:1001::/64 $ORIGIN 1.0.0.1.5.0.c.2.0.6.7.0.1.0.0.2.ip6.arpa. 4.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR lenst.ipv6.unifi.it. \end{verbatim} %$ \end{frame} \begin{frame}[t]\frametitle{Il problema del reverse DNS} \begin{colorblock}{RFC 1912} \emph{Ogni host raggiungibile su Internet deve avere un hostname ed un record PTR per il reverse DNS.} Questo è un problema per IPv6. \begin{itemize} \item impossibile una generazione a priori (sono troppi) \item una generazione on demand potrebbe esporre ad attacchi DOS \end{itemize} \end{colorblock} \pause \begin{colorblock}{Come viene usato oggi il reverse DNS?} \begin{itemize} \item Controllo SPAM per i server mail \item Funzionalità di logging \end{itemize} \end{colorblock} \pause \begin{colorblock}{Soluzione} Registrare i record PTR solo per i server. \end{colorblock} \end{frame} %\subsection{Il problema del reverse \acs{DNS}} %fold %\label{sub:il_problema_del_reverse_dns} %Ogni host raggiungibile su Internet deve avere un hostname ed un record PTR per %il reverse \ac{DNS}. Questo \`e ci\`o che richiede l'RFC1912\cite{rfc1912} %in merito ai record IPv4, ma per IPv6? La questione rimane aperta perch\'e %l'RFC non \`e stato aggiornato dopo la pubblicazione di IPv6 ed il reverse %\ac{DNS} viene utilizzato solo in alcuni casi. %Alcune funzionalit\`a di logging lo usano per avere un output più leggibile, senza alcun %problema nel caso in cui il record non sia presente ed alcuni server di posta %elettronica, durante una sessione SMTP, verificano attraverso una query inversa %che il server mittente sia effettivamente chi dichiara di essere e non uno spammer. % %Da un punto di vista pratico basterebbe registrare i record PTR solo per i %server di posta, ma la discussione rimane comunque aperta nella comunit\`a. %Gli \ac{ISP} per IPv4 solitamente generano in modo automatico i record \ac{DNS} %per tutti gli indirizzi che ricevono dal \ac{RIR}, ma dato l'elevato numero di %indirizzi presenti gi\`a in un prefix da 64 bit, che dovrebbero assegnare ad ogni %cliente, questa strada risulta impercorribile. %Un'altra possibilità è la generazione dei record PTR al momento stesso della %query \ac{DNS}; tuttora non sono noti plugin di BIND per questa funzionalità %e si tratta comunque di una strategia rischiosa in quanto esporrebbe ad attacchi %di tipo \ac{DDOS}. % %Se si scegliesse di generare staticamente a priori tutti i record AAAA e PTR %è mandatorio l'uso di un server DHCP per assegnare indirizzi in un intervallo %ristretto. Per la generazione dei record si può utilizzare lo script ruby sviluppato %durante il lavoro di tesi e disponibile in appendice \ref{lst:dns_gen}. % subsection il problema del reverse dns (end) % section dns (end) % section automatismi_e_routing (end) \section{Tunneling} % (fold) \begin{frame}[t]\frametitle{Tunneling} \begin{colorblock}{Scopo} Le tecniche di tunneling consentono di bypassare tronconi della rete che non supportano IPv6 incapsulando il pacchetto in uno o pi\`u datagrammi IPv4. \end{colorblock} \pause \vspace{.5cm} \begin{colorblock}{Metodi} \begin{itemize} \item<2-> Tunneling a livello Rete (\texttt{proto-41}) \item<3-> Tunneling a livello Trasporto (\texttt{AYIYA}) \end{itemize} \end{colorblock} \end{frame} \begin{frame}[shrink]\frametitle{Tunneling a livello Rete - \texttt{proto-41}} \begin{colorblock}{\texttt{proto-41} (rfc3056)} Noto anche come \emph{6to4} implementa la tecnica IPv6-in-IPv4 che consiste nell'inserire il pacchetto completo IPv6 come payload di uno o più pacchetti IPv4. \end{colorblock} \pause \vspace{.5cm} \begin{center} \begin{bytefield}{32} \wordbox{1}{Frame Ethernet}\\ \wordbox{1}{Header IPv4}\\ \wordbox[lrt]{1}{Pacchetto IPv6} \\ \skippedwords \\ \wordbox[lrb]{1}{} \\ \end{bytefield} \end{center} \end{frame} \begin{frame}[t]\frametitle{Tunneling a livello Rete - \texttt{proto-41} (cont.)} \begin{colorblock}{Tunneling automatico (senza configurazione)} Si cerca di raggiungere un \emph{relay router IPv6} (\texttt{192.88.99.1} anycast IPv4) in grado di instradare il nostro pacchetto in modo nativo. \\ A questo scopo è stata riservata la rete \texttt{2002::/16} che associa ad ogni indirizzo IPv4 un prefix di 48 bit composto da \texttt{2002} più i 32 bit dell'indirizzo IPv4 convertito in esadecimale.\\ \end{colorblock} \pause \vspace{.15cm} \begin{center} \begin{tabular}{c c l} & \tiny{32 bit} & \\ & $\overbrace{ {\color{chameleongreen1}\texttt{192.0.2.42}} }$ & \\ & $\downarrow$ \tiny{to hex} & \\ $\underbrace{\texttt{2002}}$: & {\color{chameleongreen1}\texttt{c000:022a}} & \texttt{::/48} \\ \tiny{16 bit} & & \end{tabular} \end{center} \end{frame} \begin{frame}[t]\frametitle{Tunneling a livello Rete - \texttt{proto-41} (cont.)} \begin{colorblock}{Tunneling non automatico (con configurazione)} Il proto-41 può essere anche usato in modo non automatico per collegare due punti della rete di un AS che non dispongono di router abilitati al traffico IPv6. \\ In questo caso è necessario configurare dei punti di accesso agli estremi che intendiamo collegare per gestire la trasformazione IPv4$\leftrightarrow$IPv6. \end{colorblock} \end{frame} \begin{frame}[shrink]\frametitle{Tunneling a livello Rete - \texttt{proto-41} (cont.)} \begin{colorblock}{Tunneling non automatico} \input{protocol41} \end{colorblock} \end{frame} \begin{frame} \frametitle{AYIYA} \begin{colorblock}{\texttt{AYIYA} - Anything In Anything} AYIYA definisce un metodo per configurare un tunnel per un client IPv4 che si trovi dietro un NAT, in questo caso si utilizzano i protocolli UDP o TCP per instradare il traffico IPv6. Otteniamo quindi un tunnel di tipo \texttt{IPv6-in-UDP-in-IPv4} o \texttt{IPv6-in-TCP-in-IPv4} che aggiunge connettività IPv6 al nostro nodo. \end{colorblock} \pause \vspace{.5cm} \resizebox{!}{0.4\textheight}{ \hspace{4cm} \begin{bytefield}{32} \wordbox{1}{Frame Ethernet}\\ \wordbox{1}{Header IPv4}\\ \wordbox{1}{TCP o UDP}\\ \wordbox[lrt]{1}{Pacchetto IPv6} \\ \skippedwords \\ \wordbox[lrb]{1}{} \\ \end{bytefield} } \end{frame} % section tunneling (end) \begin{frame} \frametitle{Firewall} \end{frame} \section{Implementare IPv6} \subsection{Tunnel Broker} \begin{frame}\frametitle{Tunnel Broker} \setbeamercovered{invisible} \begin{colorblock}{Definizione - RFC3053} I tunnel broker sono dei fornitori di connettività IPv6 attraverso la rete IPv4. \end{colorblock} \pause \vspace{1cm} \tikzstyle{net}+=[on chain] \begin{center} \begin{tikzpicture}[start chain,every join/.style={<->,thick}] \node [net,join] (client) {\pgfuseimage{schermo}}; \node [net,join] (rete) {\pgfuseimage{nuvola}}; \node [net,join] (broker) {\pgfuseimage{router}}; \uncover<3-> {\node [net,join] (ipv6) {\pgfuseimage{nuvola}}; } %label \node [below of=client] {\small client}; \node at (rete) [anchor=center] {\small IPv4}; \node [below of=broker] {\small tunnel broker}; \uncover<3-> { \node at (ipv6) [anchor=center] {\small IPv6};} %archi \uncover<4-> { \path (client) edge[<->,dashed,thick,bend right] node[below]{\small IPv6-in-IPv4} (broker); % \path (broker) edge[<->,dashed,thick,bend right] (ipv6); } \end{tikzpicture} \end{center} \end{frame} \tikzstyle{na} = [baseline=-.5ex] \tikzstyle{every picture}+=[remember picture] \subsection{SOHO} \begin{frame} \frametitle{Small Office Home Office (SOHO)} \begin{columns} \column{.3\textwidth} % column designated by a command \begin{itemize} \item LAN standard \item<2-> Router Advertisement\tikz[na] \node[coordinate] (adv) {}; \item<3-> Connettività IPv6 attraverso un tunnel broker \tikz[na] \node[coordinate] (tb) {}; \end{itemize} \column{.7\textwidth} \setbeamercovered{invisible} \tikzstyle{net}+=[on chain] \tikzstyle{lnet}+=[on chain=going below] \begin{tikzpicture}[start chain,every join/.style={<->,thick}] \node [net,join] (ipv4) {\pgfuseimage{nuvola}}; { [start branch=lan] \node [lnet,join=with ipv4,label=180:\tiny router] (router) {\pgfuseimage{router}}; \node [subnet,lnet,join] { \begin{tikzpicture} \node [] (client1) {\pgfuseimage{schermo}}; \node [right of=client1] (client2) {\pgfuseimage{schermo}}; \node [right of=client2] (client3) {\pgfuseimage{case}}; \end{tikzpicture} }; } \uncover<3-> { \node [net,join=with ipv4,right of=ipv4,label=90:\tiny tunnel broker] (broker) {\pgfuseimage{router}}; \node [net,join] (ipv6) {\pgfuseimage{nuvola}}; } %label %\node [below of=client] {\small client}; \node at (ipv4) [anchor=center] {\tiny IPv4}; \uncover<3-> { \node at (ipv6) [anchor=center] {\tiny IPv6}; % } %archi %\uncover<4-> { \path (router) edge[<->,dashed,thick,out=0,in=-90] node[right] (6to4) {\tiny IPv6-in-IPv4} (broker); % \path (broker) edge[<->,dashed,thick,bend right] (ipv6); } \end{tikzpicture} \end{columns} %collegamenti \begin{tikzpicture}[overlay] \path[->]<2> (adv) edge [bend right,olink] (router); \path[->]<3> (tb) edge [bend right,olink] (6to4); \end{tikzpicture} \end{frame} \subsection{Enterprise} \begin{frame} \frametitle{Enterprise} \begin{columns} \column{.35\textwidth} % column designated by a command \begin{itemize} \item Rete enterprise \item<2-> Routing OSPFv3 \tikz[na] \node[coordinate] (ospf) {}; \item<3-> Aggiornamento del server DNS \tikz[na] \node[coordinate] (agg dns) {}; \item<4-> Server DHCP \tikz[na] \node[coordinate] (dhcp) {}; \item<4-> Relay agent DHCP \tikz[na] \node[coordinate] (relay) {}; \item<5-> Router Advertisement \tikz[na] \node[coordinate] (ra) {}; \item<6-> Rimozione dei NAT \tikz[na] \node[coordinate] (no nat) {}; \item<7-> Aggiornamento dei servizi \tikz[na] \node[coordinate] (servizi) {}; \end{itemize} \column{.65\textwidth} \setbeamercovered{invisible} \tikzstyle{net}+=[on chain=going below] \tikzstyle{lnet}+=[on chain=going right] \begin{tikzpicture}[start chain,every join/.style={<->,thick},node distance=3mm] \node [net] (net) {\pgfuseimage{nuvola}}; \node [net,join,label=180:\tiny ASBR] (asbr) {\pgfuseimage{router}}; { [start branch=lans] } % just a declaration, { [start branch=br2] \node [on chain=going below right,join,label=90:\tiny BR2] (mybr2) {\pgfuseimage{router}}; } \node [net,on chain=going below left,join,join=with asbr,label=180:\tiny BR1] (br1) {\pgfuseimage{router}}; \node [subnet,net,join] { \begin{tikzpicture}[ node distance=1cm] \node [] (c4) {\pgfuseimage{schermo}}; \node [right of=c4] (c5) {\pgfuseimage{schermo}}; \node [right of=c5] (c6) {\pgfuseimage{schermo}}; \end{tikzpicture} }; { [continue branch=lans] \node [subnet,on chain, right of=asbr, xshift=3.5cm,join=with asbr] { \begin{tikzpicture}[ node distance=1cm] \node [label=-90:\tiny{DNS}] (dns) {\pgfuseimage{case}}; \node [label=-90:\tiny Web server,right of=dns] (web server) {\pgfuseimage{case}}; \uncover<4->{\node [label=-90:\tiny{DHCPv6},right of=web server] (dhcpv6) {\pgfuseimage{case}};} \end{tikzpicture} }; \node [subnet,net,join=with mybr2] { \begin{tikzpicture}[ node distance=1cm] \node [] (c1) {\pgfuseimage{schermo}}; \node [right of=c1] (c2) {\pgfuseimage{schermo}}; \node [right of=c2] (c3) {\pgfuseimage{schermo}}; \node [subnet,below of=c2,yshift=-.15cm,xshift=.1cm] (nat) { \begin{tikzpicture}[ node distance=1cm] \node [] (n1) {\pgfuseimage{schermo}}; \node [right of=n1] (n2) {\pgfuseimage{schermo}}; \end{tikzpicture}}; \node [left of=nat,xshift=-.25cm] (natter) {\pgfuseimage{case}}; \end{tikzpicture} }; } %label \node at (net) [anchor=center] {\tiny Internet}; % \uncover<3-> { % \node at (ipv6) [anchor=center] {\small IPv6}; %% } % % %archi % %\uncover<4-> { % \path (router) edge[<->,dashed,thick,out=0,in=-90] node[right] (6to4) {\small IPv6-in-IPv4} (broker); %% \path (broker) edge[<->,dashed,thick,bend right] (ipv6); % } \end{tikzpicture} \end{columns} %collegamenti \begin{tikzpicture}[overlay] \path[->]<2> (ospf) edge [olink] (asbr) edge [bend right,olink] (mybr2) edge [bend right,olink] (br1); \path[->]<3> (agg dns) edge [bend right,olink] (dns); \path[->]<4> (dhcp) edge [bend left,olink] (dhcpv6); \path[->]<4> (relay) edge [bend left,olink] (mybr2) edge [bend right,olink] (br1); \path[->]<5> (ra) edge [bend left,olink] (asbr) edge [bend left,olink] (mybr2) edge [bend right,olink] (br1); \path[->]<6> (no nat) edge [olink] (natter); \path[->]<7> (servizi) edge [bend right, olink] (web server); \end{tikzpicture} \end{frame} \section*{Licenza} \begin{frame}\frametitle{Licenza Creative Commons\newline{}\small Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia} \small \begin{colorblock}{Tu sei libero:} \tiny \begin{itemize} \item di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera \item di modificare quest'opera \end{itemize} \end{colorblock} \begin{colorblock}{Alle seguenti condizioni:} \begin{itemize} \tiny \item \textbf{Attribuzione.} Devi attribuire la paternità dell'opera nei modi indicati dall'autore o da chi ti ha dato l'opera in licenza e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera. \item \textbf{Non commerciale.} Non puoi usare quest'opera per fini commerciali. \item \textbf{Condividi allo stesso modo.} Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa. \end{itemize} \end{colorblock} \tiny \begin{itemize} \item Ogni volta che usi o distribuisci quest'opera, devi farlo secondo i termini di questa licenza, che va comunicata con chiarezza. \item In ogni caso, puoi concordare col titolare dei diritti utilizzi di quest'opera non consentiti da questa licenza. \item Questa licenza lascia impregiudicati i diritti morali. \end{itemize} \end{frame} \end{document} %%% Local Variables: %%% mode: latex %%% TeX-master: "ipv6.slides" %%% End: