\documentclass[12pt]{beamer}
\usepackage{amsmath}
\usepackage{url}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[ngerman]{babel}

% Manual syntax highlighting
\newcommand{\synfunc}   [1]{\color{blue!50!black}#1\color{black}}
\newcommand{\synstr}    [1]{\color{red!50!black}#1\color{black}}
\newcommand{\synvar}    [1]{\color{purple!50!black}#1\color{black}}
\newcommand{\synclass}  [1]{\color{green!50!black}#1\color{black}}
\newcommand{\syncomment}[1]{\color{blue!20!black}#1\color{black}}
\newcommand{\syncool}   [1]{\color{beamer@blendedblue}#1\color{black}}
\newcommand{\synoder}      {\ \ \color{black}$\vee$\ \ }
\newcommand{\hr}        {\rule[4pt]{\textwidth}{0.1pt}\\}

\title{Dynamic Host Configuration Protocol}
\author{Ingo Blechschmidt \\\texttt{<iblech@web.de>}}
\institute{LUGA}
\date{25. Januar 2006}

\usetheme{Warsaw}
\usecolortheme{seahorse}
%\usepackage{bookman}
\setbeamercovered{transparent}

\begin{document}

\frame{\titlepage}
\frame[t]{
  \frametitle{Inhalt}
  \tableofcontents
}

\section{Design}
\frame[t]{\frametitle{Problem}
  \begin{itemize}
    \item Zuerst: ein Computer mit Internetzugang
    \pause
    \item Dann: Zweit-PC; Verbindung durch manuelle Konfiguration von
          IP-Adressen, DNS-Servern, \ldots
    \pause
    \item Später: Kauf neuer PC, trotzdem Wunsch nach Beibehaltung der alten PC
    \pause
    \item "`Ein Notebook wär' nicht schlecht\ldots"'
    \pause
    \item \ldots Und irgendwann hat man 20 PC in seinem Zimmer 'rumstehen ;-)
    % http://www.tds.de/tds.com/data/media/_stories/2732/tds_rechenzentrum.jpg
  \end{itemize}
}

\frame[t]{\frametitle{Problem}
  \begin{itemize}
    \item Problem: Manuelle Verwaltung von IP-Adressen und anderen Parametern
          zeitaufwändig und fehlerträchtig
    \item "`Kurz Notebook von \texttt{\$FREUND} anschließen"' geht nicht
    \item Lösung: Umsteigen auf IPv6 und damit automatische Adresskonfiguration
    \item Workaround: DHCP: Vergabe von IP-Adressen durch einen DHCP-Server an
          DHCP-Clients
  \end{itemize}
}

\subsection{Geschichte}
\frame[t]{\frametitle{Geschichte}
  \begin{itemize}
    \item Erste Definition in RFC 1533 (Oktober 1993), aufbauend auf BOOTP
          (erster RFC 951 (September 1985))
    \item Wunsch: Automatische Konfiguration verschiedener Parameter ohne
          Benutzeraufsicht
    \item "`Verschiedene Parameter"' können sein\ldots
          \begin{itemize}
            \item \ldots IP-Adresse des Clients
            \item \ldots IP-Adresse des Routers
            \item \ldots Adresse des Druckers
            \item \ldots mathematische Konstante des Tages
            \item \ldots
          \end{itemize}
  \end{itemize}
}

\subsection{Aufbau}
\frame[t]{\frametitle{Aufbau}
  \begin{itemize}
    \item Multi-Server-Fähigkeit (mehrere Server pro Segment)
    \item Kommunikation mittels UDP: \\
          Wunsch nach einfacher DHCP-Client-Implementierung, auch in Hardware
    \item Vergabe von beliebigen Parametern ("`options"') durch den Server
    \item Vergabe von IP-Adressen an Clients durch den Server
          \pause
          \begin{itemize}
            \item Dauerhafte Allokierung einer IP
                  ("`automatic allocation"')
            \item Temporäre Allokierung einer IP
                  ("`dynamic allocation"'), Erneuern einer bereits
                  vergebenen IP
            \item Manuelle Allkorierung ("`manual allocation"')
          \end{itemize}
  \end{itemize}
}

\section{Anwendungen}
\subsection{Dynamische IP-Adressenkonfiguration}
\frame[t]{\frametitle{Dynamische IP-Adressenkonfiguration}
  \only<1-4>{\begin{block}{Holen einer IP-Adresse}
    \vspace*{0.7em}\begin{enumerate}
      \item[] \textbf{Client} \hfill \textbf{Server}
      \item \onslide<1->{\texttt{DHCPDISCOVER}}
      \item \onslide<2->{\hfill \texttt{DHCPOFFER}}
      \item \onslide<3->{\texttt{DHCPREQUEST}}
      \item \onslide<4->{\hfill \texttt{DHCPACK}}
    \end{enumerate}
  \end{block}}

  \only<5>{\begin{block}{Rückgabe einer IP-Adresse}
    \vspace*{0.7em}\begin{enumerate}
      \item[] \textbf{Client} \hfill \textbf{Server}
      \item \onslide<5->{\texttt{DHCPRELEASE}}
      \onslide<1>{  % XXX hack
        \item[]
        \item[]
        \item[]
      }
    \end{enumerate}
  \end{block}}

  \only<1>{\begin{block}{\texttt{DHCPDISCOVER}}
    \begin{itemize}
      \item Suche nach DHCP-Servern
      \item Broadcasten der Nachricht wegen Unwissenheit über die
            Server-Adressen
    \end{itemize}
  \end{block}}

  \only<2>{\begin{block}{\texttt{DHCPOFFER}}
    \begin{itemize}
      \item Bekanntgabe einer möglichen Konfiguration
      \item Noch keine (dauerhafte) Bindung
    \end{itemize}
  \end{block}}

  \only<3>{\begin{block}{\texttt{DHCPREQUEST}}
    \begin{itemize}
      \item Verlangen einer festgeschriebenen/permanenten Bindung
    \end{itemize}
  \end{block}}

  \only<4>{\begin{block}{\texttt{DHCPACK}}
    \begin{itemize}
      \item Bestätigung der \texttt{DHCPREQUEST}-Nachricht
      \item (Oder: \texttt{DHCPNAK} -- "`Sorry, Adresse bereits vergeben"')
    \end{itemize}
  \end{block}}

  \only<5>{\begin{block}{\texttt{DHCPRELEASE}}
    \begin{itemize}
      \item Rückgabe der allokierten Adresse
      \item Anwendungen: Herunterfahren, Wechsel des Netzwerks
    \end{itemize}
  \end{block}}
}

\subsection{Diskless-Clients}
\frame[t]{\frametitle{Diskless-Clients}
  \begin{itemize}
    \item Szenario: Diskless-Clients mit teilweise unterschiedlicher
          Hardwareausstattung
    \item Probleme: Zuordnung von Namen, "`was ist der näheste Drucker?"', \ldots
    \pause
    \item Lösung: Ausnutzen des Optionentransports von DHCP
  \end{itemize}

  \begin{block}{Beispiel}
    \vspace*{-0.4em}\begin{tabbing}
      Hintergrundbild: \= \kill
      Rechnername:     \> \texttt{box} \\
      Druckserver:     \> \texttt{printer17.foo.bar} \\
      Scannerserver:   \> \texttt{scanner.foo.bar} \\
      Position:        \> \texttt{Raum 101} \\
      Hintergrundbild: \> \texttt{/mnt/server/\ldots/pugs.png}
    \end{tabbing}
  \end{block}
}

\section{Einrichtung}
\subsection{Server}
\frame[t]{\frametitle{Server}
  \begin{itemize}
    \item 97 Projekte über "`DHCP"' auf Freshmeat
    \item Berühmtester Server: ISC DHCP
    \item Unterstützung vieler Features durch ISC DHCP
    \item Je nach Einsatzzweck unnötig komplex
  \end{itemize}
}

\frame[t]{\frametitle{\texttt{/etc/dhcpd.conf}}
  \only<1>{\texttt{%
    \syncomment{\# Globale Optionen}\\
    \syncomment{\# (Gültigkeit für alle zu verwaltenen Subnetze)}\\
    \synfunc{option}\ \synclass{domain-name}\\
    \ \ \ \ "\synstr{infothek.holbein-gymnasium.de}";\\
    \synfunc{option}\ \synclass{routers}\\
    \ \ \ \ \synstr{router.infothek.holbein-gymnasium.de};\\
  }}

  \only<2>{\texttt{%
    \syncomment{\# Definitionen für ein zu verwaltenes Subnetz}\\
    \synfunc{subnet}\ \synstr{192.168.0.0}\ \synclass{netmask}\ \synstr{255.255.255.0}\ \{\\
    \ \ \ \ \syncomment{\# IP-Vergabebereich}\\
    \ \ \ \ \synfunc{range}\ \synstr{192.168.0.101}\ \synstr{192.168.0.199};\\
    \ \\
    \ \ \ \ \syncomment{\# \ldots}\\
    \}\\
    \ \\
    \syncomment{\# Evtl. Definitionen für zweites Subnetz}\\
    \synfunc{subnet}\ \synstr{172.16.0.0}\ \synclass{netmask}\ \synstr{255.255.255.0}\ \{\\
    \ \ \ \ \syncomment{\# \ldots}\\
    \}\\
  }}

  \only<3>{\texttt{%
    \syncomment{\# Fixierung einiger IP-Adressen}\\
    \synfunc{group}\ \{\\
    \ \ \ \ \synfunc{host}\ \synstr{box}\ \{\\
    \ \ \ \ \ \ \ \ \synfunc{hardware ethernet}\ \synstr{DE:AD:CO:DE:13:37};\\
    \ \ \ \ \ \ \ \ \synfunc{fixed-address}\ \ \ \ \ \synstr{192.168.0.42};\\
    \ \ \ \ \}\\
    \ \\
    \ \ \ \ \synfunc{host}\ \synstr{foobar}\ \{\ldots\}\\
    \ \ \ \ \syncomment{\# \ldots}\\
    \}\\
  }}
}

\subsection{Client}
\frame[t]{\frametitle{Client}
  \begin{itemize}
    \item dhcpcd: Daemon (notwendig für Adresserneuerung)
    \item dhclient: Einmaliges Adressenholen
    \item \ldots
  \end{itemize}
}

\section{Sicherheit}
\subsection{Klartextübertragung}
\frame[t]{\frametitle{Klartextübertragung}
  \begin{itemize}
    \item Optionsübertragung im Klartext -- je nach Optionstyp unterschiedlich
          gefährlich ("`Position"' vs. "`Rootpasswort"')
    \item Erfolgreiches Sniffen problemlos möglich
  \end{itemize}
}

\subsection{Keine Authentifizierung}
\frame[t]{\frametitle{Keine Authentifizierung}
  \begin{itemize}
    \item Keine Authentifizierung bei \texttt{DHCPDISCOVER} oder
          \texttt{DHCPREQUEST}
    \item Daher Allokierung /vieler/ Adressen problemlos möglich
    \item Damit Erschöpfung des Adresspools -- \\
          keine Möglichkeit für legitime Clients, Adressen zu erhalten
  \end{itemize}
}

\subsection{Alternativen}
\frame[t]{\frametitle{Alternativen}
  \begin{itemize}
    \item Manuelle Konfiguration
    \item Evtl. spezialisierte Eigenentwicklungen (spricht aber gegen "`don't
          reinvent the wheel"')
    \item IPv6 mit statusloser (!) Adressautokonfiguration und Router~Discovery
  \end{itemize}
}

\end{document}
