DHCP

Aus wiki.archlinux.de

Per DHCP (Dynamic Host Configuration Protocol) ist es möglich, IP-Adressen mit Hilfe eines Servers dynamisch zuzuweisen. Zusätzlich zu den IP-Adressen können dem Client auch noch weitere Netzinformationen wie Nameserver, Gateway, etc. zugewiesen werden.

DHCP wurde entwickelt, um große Netze mit häufig wechselnder Topologie (Beispielsweise ein Rechner/Netzwerk-Pool an einer Universität, wo häufig verschiedene Rechner in Betrieb sind) zu verwalten. Zudem wird im privaten Umfeld meist DHCP benutzt, wenn man nur einen Computer hat, um ins Internet gehen zu können – Im Modem/Router befindet sich dann auch meist ein DHCP-Server.

Konfiguration

Um in Arch DHCP zu nutzen, muss man seine rc.conf-Datei bearbeiten. Zuerst ermittelt man seine Netzwerk-Interfaces, dies geschieht entweder über „ifconfig -a“ oder „ls /sys/class/net/“.

user@host:~$ ls /sys/class/net/
eth0 lo

Am Beispiel ist zu sehen, dass zwei Interfaces verfügbar sind. Einmal „eth0“, und einmal „lo“. Letzteres sollte immer vorhanden sein, da es unter anderem auch für die systeminterne Kommunikation zwischen einigen Programmen verwendet wird. Um die Netzinformationen für das Interface „eth0“ zu beziehen, ändert also man den diesbezüglichen Eintrag in der „rc.conf“.

Im Abschnitt „NETWORKING“ in dieser Datei befindet sich vermutlich schon ein Eintrag für das Interface zusätzlich kann es auch sein, dass ein Gateway und eine Route definiert wurden. Dies könnte Beispielsweise so aussehen:

eth0="eth0 192.168.6.2 netmask 255.255.255.0 broadcast 192.168.6.255"
[…]
gateway="default gw 192.168.6.1"
ROUTES=(gateway)

Wenn man jetzt DHCP verwenden möchte, muss man diese Zeilen anpassen. Das Gateway muss deaktiviert werden, sofern es per DHCP zugewiesen wird, und zudem muss dem System mitgeteilt werden, dass man DHCP anstelle einer festen Konfiguration verwenden möchte

eth0="dhcp"
[…]
gateway="default gw 192.168.6.1"
ROUTES=(!gateway)

Die Änderung bei „eth0“ sorgt dafür, dass beim Initialisieren des Interfaces nun eine DHCP-Anfrage gesendet wird. Das Ausrufezeichen bei der ROUTES-Definition deaktiviert die Gateway-Definition, bzw. sorgt dafür, dass sie nicht aktiviert wird.

Verwendung

Beim nächsten Start wird das Interface nun also mittels DHCP konfiguriert. Man kann das Interface aber auch manuell neu starten. Dazu gibt es zwei Möglichkeiten. Einerseits kann man über „/etc/rc.d/network restart“ das Netzwerksystem neustarten, andererseits kann man auch einfach das Interface de- und wieder aktivieren.

ifconfig eth0 down
ifconfig eth0 up

Es wird immer, wenn das Interface aktiviert wird, versucht, per DHCP eine IP zu erhalten. Wenn man sich manuell per DHCP eine IP holen möchte, führt man „dhcpcd“ aus.

root@host:~# dhcpcd eth0
eth0: dhcpcd 4.0.4 starting
eth0: broadcasting for a lease
eth0: offered 192.168.6.64 from 192.168.6.249
eth0: checking 192.168.6.64 is available on attached networks
eth0: acknowledged 192.168.6.64 from 192.168.6.249
eth0: leased 192.168.6.64 for 691200 seconds

In diesem Fall wurde ein DHCP-Server mit der IP 192.168.6.249 gefunden. Der DHCP-Server hat dem Client die IP 192.168.6.64 angeboten. Der Client prüft daraufhin, ob diese IP in dem Netzwerk überhaupt verfügbar ist, und akzeptiert die IP dann. Zudem wird die Information ausgegeben, dass die IP nun für 691200 Sekunden (= 8 Tage) zugewiesen wurde. Dies ist eine Einstellung auf dem DHCP-Server.

Ein „ifconfig eth0“ zeigt neben generellen Informationen zum Interface auch an, was per DHCP sonst noch kam. So sind dort neben der IP natürlich auch die Broadcast-Adresse und die Netzmaske zu sehen, die resolv.conf gibt zudem Aufschluss über die verwendeten Nameserver.

user@host:~$ ifconfig eth0
eth0  Link encap:Ethernet  HWaddr 00:1E:C9:52:79:B9  
      inet addr:192.168.6.64  Bcast:192.168.6.255  Mask:255.255.255.0
      inet6 addr: fe80::21e:c9ff:fe52:79b9/64 Scope:Link
      […]

user@host:~$ cat /etc/resolv.conf 
# Generated by dhcpcd from eth0
# /etc/resolv.conf.head can replace this line
search domain.lokal
nameserver 192.168.6.254
# /etc/resolv.conf.tail can replace this line

Natürlich sind alle Angaben hier nur exemplarisch, und hängen vom DHCP-Server ab, von dem man ein DHCP-Angebot auf seine Anfrage bekommt.

DNS Server festlegen

Der DNS-Server wird in der /etc/resolv.conf festgelegt. Diese Datei wird jedoch beim ausführen von dhcpcd überschrieben. Will man also einen anderen als den von dhcpcd automatisch ermittelten DNS Server verwenden, muss man verhindern, dass die resolv.conf überschrieben wird. Dazu muss man dhcpcd mit der Option -C resolv.conf aufrufen. Beim manuellen starten würde das dann z.B. so aussehen.

dhcpcd -C resolv.conf eth0

Damit der Network-Daemon die Option verwendet, muss man sie in die /etc/conf.d/dhcpcd eintragen.

DHCPCD_ARGS="-C resolv.conf -q"

Alternativ kann man den/die gewünschten DNS-Server auch in /etc/resolv.conf.head eintragen. Der Inhalt dieser Datei wird beim ausführen von dhcpcd am Anfang (also vor dem automatisch ermitteltem DNS-Server) der resolv.conf eingefügt.

DHCP-Server aufsetzen

Selbst einen DHCP-Server aufsetzen zu wollen, kann verschiedene Gründe haben. Hauptsächlich wird man das vermutlich wollen, weil man mehrere Rechner hat, und diese nicht Manuell konfigurieren will. Man benötigt zum Aufsetzen eines DHCP-Servers natürlich einen Computer, auf dem dieser Server laufen soll, zudem benötigt man ein Serverprogramm.

Im „extra“-Repository befinden sich mehrere Programme, mittels derer man einen DHCP-Server aufsetzen kann.

  • dhcp ist das eigentliche Serverprogramm
  • dnsmasq ist ein kombinierter DNS/DHCP-Server
  • bind9 ist ein umfangreiches DNS-Serverprogramm
  • dhcdbd erlaubt das Steuern des DHCP-Clients mittels DBUS
  • dhclient ist ein Standalone-Programm für DHCP-Anfragen
  • dhcpcd ist der „client daemon“ für DHCP

Es gibt im Netz unzählige Anleitungen, um einen DHCP-Server aufzusetzen und zu konfigurieren. Da dies trotz vieler anders lautender Behauptungen nicht ganz trivial ist, und eine Fehlkonfiguration zudem sogar ein Sicherheitsrisiko darstellen kann, sei hier noch mal darauf verwiesen, dass man nur einen DHCP-Server selbst einrichten sollte, wenn man es wirklich benötigt, und bereits Erfahrung im Umgang mit Linux und wissen im Bereich der Netzwerkadministration hat. Für den durchschnittlichen Heimanwender reichen die DNS-Lösungen, die mit den meisten Modems/Routern kommen, völlig aus.

Siehe auch

  • dhcpd – Aufsetzen eines DHCP-Servers

Weblinks