% vim: spell spelllang=en \documentclass[11pt,xcolor={usenames,dvipsnames},aspectratio=169]{beamer} \usetheme{metropolis} \usepackage[utf8]{inputenc} \usepackage[english]{babel} \usepackage[T1]{fontenc} \usepackage{texlib/my_listings} \usepackage{texlib/todo} \usepackage{booktabs} \usepackage[thicklines]{cancel} \renewcommand{\CancelColor}{\color{red}} %\usepackage{inconsolata} \lstdefinelanguage{iproute} { morekeywords={inet6}, sensitive=true, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{Announcing IPv4 routes with an IPv6 next-hop in the Babel routing protocol} \subtitle{\textit{aka.} \href{https://datatracker.ietf.org/doc/draft-bastian-babel-v4ov6/}{ draft-bastian-babel-v4ov6}} \author[\slidecountline] {Théophile Bastian, joint work with Juliusz Chroboczek} \date{} %\subject{} %\logo{} \institute{ \href{https://ens.fr/}{ENS Paris}, \href{https://www.irif.fr/}{IRIF}, \href{https://www.nexedi.com/}{Nexedi}} \begin{document} \maketitle{} \begin{frame}{Traditional routing} \begin{table} \centering \textbf{IPv4 routing table} \\ \medskip \begin{tabular}{@{} lcl @{}} \toprule Network Prefix (IPvX) & $\rightarrow$ & Next-Hop (IPvX)\\ \midrule default & & 10.42.0.254 \\ 10.102.0.0/16 & & 10.102.0.1 \\ 10.102.0.0/24 & & 10.102.0.2 \\ 10.0.0.0/8 & & \xcancel{fd80:1::1} \\ \bottomrule \end{tabular} \end{table} \vspace{1em} \begin{itemize} \item \textbf{Control plan:} \alert{babel}, routing protocol. \alert{Fills the routing table}. \item \textbf{Data plan:} correctly forward incoming packets. \alert{Uses the routing table}. \end{itemize} \end{frame} \begin{frame}{The router's job} \begin{figure} \centering \includegraphics[width=\columnwidth]{imgs/pdf/routing.pdf} \end{figure} \end{frame} \begin{frame}{What's under the hood?} \begin{figure} \centering \only<1>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/01.pdf}} \only<2>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/02.pdf}} \only<3>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/03.pdf}} \only<4>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/04.pdf}} \only<5>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/05.pdf}} \only<6>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/06.pdf}} \only<7>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/07.pdf}} \only<8>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/08.pdf}} \only<9>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/09.pdf}} \only<10>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/10.pdf}} \only<11>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/11.pdf}} \only<12>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/12.pdf}} \end{figure} \end{frame} \begin{frame}{The idea behind} \textbf{New type of route!} v4 prefix with v6 next-hop: \alert{v4-over-v6 route}. \vspace{2em} \begin{itemize} \item Supporting both v4 and v6 is cumbersome: twice the configuration \item v6-only core, still serve v4 to clients \item IPv6 has \alert{link-local} and \alert{automatic addresses} (SLAAC) \begin{itemize} \item no need for DHCP or IP addresses configuration \emph{at all}! \end{itemize} \end{itemize} \vspace{2em} \textbf{Not an original idea!} BGP had it first: \href{https://datatracker.ietf.org/doc/draft-ietf-bess-rfc5549revision/}{draft-ietf-bess-rfc5549revision} \end{frame} \begin{frame}[fragile]{Linux support} \textbf{Supported in Linux} since 5.2 --~July 2019! \begin{minipage}[c]{0.1\textwidth} \includegraphics[height=1.2em]{imgs/Git-Logo-1788C} \end{minipage} \begin{minipage}[c]{0.85\textwidth} \begin{block}{d1566268 -- 2019-04-05 -- ipv4: Allow ipv6 gateway with ipv4 routes} \quad{}Add support for \lstbash{RTA_VIA} and allow an IPv6 nexthop for v4 routes. \end{block} \end{minipage} \vspace{2em} \begin{itemize} \item{} Usually, add a v4 route with \begin{lstlisting}[language=iproute, numbers=none] # ip route add 10.42.0.0/16 via 10.40.0.42 dev eno1 \end{lstlisting} \item{} v4-over-v6 (recent kernel): \begin{lstlisting}[language=iproute, numbers=none] # ip route add 10.42.0.0/16 via inet6 fe80::a0de:baf:b39b dev eno1 \end{lstlisting} \end{itemize} \end{frame} \section{Babel protocol extension} \begin{frame}{Advertising v4-over-v6 routes} \textbf{An IPv4 interface} never announces v4-over-v6 routes \vspace{1em} \textbf{A v6-only interface} \begin{itemize} \item{} \alert{Installs a v4 route} nevertheless when receiving it \item{} \alert{Announces a v4-over-v6 route} for each v4 route \end{itemize} \end{frame} \begin{frame}{Backwards compatibility} \textbf{\alert{Backwards compatibility:} an unextended node \alert{must}} \begin{itemize} \item Be able to \alert{ignore v4-over-v6 routes} \item \alert{Route correctly} pure v4 and v6 \end{itemize} \vspace{2em} In Babel, \alert{Address Encodings} (AEs) define the type of address/prefix contained in a TLV\@. \begin{itemize} \item IPv4 address \item IPv6 address \item link-local IPv6 address \end{itemize} \end{frame} \begin{frame}{Encoding v4-over-v6 routes: choices} \begin{enumerate} \item An IPv4 route announced without previously setting a valid next-hop is considered v4-over-v6. \begin{itemize} \item Is backwards compatible --~but not obviously so \item Not clear an extension is being used \end{itemize} \item New specific AE for v4-over-v6 routes, and next-hop is\ldots{} \begin{enumerate}[i] \item \ldots{}specific to v4-over-v6 routes \item \only<1>{\ldots{}same as for v6 routes} \only<2>{\textbf{\alert{\ldots{}same as for v6 routes}}} \begin{itemize} \item[$\rightarrow$] more compact, just as clear \end{itemize} \end{enumerate} \medskip \begin{itemize} \item Backwards compatible and clean \item A tiny bit more verbose \end{itemize} \end{enumerate} \medskip \only<2>{ \begin{center} \textbf{ {\Large $\leadsto$} 2.ii. \alert{Add a new AE.} No need for new TLVs. } \end{center} } \end{frame} %%%%%%%%%%% Conclusion frame %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}{To sum up} \begin{itemize} \item While routing, next-hop address is \alert{only useful to get layer 2 address} \item New type of route: \alert{v4-over-v6}, v4 destination, v6 next-hop \item Less network configuration, same features! Yay! \item We have \alert{an extension draft} and \alert{an implementation} \end{itemize} \vspace{2em} \begin{columns}[T] \begin{column}{0.5\textwidth} \centering \textbf{\large RFC draft} \href{https://datatracker.ietf.org/doc/draft-bastian-babel-v4ov6/}{\texttt{\large huit.re/draft-v4ov6}} \includegraphics[width=0.25\textwidth]{imgs/pdf/qr_draft.pdf} \end{column} \begin{column}{0.5\textwidth} \centering \textbf{\large These slides} \href{https://tobast.fr/files/ietf108-v40v6.pdf}{\texttt{\large huit.re/ietf108-v4ov6}} \includegraphics[width=0.25\textwidth]{imgs/pdf/qr_slide.pdf} \end{column} \end{columns} \end{frame} \end{document}