% Exercise sheet for the "Hands-on BGP" lecture: two A4 pages, one sheet. % Springer LNCS class (llncs.cls ships with TeX Live). Build: latexmk -pdf handout.tex \documentclass[a4paper]{llncs} \usepackage[a4paper,margin=1in]{geometry} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{microtype} \usepackage{booktabs} \usepackage{amssymb} \usepackage{listings} \usepackage{tikz} \usepackage[bitstream-charter]{mathdesign} \usetikzlibrary{positioning,arrows.meta} \PassOptionsToPackage{hyphens}{url} \usepackage[hidelinks]{hyperref} \renewcommand\UrlFont{\ttfamily\small} \pagestyle{empty} % Floats sit in the text here, so they need less air than in a paper. \setlength{\intextsep}{7pt} \setlength{\abovecaptionskip}{4pt} \setlength{\belowcaptionskip}{0pt} % ---- things to change per class ------------------------------------------- \newcommand{\laburl}{https://bgplab.rayhaan.net/} % build-class.py compiles one copy per student with \studentnum and % \studenthex defined (e.g. 26 and 1a); without them this is the blank sheet. \providecommand{\studentnum}{} \providecommand{\studenthex}{} \ifx\studentnum\empty \newcommand{\myprefix}{\texttt{2a0d:d741:}\underline{\texttt{\,n\,}}\texttt{::/48}} \newcommand{\nhex}{} \else \newcommand{\myprefix}{\texttt{2a0d:d741:\studenthex::/48}} \newcommand{\nhex}{\studenthex} \fi % ---- exercise machinery ------------------------------------------------------ \lstset{basicstyle=\ttfamily\small,columns=fullflexible,keepspaces=true, aboveskip=0.5em,belowskip=0.3em} \newcounter{task}[section] \renewcommand{\thetask}{\thesection.\arabic{task}} \newcommand{\task}[1]{\refstepcounter{task}\smallskip\noindent \textbf{Task \thetask}\enspace\textit{#1}\enspace\ignorespaces} \newcommand{\answer}[1][1]{\par\nobreak \foreach \i in {1,...,#1}{\vspace{1.0em}\noindent\makebox[\linewidth]{\dotfill}\par}\smallskip} % A labelled answer box: the label on its own line, then #1 dotted lines to % write on (default 2). Used side by side by \fillintwo and \fillinthree. \newcommand{\writelines}[1]{\foreach \i in {1,...,#1}{\vspace{1.0em}\makebox[\linewidth]{\dotfill}\par}} \newcommand{\fillbox}[3][2]{\parbox[t]{#2}{#3\par\nopagebreak\writelines{#1}}} \newcommand{\fillintwo}[3][2]{\par\nopagebreak\smallskip\noindent \fillbox[#1]{0.485\linewidth}{#2}\hfill\fillbox[#1]{0.485\linewidth}{#3}\par\vspace{0.4em}} \newcommand{\fillinthree}[4][2]{\par\nopagebreak\smallskip\noindent \fillbox[#1]{0.32\linewidth}{#2}\hfill\fillbox[#1]{0.32\linewidth}{#3}\hfill\fillbox[#1]{0.32\linewidth}{#4}\par\vspace{0.4em}} \newcommand{\cbox}{$\square$\;} \newcommand{\reach}{\par\nopagebreak\smallskip\noindent Reachable from:\hspace{1.2em}\cbox laptop on the university network\hspace{2em}\cbox phone on mobile data\par\smallskip} \begin{document} \title{Hands on BGP: Announcing and Steering an IPv6 Prefix} \author{Rayhaan Jaufeerally} \institute{Network Security, ETHZ\\ Lab page: \url{\laburl} (username ``netsec'', password ``perrig'')} \maketitle \medskip\noindent \ifx\studentnum\empty \parbox[t]{0.44\linewidth}{Name:~\dotfill}\hfill \parbox[t]{0.27\linewidth}{Prefix: \myprefix} \smallskip\noindent Your prefix is \myprefix, where \texttt{n} is your number \emph{in hexadecimal}.\par\noindent Student 10 has \texttt{2a0d:d741:a::/48} and student 26 has \texttt{2a0d:d741:1a::/48}. \else \parbox[t]{0.44\linewidth}{Name:~\dotfill}\hfill \parbox[t]{0.5\linewidth}{Student \studentnum\quad Prefix: \myprefix} \smallskip\noindent Your prefix is \myprefix: student number \studentnum, written in hexadecimal. Make sure to use this prefix in the exercise. \fi % ============================================================================== \section{Who Announces the Address You Are Using?} \task{Find your IPv6 address.} Open \texttt{https://bgp.tools} in a browser: the top of the page shows the address you are connecting from, the prefix it belongs to, and the network that announces that prefix. \fillinthree{Your IPv6 address:}{its prefix:}{announced by AS:} \task{Ask the registry.} The RIPE database records who holds address space (\texttt{inet6num}, or \texttt{inetnum} for IPv4) and who may announce it (\texttt{route6}, \texttt{route}). Look up your IPv6 address, then your lab prefix: \begin{lstlisting}[escapeinside={(*}{*)}] whois whois 2a0d:d741:(*\nhex*)::/48 \end{lstlisting} \fillintwo{Your IPv6 address: held by (\texttt{netname})}{\texttt{origin} AS:} \fillintwo{Your lab prefix: \texttt{origin} AS}{is it announced right now?} % ============================================================================== \section{Announcing Your Prefix} \begin{figure}[h] \centering \begin{tikzpicture}[font=\footnotesize, node distance=5mm and 11mm, box/.style={draw, rounded corners=1.5pt, minimum height=7.5mm, inner xsep=4pt, align=center}, bgp/.style={-{Stealth[length=2mm]}, dashed}, web/.style={-{Stealth[length=2mm]}}] \node[box] (you) {you\\[-1pt]\scriptsize browser}; \node[box, right=of you] (ferrix) {lab daemon\\[-1pt]\scriptsize AS4200000001}; \node[box, right=of ferrix] (pr) {\texttt{pr01.rue}\\[-1pt]\scriptsize AS210036}; \node[box, right=of pr] (rs) {SwissIX route servers\\[-1pt]\scriptsize AS42476}; \node[box, right=of rs] (sw) {SWITCH (ETH)\\[-1pt]\scriptsize AS559}; \node[box, below=4mm of rs] (other) {other exchanges, transit}; \draw[web] (you) -- node[above, inner sep=1.5pt]{\tiny HTTPS} (ferrix); \draw[bgp] (ferrix) -- node[above, inner sep=1.5pt]{\tiny BGP} (pr); \draw[bgp] (pr) -- (rs); \draw[bgp] (rs) -- (sw); \draw[bgp] (pr) |- (other); \end{tikzpicture} \caption{The lab. Dashed arrows are BGP sessions; everything right of \texttt{pr01.rue} is the real Internet.} \label{fig:lab} \end{figure} \task{Announce.} Open \url{\laburl} (username ``netsec'' password ``perrig''). Enter your name as \emph{owner} and your prefix, and press \emph{Announce}. \task{Read what you sent.} Click \emph{bytes} next to your route and hover over the coloured segments. \fillintwo{AS number(s) in \texttt{AS\_PATH}:}{attribute carrying your prefix:} \task{See it from outside.} Wait a moment, then look your prefix up on \texttt{https://bgp.tools/super-lg}. \fillintwo{Origin AS the world sees:}{an AS path you found:} \noindent The lab daemon's AS4200000001 is missing from that path. Where did it go, and why? \answer[2] \task{Reach it.} The router answers for every address in the lab space, so your prefix is reachable exactly when your announcement got out:\quad \texttt{ping -6 2a0d:d741:\nhex::1} \reach % ============================================================================== \section{Steering Your Prefix with Large Communities} A Large Community is a tag added to a route. It can have any meaning that the network which issued it decides. In BGP large communities, the first part is the AS number and the subsequent two integers are up to the interpretation of that network. \begin{table}[h] \centering \begin{tabular}{@{}l@{\hspace{1.6em}}l@{\hspace{1.6em}}l@{}} \toprule Large community & Read by & Effect \\ \midrule \texttt{210036:0:0} & \texttt{pr01.rue} & announce nowhere \ldots \\ \texttt{210036:1:42476} & \texttt{pr01.rue} & \ldots except to AS42476, the SwissIX route servers \\ \midrule \texttt{42476:0:0} & SwissIX & send to no member \ldots \\ \texttt{42476:1:559} & SwissIX & \ldots except AS559, SWITCH, the network ETH is part of \\ \bottomrule \end{tabular} \end{table} \task{One exchange only.} Announce your prefix again with \texttt{210036:0:0} and \texttt{210036:1:42476}; announcing a prefix you own replaces it. Before you look: who do you expect to still see it? \answer[2] \noindent Wait a moment, then check on \texttt{https://bgp.tools/super-lg} and with \texttt{ping}. \reach \task{To SWITCH only.} Add \texttt{42476:0:0} and \texttt{42476:1:559} to the two you already have and announce again. Our router now tells only the route servers, and they tell only SWITCH. \reach \noindent Is your prefix still visible on \texttt{https://bgp.tools/super-lg}? Explain what you see. \answer[2] \task{Use of large communities.} You steered routing in two networks you do not operate, using nothing but numbers attached to a route. What stops you from attaching a community that one of \emph{their} upstreams acts on? \answer[2] \task{Clean up.} Withdraw your prefix and see how long it takes to go away. \end{document}