The fill-in fields put the label on its own line with dotted lines to write on. handout.tex takes \studentnum and \studenthex; build-class.py compiles one copy per student with the prefix filled in, checks each is two pages and joins them for double-sided printing. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
196 lines
8.2 KiB
TeX
196 lines
8.2 KiB
TeX
% 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}{<n>}
|
|
\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 <your IPv6 address> 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}
|