260 lines
8.1 KiB
TeX
260 lines
8.1 KiB
TeX
% 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}
|