Einführung
DHCP steht für Dynamic Host Configuration Protocol. Mit einem DHCP-Server kann man Clients in einem Netzwerk automatisch eine IP-Konfiguration zuweisen. Somit muss man bei den Clients nicht manuell eine IP-Konfiguration vornehmen. Meistens wird über den DHCP-Server die IP-Adresse des Clients, die Subnetzmaske vom Netzwerk, der Default-Gateway und der zu verwendende DNS-Server verteilt.
Installation
Unter Debian heisst das Paket vom DHCP-Server isc-dhcp-server
(früher dhcp3-server
). Installiert wird es folgendermassen:
$ sudo aptitude install isc-dhcp-server
Nach der Installation ist der DHCP-Server noch nicht aktiv. Dieser muss zuerst konfiguriert werden.
Konfiguration
Das Konfigurationsfile vom DHCP-Server befindet sich nach der Installation im Verzeichnis /etc/dhcp
und heisst dhcpd.conf
.
Meine Konfiguration vom DHCP-Server ist relativ simpel und sieht folgendermassen aus:
########################################################################
#
# /etc/dhcp/dhcpd.conf
# Konfigurationsfile vom DHCP-Server (isc-dhcp-server)
#
# 2011-08-28; Emanuel Duss; Erste Version
#
########################################################################
########################################################################
# DHCP-Server
########################################################################
# Authoritative = Aktiv (Sendet DHCPNAK)
authoritative;
# Logging
log-facility local7;
# Lease-Time (86400 = 1 Tag)
default-lease-time 86400;
max-lease-time 86400;
########################################################################
# Globale Optionen
########################################################################
# Domain
option domain-name "duss.xy";
# DNS-Server
option domain-name-servers 10.0.0.20;
# NTP-Server
option ntp-servers 10.0.0.20;
########################################################################
# Subnetz
########################################################################
# Subnetz 10.0.0.0/24
subnet 10.0.0.0 netmask 255.255.255.0 {
# Range
range 10.0.0.100 10.0.0.200;
# Default-Gateway
option routers 10.0.0.1;
}
########################################################################
# Hosts
########################################################################
# Statische Adressen
host eris {
hardware ethernet 58:94:6B:E9:FD:78;
fixed-address 10.0.0.23;
}
# EOF
Authoritative bedeutet, dass der DHCP-Server Clients im Netzwerk konfigurieren darf. Die Konfiguration ist ein Tag lang gültig. Dann muss der Client erneut eine Konfiguration anfordern. Meldungen schreibt der Daemon ins syslog
( /var/log/messages
).
Die Clients bekommen die Domain duss.xy
. Als DNS-Server wird 10.0.0.20
an die Clients verteilt.
Aus dem Netz 10.0.0.0/24
können IP-Adressen aus dem Bereich 10.0.0.100
bis 10.0.0.200
verteilt werden. Um in andere Netze zu gelangen, wird der Default-Gateway 10.0.0.1
verteilt. Der Host eris
mit der angegebenen MAC-Adresse bekommt immer dieselbe IP-Adresse 10.0.0.23
zugewiesen.
Kontrolle auf dem Server
Folgende Meldungen schreib der Syslog-Daemon ins File /var/log/messages
:
$ sudo tail -f /var/log/messages | grep dhcpd
Aug 30 23:49:31 debian dhcpd: DHCPDISCOVER from 00:15:af:dd:4f:ab via eth0
Aug 30 23:49:32 debian dhcpd: DHCPOFFER on 10.0.0.108 to 00:15:af:dd:4f:ab (chaos) via eth0
Aug 30 23:49:32 debian dhcpd: DHCPREQUEST for 10.0.0.108 (10.0.0.20) from 00:15:af:dd:4f:ab (chaos) via eth0
Aug 30 23:49:32 debian dhcpd: DHCPACK on 10.0.0.108 to 00:15:af:dd:4f:ab (chaos) via eth0
Daran sieht man, dass die vier DHCP-Message-Types DHCPDISCOVER
, DHCPOFFER
, DHCPREQUEST
und DHCPACK
verschickt wurden.
Die selben vier Nachrichten sieht man auch mit dem Netzwerk-Sniffer tcpdump
:
$ sudo tcpdump -n port 67 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:49:31.921845 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:af:dd:4f:ab, length 323
23:49:32.000143 IP 10.0.0.20.67 > 10.0.0.108.68: BOOTP/DHCP, Reply, length 300
23:49:32.010123 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:af:dd:4f:ab, length 335
23:49:32.038398 IP 10.0.0.20.67 > 10.0.0.108.68: BOOTP/DHCP, Reply, length 300
Was jedoch wirklich im DHCP-Protokoll steckt, zeigt das Tool dhcpdump
. Dieses stellt die DHCP-Nachrichten schön leserlich dar.
$ sudo dhcpdump -i eth0
TIME: 2011-08-30 23:49:31.922
IP: 0.0.0.0 (0:15:af:dd:4f:ab) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 39ab2218
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:af:dd:4f:ab:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER)
OPTION: 57 ( 2) Maximum DHCP message size 1500
OPTION: 60 ( 49) Vendor class identifier dhcpcd-5.2.12:Linux-2.6.39-ARCH:i686:GenuineIntel
OPTION: 12 ( 5) Host name chaos
OPTION: 55 ( 15) Parameter Request List 1 (Subnet mask)
121 (Classless Static Route)
33 (Static route)
3 (Routers)
6 (DNS server)
12 (Host name)
15 (Domainname)
26 (Interface MTU)
28 (Broadcast address)
42 (NTP servers)
51 (IP address leasetime)
54 (Server identifier)
58 (T1)
59 (T2)
119 (Domain Search)
---------------------------------------------------------------------------
TIME: 2011-08-30 23:49:32.000
IP: 10.0.0.20 (0:1e:b:27:a2:94) > 10.0.0.108 (0:15:af:dd:4f:ab)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 39ab2218
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.108
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:af:dd:4f:ab:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 2 (DHCPOFFER)
OPTION: 54 ( 4) Server identifier 10.0.0.20
OPTION: 51 ( 4) IP address leasetime 86400 (24h)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 3 ( 4) Routers 10.0.0.1
OPTION: 6 ( 4) DNS server 10.0.0.20
OPTION: 15 ( 7) Domainname duss.xy
OPTION: 58 ( 4) T1 43200 (12h)
OPTION: 59 ( 4) T2 75600 (21h)
---------------------------------------------------------------------------
TIME: 2011-08-30 23:49:32.010
IP: 0.0.0.0 (0:15:af:dd:4f:ab) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 39ab2218
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:af:dd:4f:ab:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 3 (DHCPREQUEST)
OPTION: 50 ( 4) Request IP address 10.0.0.108
OPTION: 54 ( 4) Server identifier 10.0.0.20
OPTION: 57 ( 2) Maximum DHCP message size 1500
OPTION: 60 ( 49) Vendor class identifier dhcpcd-5.2.12:Linux-2.6.39-ARCH:i686:GenuineIntel
OPTION: 12 ( 5) Host name chaos
OPTION: 55 ( 15) Parameter Request List 1 (Subnet mask)
121 (Classless Static Route)
33 (Static route)
3 (Routers)
6 (DNS server)
12 (Host name)
15 (Domainname)
26 (Interface MTU)
28 (Broadcast address)
42 (NTP servers)
51 (IP address leasetime)
54 (Server identifier)
58 (T1)
59 (T2)
119 (Domain Search)
---------------------------------------------------------------------------
TIME: 2011-08-30 23:49:32.038
IP: 10.0.0.20 (0:1e:b:27:a2:94) > 10.0.0.108 (0:15:af:dd:4f:ab)
OP: 2 (BOOTPREPLY)
HTYPE: 1 (Ethernet)
HLEN: 6
HOPS: 0
XID: 39ab2218
SECS: 0
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 10.0.0.108
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:af:dd:4f:ab:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION: 53 ( 1) DHCP message type 5 (DHCPACK)
OPTION: 54 ( 4) Server identifier 10.0.0.20
OPTION: 51 ( 4) IP address leasetime 86400 (24h)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 3 ( 4) Routers 10.0.0.1
OPTION: 6 ( 4) DNS server 10.0.0.20
OPTION: 15 ( 7) Domainname duss.xy
OPTION: 58 ( 4) T1 43200 (12h)
OPTION: 59 ( 4) T2 75600 (21h)
---------------------------------------------------------------------------
Die DHCP-Message-Types bedeuten folgendes:
DHCPDISCOVER
: Der Client sendet per Broadcast eine Anfrage ins Netzwerk und fragt nach einer IP-Konfiguration. Dabei sagt er dem Server, wie er heisst und welche Parameter er annehmen kann. Unter der Parameter-Liste ist z. B. die Subnetzmaske, der DNS-Server, der Default-Gateway oder die Domain zu finden.DHCPOFFER
: Der Server antwortet mit einem Konfigurations-Angebot.DHCPREQUEST
: Falls das Angebot dem Client passt, fordert er die gewünschten Parameter an.DHCPACK
: Falls alles funktioniert hat, bestätigt der DHCP-Server die Konfiguration.
Kontrolle auf dem Client
Der Client hat die IP-Adresse 10.0.0.108
mit der Subnetzmaske 255.255.255.0
zugewiesen bekommen. Das sehen wir mit ifconfig -a wlan0
:
$ ifconfig -a wlan0
wlan0 Link encap:Ethernet HWaddr 00:15:AF:DD:4F:AB
inet addr:10.0.0.108 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:afff:fedd:4fab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:162 errors:0 dropped:0 overruns:0 frame:0
TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16929 (16.5 Kb) TX bytes:19607 (19.1 Kb)
In der Routing-Tabelle sieht man den Default-Gateway 10.0.0.1
. Der Default-Gateway erkennt man immer an der Destination 0.0.0.0
.
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
In der Datei /etc/resolv.conf
sieht man die Domain ( duss.xy
) und der DNS-Server ( 10.0.0.10
):
$ cat /etc/resolv.conf
# Generated by dhcpcd from wlan0
# nameserver 8.8.8.8
domain duss.xy
nameserver 10.0.0.10
# /etc/resolv.conf.tail can replace this line
Es lohnt sich auch die Konfiguration vom DHCP-Client anzuschauen! Wird der
DHCP-Client dhclient
verwendet, befindet sich die Konfiguration unter
/etc/dhcp/dhclient.conf
(Debian) bzw. unter /etc/dhclient.conf
(Arch Linux).
Links und weitere Informationen
- Wikipedia: DHCP: http://de.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
- RFC2131: DHCP: http://www.rfc-editor.org/rfc/rfc2131.txt
- Debian Manpage
dhcpd.conf(5)
: http://manpages.debian.net/cgi-bin/man.cgi?query=dhcpd.conf&sektion=5&apropos=0&manpath=Debian+6.0+squeeze&locale= - Debian Manpage:
dhcpd(8)
: http://manpages.debian.net/cgi-bin/man.cgi?query=dhcpd&sektion=8&apropos=0&manpath=Debian+6.0+squeeze&locale=