% 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} Babel: \alert{routing protocol}. Only concern: \alert{build the routing table}. \vspace{1em} \begin{table} \centering \textbf{Routing table} \\ \medskip \begin{tabular}{@{} lcl @{}} \toprule Network Prefix (IPv6) & $\rightarrow$ & Next-Hop (IPv6)\\ \midrule{} 2001::/64 & & fd80::42 \\ \bottomrule{}\\ \toprule{} Network Prefix (IPv4) & $\rightarrow$ & Next-Hop (IPv4)\\ \midrule 10.0.0.0/24 & & 10.0.0.1 \\ 10.0.0.0/16 & & 10.0.1.1 \\ 10.0.0.0/8 & & \xcancel{fe80::f0} \\ \bottomrule \end{tabular} \end{table} \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 Useful to go through a \alert{router with no v4 address} configured \item Possible use: v6-only core, still serve v4 to clients \emph{without tunnel} \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{Interface with v4 address:} no changes; just as unextended babel. \vspace{1em} \textbf{Interface with only v6 addresses:} \begin{itemize} \item{} \alert{Receiving} a v4 route: \alert{install it anyway}, the router's address is irrelevant. \item{} \alert{Announcing} a v4 route: use \alert{v4-over-v6}; we need a next-hop and only have v6 at hand. \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 \emph{unextended} 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} \textbf{Various encodings possible, among which:} \begin{enumerate} \item \emph{[Toke]} 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 \emph{[Bastian + JCH]} 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 \pause{} \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}{Conclusion} \begin{itemize} \item New type of route: \alert{v4-over-v6}, v4 destination, v6 next-hop \item Route IPv4 over an IPv6 network core. \textit{Look, Ma! No tunnels!} \item Protocol \alert{described and drafted} \item \alert{Production-ready implementation} available on the babeld repository \end{itemize} \vspace{1em} \begin{itemize} \item \textbf{Intended status: \alert{experimental}} \item Opinions: should it be adopted by workgroup or carried alone? \end{itemize} \vspace{1em} \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.2\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.2\textwidth]{imgs/pdf/qr_slide.pdf} \end{column} \end{columns} \end{frame} \end{document}