

	\documentclass[a4paper,11pt]{article}
	\usepackage{ngerman}
	\usepackage[latin1]{inputenc}
	\setlength\parskip{\medskipamount}
	\setlength\parindent{0pt}
	\begin{document}

	
 % dhcp
 % Copyright Andreas Schockenhoff
 % Lizenz: GFDL
 % 
 % $Name: $
 % $Revision: 1.15.2.7 $
 % $Source: /cvsroot/selflinux/tutorial/advanced/netzwerk_advanced/dhcp/dhcp,v $
 % SelfLinux-0.7.2
 %
 % Diese Datei ist Teil von SelfLinux http://www.selflinux.de
 %
 %%% $Id: dhcp,v 1.15.2.7 2003/01/01 22:40:49 fboerner Exp $

	\title{Dynamic Host Configuration Protocol}


	
	    \author{Andreas Schockenhoff}
	    %\url{mailto:asc@gmx.li}
    

	\maketitle

	
	
	%\ref{../index.tex}
	
		%\ref{netzwerk_basic1.tex}
		Linux im Netzwerk - Einführung
	\ref{dhcp}

    \par{Layout}
    Matthias Hagedorn
	    %\url{mailto:herbert-kw@t-online.de}
    
    	\par{Lizenz}
	GFDL
 
	\tableofcontents{}

        
	\section{DHCP} \label{d39e51}
        

   

   
  \par
  
Das Dynamic Host Configuration Protocol
dient dazu, einem Client-Rechner seine
Netzparameter zu übermitteln.
   

   
  \par
  
Siehe DHCP RFC-2131 und andere
   
  \section{Leistungsmerkmale} \label{d39e65}
        

   

   
  \par
  
Einfache Zuteilung von Netzwerkinformationen
in lokalen TCP/IP-Netzen. z.B. {\bf IP-Nummer},
{\bf Domainname}, {\bf Routing}, 
{\bf DNS-Server} u.s.w.
   

   
  \par
  
Für Diskless-Workstations bilden {\bf DHCP} oder 
{\bf bootp} die Grundlage. 

   
  \section{Kurzbeschreibung der Arbeitsweise} \label{d39e97}
        

   

   
  \par
  
Beim Booten kennt der Rechner nur die {\bf MAC-Adresse}
seiner Netzwerkkarte. \linebreak 
Diese ist meistens in die Netzwerkhardware
programmiert (Ethernet, FDDI, Firewire, Wireless
LAN). Bereiche für MAC-Adressen werden nach einem
internationalen Standard von einem Gremium (siehe

http://standards.ieee.org/regauth/oui/index.shtml)
an die Hersteller der Hardware aufgeteilt. Diese
vergeben dann an jeden Netzwerkport eine eindeutige
{\bf MAC-Adresse}.
   

   
  \par
  
Mit der {\bf MAC-Adresse} startet der Rechner eine
Rundfrage (Broadcast) ins Netz, mit der Bitte, ihm
doch eine Netzwerkkonfiguration mitzuteilen.
   

   
  \par
  
Der {\bf DHCP-Server} wartet auf solche Rundfragen und
teilt Ihm die entsprechenden Daten mit.
   

   
  \par
  
Außerdem merkt sich der Server die {\bf MAC-Adresse}
des Klienten und die zugeteilte {\bf IP-Adresse}
in einer Datei. ({\bf dhcp.leases})
   

   
  \par
  
Diese {\bf IP-Adresse} wird für eine bestimmte Zeit
für diesen Klienten reserviert ({\bf Lease Time}).
Nach einiger Zeit versucht der Klient,
seine Adresse bei dem Server zu erneuern
({\bf renewing}).
Wenn er keinen Erfolg hat, fragt der Klient
etwas später alle Server nach seiner
Adresse ({\bf rebinding}).
   

   
  \par
  
Bekommt er seine Adresse nicht erneuert,
muß er alle Netzwerkaktivitäten stoppen.
Er darf dann aber von vorn mit dem 
{\bf DHCP-Protokoll} beginnen.
   
  \section{Arten der Zuteilung von IP-Adressen} \label{d39e164}
        

   

   \subsection{Feste IP's aufgrund der MAC-Adresse} \label{d39e171}
        

    

    
  \par
  
{\bf MAC-Adressen} und {\bf IP-Adresse
}werden fest in die {\bf dhcp.conf}
eingetragen.
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
Ausschnitt dhcp.conf file
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
host test{
  hardware ethernet 00:00:c0:5d:bd:95;
  fixed-address 192.168.0.121;
# Bei laufenden Nameservice geht auch
# fixed-address test.local.invalid;
}
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 

   

   \subsection{Feste IP's automatisch zugeteilt - mit Zeitbegrenzung} \label{d39e200}
        

    

    
  \par
  
Hier sind unbegrenzte (schlecht) oder lange
Laufzeit möglich.
    

    
  \par
  
Hier sollte man die {\bf lease Tim}
hochsetzen:
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
Ausschnitt dhcp.conf file 
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
max-lease-time 432000;
# 24*60*60*5 -> 5 Tage
subnet 192.168.0.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.0.32 192.168.0.40;
}
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 

   

   \subsection{Dynamische Zuteilung} \label{d39e226}
        

    

    
  \par
  
Wie oben, nur {\bf lease Time} nicht 
so hoch setzen.
    
   
  \section{Konfiguration der Klienten} \label{d39e241}
        

   

   
  \par
  
Heute sind die meisten Rechner mit 
{\bf DHCP-Unterstützung} auf der Client-Seite 
vorkonfiguriert.
Das {\bf DHCP-Protokoll} vereinfacht die
Netzwerkonfiguration erheblich.
   

   
  \par
  
Es sind auf den Klienten keine rechnerspezifischen
Netzwerkeinstellungen mehr vorzunehmen.
Im Prinzip muß man den Rechnern nur sagen, daß {\bf DHCP
}genutzt werden soll.
   

   \subsection{DHCP-Klienten} \label{d39e263}
        

    

    \subsubsection{Linux} \label{d39e270}
        

     

     
  \par
  
{\bf pump}, {\bf dhcpclient}, 
{\bf dhcpcd}, {\bf dhclient}. .......
     

     
  \par
  
Auch {\bf DHCP-Klienten} können umfangreich konfiguriert
werden, siehe: {\bf /etc/dhcpc/config} aus dem 
{\bf dhcpcd}-Paket. So kann man auch verhindern, 
dass Daten vom {\bf DHCP-Server} übernommen werden, 
die einem eine spezielle Netzwerkkonfiguration überschreiben.
     
    

    \subsubsection{BSD} \label{d39e308}
        

     

     
  \par
  
BSD-Varianten unterstützen, genau wie Linux, {\bf DHCP}
als Client und Server.
     
    

    \subsubsection{Windows} \label{d39e322}
        

     

     
  \par
  
Auch neuere Windows-Systeme bieten 
{\bf DHCP-Unterstützung} direkt nach der Installation.
     
    

    \subsubsection{Mac} \label{d39e336}
        

     

     
  \par
  
Man hat die Unterstützung direkt nach der Installation,
ob man will oder nicht. :-)
     
    
   
  \section{DHCP Server (www.isc.org)} \label{d39e352}
        

   

   
  \par
  
Die Installation des Servers sollte in den
gängigen Distributionen kein Problem sein,
z.B. bei Debian: 
   

   
     \begin{tt} \begin{scriptsize} root@linux / \# 
apt-get install dhcp3-server
     \end{scriptsize} \end{tt} \linebreak 
   

   
  \par
  
Nach der Installation befindet sich bei Debian
die Konfigurationsdatei {\bf /etc/dhcp3/dhcpd.conf
}auf dem System.
   

   
  \par
  
Die Datei ist gut kommentiert und man sollte
sie seinen Bedürfnissen anpassen ({\bf Domain-Name},
{\bf IP-Adressen}, ...)
   

   
  \par
  
Falls man den Server in der Testphase nur von
Hand starten will, sollte man die Links in
den entsprechenden Runleveln löschen.
Debian: 
   

   
     \begin{tt} \begin{scriptsize} root@linux / \# 
update-rc.d -f dhcp3-server remove
     \end{scriptsize} \end{tt} \linebreak 
   

   
  \par
  
Nach der Testphase kann man diese wieder
aktivieren, z.B. Debian: 
   

   
     \begin{tt} \begin{scriptsize} root@linux / \# 
update-rc.d dhcp3-server defaults
     \end{scriptsize} \end{tt} \linebreak 
   

   \subsection{Eine erste Konfigurationsdatei} \label{d39e413}
        

    

    
  \par
  
Alles, was man nicht versteht, kommentiert man
erstmal aus. :-) Ich habe das meiste der Übersicht
wegen gelöscht.
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
minimal dhcp.conf file 
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
#
# Sample configuration file for ISC dhcpd3 for
# Debian 3.0 Woody
#

# option definitions common to all supported
# networks...
# option domain-name "local.invalid";

subnet 192.168.0.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.0.31 192.168.0.40;
}
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 

    
  \par
  
Nun kann der {\bf DHCP Server} zehn Adressen dynamisch
an die {\bf DHCP-Klienten} zuweisen.
    
   

   \subsection{Testen des Servers} \label{d39e442}
        

    

    
  \par
  
Auf einem Debian System sollte nochmal in
{\bf /etc/default/dhcp3-server} geschaut werden, ob dort
das richtige Interface angegeben ist. (z.B. {\bf eth0})
    

    
  \par
  
Danach kann man zum testen (debuggen) übergehen.
    

    
  \par
  
Starten des Servers:
    

    
      \begin{tt} \begin{scriptsize} root@linux / \# 
/etc/init.d/dhcp start
      \end{scriptsize} \end{tt} \linebreak 
    

    
  \par
  
bzw.
    

    
      \begin{tt} \begin{scriptsize} root@linux / \# 
/etc/init.d/dhcp3-server start
      \end{scriptsize} \end{tt} \linebreak 
    

    
  \par
  
Mal mit {\bf tail -f /var/log/syslog} den Start
verfolgen. Läuft der Server? ''{\bf ps ax}''
bzw. ''{\bf pidof dhcpd3}''
    

    
  \par
  
Besser zum Debuggen ist wohl der Aufruf
    

    
      \begin{tt} \begin{scriptsize} root@linux / \# 
dhcpd3 -d -f
      \end{scriptsize} \end{tt} \linebreak 
    

    
  \par
  
Fehlermeldungen beachten!
    

    
  \par
  
Auch mal in Files unter {\bf /var/log/*} schauen!
    

    
  \par
  
Testen mit einem zweitem Rechner, z.B. 
Knoppix (Debian von CD) mit 
{\bf pump}:
    

    
      \begin{tt} \begin{scriptsize} root@linux / \# 
pump -s
      \end{scriptsize} \end{tt} \linebreak 
    

    
  \par
  
Auf dem Server kann die Anfrage mit
    

    
      \begin{tt} \begin{scriptsize} root@linux / \# 
tcpdump -e
      \end{scriptsize} \end{tt} \linebreak 
    

    
  \par
  
verfolgt werden.
    

    
  \par
  
Die Anfrage vom Klient muß kommen und wird
vom Server beantwortet.
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
tcpdump Ausgabe
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
(ist leider eine lange Zeile mit \ getrennt)
09:47:32.690249 0:48:54:12:4c:df Broadcast ip 342: \
0.0.0.0.bootpc > 255.255.255.255.bootps:  \
xid:0x1c97abed [|bootp] [tos 0x10]

09:47:32.700021 8:0:46:49:60:8d 0:48:54:12:4c:df \
ip 62: lapwoody.local.invalid > 192.168.0.40: \
icmp: echo request (DF)
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 

    
  \par
  
Das erste ist die Anfrage per {\bf Broadcast}
vom Klienten.
Dann kommt die Antwort mit der {\bf IP-Adresse} für den
Klienten.
    

    
  \par
  
Anmerkung: Wer die Pakete mit ganzem Inhalt sehen
will, kann es auch mit {\bf ngrep} aufzeichnen.
    

    
  \par
  
Nun sollte ein einfacher {\bf DHCP-Server} laufen.
    
   

   \subsection{Der Server bekommt weitere Fähigkeiten} \label{d39e573}
        

    

    
  \par
  
Als nächstes sollte man wieder die sinnvollen
Standard-Angaben anschalten. Die Optionen, die
nicht ''geklammert'' sind, gelten als Vorgaben für
alle späteren Angaben.
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
ddns-update-style none;
# Wir haben unseren dhcp nicht mit einem dns
# Server kombiniert.

option domain-name "local.invalid";
option domain-name-servers 192.168.0.1;
# Unsere domain und die name Server.

default-lease-time 600;
max-lease-time 7200;
# Wann müssen die Adressen die wir verteilt haben
# erneuert werden. In Sekunden, also alle DHCP
# Rechner sollten nach 10 min anfangen euch neue
# Adressen zu holen Wenn 2 Stunden die Adresse
# nicht erneuert werden konnte läuft was falsch
# dann sollte der Klient Rechner seine IP's
# nicht mehr benutzen.

authoritative;
# Regelt welcher DHCP Server mehr zu sagen hat. :-)
# Sobald wir fertig sind enablen
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 
   

   \subsection{Weitere Möglichkeiten mit DHCP} \label{d39e593}
        

    

    
  \par
  
Es gibt globale Angaben, die von lokalen Angaben
überschrieben werden können.
    

    
  \par
  
Einige Optionen aus:
''{\bf man dhcpd.conf}'' und 
''{\bf man dhcp-conf}''
(offizielle Optionen sind in RFC 2132 beschrieben):
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
config-datei 
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
     
option domain-name "local.invalid";
option domain-name-servers 192.168.0.1, 192.168.0.2;
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 


    
  \par
  
{\bf Domain Name} und die {\bf DNS Server
}Übertragen.
    

    \begin{tabular}{|l|}
                  \hline
                  \begin{tt} 
        
config-datei
     \end{tt} \\ 
                  \hline
                  \begin{minipage}{130mm} 
                  \begin{scriptsize} 
                  \begin{verbatim} 
        
      
option routers 192.168.0.1;
     
     \end{verbatim} 
                  \end{scriptsize} 
                  \end{minipage} \\
                  \hline
                  \end{tabular} 

    
  \par
  
Den {\bf Default-Gateway} angeben.
    
   
  \section{Ausblick} \label{d39e650}
        

   

   
  \par
  
In späteren Versionen soll der Text u.a. um die
folgenden Schwerpunkte erweitert werden:
   
   
   \begin{list}{*}{}
    
	\item 
DHCP und Sicherheit
    
    
	\item 
Ausfallsicherheit durch mehrere Server
 (failover)
    
    
	\item 
DHCP Relay
    
    
	\item 
Verknüpfung von DHCP und DNS
    
    
	\item 
Verknüpfung von DHCP und NMB (SMB)
    
   \end{list}

   
  \par
  
Links: \linebreak 

http://www.isc.org/products/DHCP/ \linebreak 

http://standards.ieee.org/regauth/oui/index.shtml \linebreak 

http://www.phystech.com/download/dhcpcd.html
   

   
  \par
  
RFCs: \linebreak 

http://www.rfc-editor.org/ \linebreak 
Bitte dort die Suchmaschine benutzen.
   

   
  \par
  
Andere Quellen: \linebreak 

http://www.linux-praxis.de/linux3/dhcp.html \linebreak 

http://www.linux-fuer-alle.de/doc\_show.php?docid=8 \linebreak 

http://www.linuxwiki.de/DHCP
   
  
	\ref{inhalt.tex}


	\end{document}
	
