\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}
Download