\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