[[Vorlage(Getestet, bionic,focal)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:sudo: Root-Rechte erlangen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/service.png, 48, align=left)]] DHCP erleichtert die Vergabe von IP-Adressen im lokalen Netzwerk. Ist ein DHCP-Server im Netzwerk vorhanden, kann dieser neben der Vergabe der IP-Adressen für die Clients diesen auch die IP-Adresse des Routers, eines Namensservers usw. bekanntgeben. In diesem Artikel wird eine Konfiguration des [https://www.isc.org/downloads/dhcp/ ISC-DHCP-Servers] {en} beschrieben. Für die Konfiguration eines DHCP-Servers sind grundlegende Netzwerkkenntnisse und das Verständnis des [wikipedia:DHCP:DHCP-Protokolls] notwendig. = Installation = Zur Installation des DHCP-Servers ist das folgende Paket zu installieren [1]: {{{#!vorlage Paketinstallation isc-dhcp-server }}} In älteren Ubuntu-Versionen hieß das Paket noch '''dhcp3-server'''. Während der Installation fragt [:debconf:], an welches Netzwerkgerät der DHCP-Server gebunden werden soll. Die richtige Auswahl ist bei Vorhandensein mehrerer Schnittstellen sinnvoll. Nachträglich kann man dieses auch in der Datei '''/etc/default/isc-dhcp-server''' mit einem Editor [2] mit Root-Rechten [3] ändern: {{{ INTERFACESv4="enp0s3" INTERFACESv6="enp0s3" }}} = Konfiguration = == Die dhcpd.conf-Datei == Die Konfiguration des DHCP-Servers geschieht in der Datei '''/etc/dhcp/dhcpd.conf'''. Die Syntax ist hier recht selbsterklärend. Die Datei beinhaltet grundlegende Statements, die jeweils aus einem Schlüsselwort und bei Bedarf einem oder mehreren Argumenten bestehen. Argumente werden durch Leerzeichen getrennt und mit einem Semikolon am Zeilenende abgeschlossen. {{{ Parameter Deklaration # Beispiel range 192.168.2.10 192.168.2.40; }}} Zur Gruppierung der Parameter werden diese mit geschweiften Klammern in Blöcke gefasst. Parameter, die außerhalb eines Blocks stehen, gelten global. Kommentare werden durch das Zeichen '''#''' eingeleitet. === Authoritative-Statement === DHCP-Server sollten das folgende Statement im globalen Bereich ihrer Konfiguration aufweisen, wenn der Administrator keine falsch konfigurierten "Rogue"-DHCP-Server im eigenen Netzwerk dulden will (also eigentlich immer): {{{ authoritative; }}} === Lease-Time === Die Lease-Time beschreibt den Zeitraum, für den der DHCP-Server einem Client eine IP-Adresse zur Verfügung stellt (least, vermietet). Vor dem Ende des Zeitraums fragt der Client beim Server an, ob der Client die IP-Adresse weiternutzen darf oder eine neue IP-Adresse bekommt. Die Voreinstellungen, die man bei der Installation des Servers vorfindet, sind in den meisten Fällen bereits sinnvoll. In einem Heimnetz, wo nur selten neue Rechner hinzukommen, kann man die Werte `default-lease-time` und `max-lease-time` aber durchaus auf mehrere Stunden oder Tage erhöhen, wenn man möchte. In Netzen mit häufig wechselnden Clients und ggf. knappem Vorrat an IP-Adressen kann man die Lease-Time herabsetzen, damit die Adressen schneller an neue Clients vergeben werden können. Die Angabe erfolgt in Sekunden. === Subnet-Blöcke === Der DHCP-Server kann mehrere Subnetze bedienen. Diese werden durch Blöcke wie folgt definiert: {{{ # Erstes Subnetz subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.40; } # Zweites Subnetz subnet 192.168.3.0 netmask 255.255.255.0 { range 192.168.3.10 192.168.3.40; } }}} Auch wenn das Netz nicht in Subnetze unterteilt werden soll (Subnetting), muss ein Subnet-Block definiert werden. Dieser Block umfasst dann das gesamte Netzwerk. === Range-Statements === Mit dem Parameter `range` wird der Bereich der IP-Adressen definiert, die vom Server an die Clients verteilt werden sollen. `range`-Statements müssen in Subnetz-Blöcken stehen. {{{ # Anfang Ende range 192.168.2.10 192.168.2.40; }}} === Interface === Mit dem Parameter 'interface' wird das Netzwerkinterface gewählt, das heißt über welchen Anschluss die IP- Adressen an andere Rechner verteilt werden. Hinter den Parameter wird nach einem Leerzeichen sofort das Interface angegeben (z.B. `enp0s3`). {{{ # Beispiel interface enp0s3; }}} === Option-Statements === Auf das Schlüsselwort `option` folgen jeweils zusätzliche Angaben über das Netzwerk, die der DHCP-Server neben der IP-Adresse an die Clients vermittelt. `option`-Statements können sowohl im globalen Bereich definiert werden, als auch in `subnet`-Blöcken. {{{ # Beispiele option routers 192.168.1.1; option domain-name-servers 192.168.1.10, 145.253.2.11; }}} Die vorstehend genannten Optionen `routers` und `domain-name-servers` sollten auf jeden Fall definiert werden, um die Funktion des Netzwerks und Zugriff auf das Internet zu ermöglichen. Es gibt aber noch eine Vielzahl weiterer Optionen, wie z. B. die Angabe des DNS-Domainnamens mit `option domain-name`, die in der Manpage zu '''dhcpd.conf''' beschrieben werden. === Host-Blöcke === Mit `host`-Blöcken kann man festlegen, dass bestimmte Rechner vom DHCP-Server immer eine bestimmte IP bekommen sollen, anstatt eine zufällig ausgewählte. `host`-Blöcke befinden sich innerhalb von `subnet`-Blöcken. {{{ host wiki { hardware ethernet 00:00:0e:d2:da:be; fixed-address 192.168.2.5; option host-name "wiki"; } }}} Insbesondere benötigt man in einem `host`-Block die Statements `hardware ethernet` (ohne Bindestrich!) und `fixed-address`. Die Vergabe eines Namens über `option host-name` ist optional. {{{#!vorlage Experten Die Manpage zur '''dhcpd.conf''' geht sehr ausführlich auf weitere Konfigurationsmöglichkeiten ein. }}} == Beispielkonfiguration == In dem unten angegebene Beispiel ist ein DHCP-Server für ein Netzwerk mit diesen Kenndaten konfiguriert: * der Server bedient das Netzwerk 192.168.2.0 * die Clients bekommen IP-Adressen zwischen 192.168.2.10 und 192.168.2.40 zugewiesen * die Optionen des Servers werden an die Schnittstelle enp0s3 gebunden * der Übergang (Gateway bzw. Router) in ein anderes Netzwerk hat die IP-Adresse 192.168.2.1 * der Nameserver hat die IP-Adresse 192.168.2.1 * die Domain heißt "ubuntuusers.home" * einem bestimmten Client wird anhand seiner Hardware-(MAC-)Adresse immer dieselbe IP-Adresse zugewiesen {{{ #Generelle Einstellungen # Rogue-DHCP-Server nicht erlauben (siehe oben) authoritative; # Definition des ersten (einzigen) Subnetzes subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.40; interface enp0s3; # Lease-Time in Sekunden (Vorgaben: default 43200, max 86500) default-lease-time 3600; max-lease-time 7200; option domain-name "ubuntuusers.home"; option domain-name-servers 192.168.2.1; option broadcast-address 192.168.2.255; option subnet-mask 255.255.255.0; option routers 192.168.2.1; } # IP eines Hosts an seine MAC festnageln host wiki { hardware ethernet 00:00:0e:d2:da:be; fixed-address 192.168.2.5; option host-name "wiki"; } }}} Man sollte die Parameter für Lease-Time – außer für Testzwecke – nicht übertrieben knapp einstellen, da dies zur Belastung des Servers und zu häufigen Unterbrechungen der Verbindung bei den Clients führen kann. ## ## TFTP-Server für PXE ## filename "pxelinux.0"; ## filename "/ltsp/pxelinux.0"; ## option root-path "/opt/ltsp/i386"; ##} ##}}} = Starten und Stoppen = Der DHCP-Server kann als [:Dienste:Dienst] mit [4]: {{{#!vorlage Befehl /etc/init.d/isc-dhcp-server start }}} gestartet werden. Das Stoppen erfolgt dementsprechend über: {{{#!vorlage Befehl /etc/init.d/isc-dhcp-server stop }}} = Problembehebung = Wenn der DHCP-Server nicht startet und in der Datei '''/var/log/syslog''' folgender Eintrag steht: {{{ Can't open lease database /var/lib/dhcpd/dhcpd.leases: No such file or directory -- check for failed database rewrite attempt! }}} hilft es, das Verzeichnis '''/var/lib/dhcpd''' zu erzeugen: {{{#!vorlage Befehl sudo mkdir /var/lib/dhcpd }}} Dann kann die Datei '''dhcpd.leases''' erzeugt und beschrieben werden. Wenn folgende Fehlermeldung auftaucht: {{{ Nov 20 22:19:07 localhost dhcpd: Not configured to listen on any interfaces! Nov 20 22:19:07 localhost kernel: [ 1457.609470] init: isc-dhcp-server main process (3765) terminated with status 1 Nov 20 22:19:07 localhost kernel: [ 1457.609585] init: isc-dhcp-server main process ended, respawning Nov 20 22:19:07 localhost dhcpd: Wrote 0 leases to leases file. Nov 20 22:19:07 localhost dhcpd: Nov 20 22:19:07 localhost dhcpd: No subnet declaration for enp0s3 (no IPv4 addresses). Nov 20 22:19:07 localhost dhcpd: ** Ignoring requests on enp0s3. If this is not what Nov 20 22:19:07 localhost dhcpd: you want, please write a subnet declaration Nov 20 22:19:07 localhost dhcpd: in your dhcpd.conf file for the network segment Nov 20 22:19:07 localhost dhcpd: to which interface enp0s3 is attached. ** }}} kann mit dem Befehl `ip addr add 192.168.2.11/24 dev enp0s3` dem Interface eine IP-Adresse zugewiesen werden, welche es aber nach jedem Neustart wieder verliert. = Links = * [https://www.isc.org/downloads/dhcp/ Offizielle Webseite] {en} * [http://www.arda.homeunix.net/dnssetup.html DNS & DHCP Setup] {en} - Tutorial * [http://tldp.org/HOWTO/DHCP/index.html DHCP mini-HOWTO] {en} - weiteres Tutorial * [http://sourceforge.net/p/webadmin/bugs/3775/] {en} - angepasste Webmin-Konfigurationsdatei * [http://subnet-calculator.org/ Subnetz Rechner für IP Adressen] {en} - IP Subnetz Rechner * [:Serverdienste:] {Übersicht} Übersichtsseite # tag: Netzwerk, Edubuntu, Server, dhcp, ip