Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Für die Funktionalität eines DHCP-Servers liefern die offiziellen Ubuntu-Paketquellen mehrere Alternativen:
isc-dhcp-server: DHCP-Server BIND vom Internet Systems Consortium (ISC)
kea-dhcp4-server und kea-dhcp6-server (auch vom ISC)
dnsmasq ist ein kleiner zwischenspeichernder DNS-Proxy und DHCP/TFTP-Server.
systemd-networkd enthält einen integrierten DHCP-Server.
NetworkManager benutzt den DHCP-Server von dnsmasq.
Die beiden DHCP-Server des ISC sind von Vorteil bei großen Installationen mit tausenden von Clienten, insbesondere wenn diese individuelle Konfigurationen benötigen oder mehrere Schnittstellen bedient werden sollen. Im Consumer-Bereich reichen die drei zuletzt genannten Varianten aus. dnsmasq war vor Ubuntu 17.10 als Standardsoftware immer installiert und ist auch bei späteren Versionen oft schon installiert. systemd-networkd ist bei jedem Ubuntu-System bereits installiert und NetworkManager bei jedem Ubuntu-Desktop-System. Diese Anleitung beschränkt sich daher auf diese drei zuletzt genannten Varianten.
Zur Konfiguration müssen zuerst die an die anfragenden Teilnehmer zu verteilenden Informationen festgelegt werden. In dieser Anleitung wird dafür angenommen:
eine individuelle IPv4-Adresse aus dem Bereich 192.168.33.64-192.168.33.127
(64 Adressen)
Der Rechner mit der DHCP-Client-ID 0A:01:02:42:25:67
soll immer die IP-Adresse 192.168.33.129
und entsprechend für die DHCP-Client-ID 0A:99:23:55:66:77
die IP-Adresse 192.168.33.130
reserviert.
ein lokales Netzwerk 192.168.33.0/24
mit Broadcast-Adresse 192.168.33.255
einen Leitweg ins Internet mit dem Gateway 192.168.33.11
(sog. "default route")
zwei DNS-Namensserver 192.0.2.53
und 203.0.113.53
eine DNS-Domäne ubuntuusers.example.net
Die Netzwerk-Schnittstelle, über welche der DHCP-Server Anfragen annimmt und Daten verteilt, heißt LAN
.
Der Artikel zu systemd-networkd wird vorausgesetzt.
Die Datei zu Konfiguration der Schnittstelle LAN
erhält diesen Inhalt:
# /etc/systemd/network/50-LAN.network [Match] Name = LAN [Network] Description = Interne Schnittstelle eines kleinen Multifunktions-Routers DHCPServer = yes Address = 192.168.33.11/24 [DHCPServer] PoolOffset = 64 PoolSize = 64 EmitRouter = yes EmitDNS = yes DNS = 192.0.2.53 203.0.113.53 EmitDomains = yes Domains = ubuntuusers.example.net #SendOption = option:type:value
Die Option "DHCPServer = yes
" schaltet den DHCPv4-Server auf dieser Schnittstelle ein.
Die Angabe "Address = 192.168.33.11/24
" hat an dieser Stelle mehrere Effekte:
Sie gibt der Schnittstelle diese Adresse, ordnet der Schnittstelle einen entsprechenden Leitweg zu und definiert die Broadcast-Adresse für dieses Netzwerk.
Außerdem wird der DHCP-Server nur Adressen aus diesem Netzwerk vergeben.
Der DHCP-Server selbst wird in einem eigenen Abschnitt weiter konfiguriert:
PoolOffset
und PoolSize
steuern, welche Adressen vergeben werden können,
die Optionen EMITusw
verlangen, dass Router, DNS-Namensserver und DNS-Suchdomänen per DHCP an die Clienten verteilt wird; dabei stehen die Werte für diese Optionen als Liste in den Zeilen mit DNS=
und Domains=
.
Die IP-Adresse des Gateways ergibt sich immer automatisch als Adresse der Schnittstelle.
Die Zeilen DNS=
und Domains=
könnte man auch weglassen, dann würden diese Werte ebenfalls automatisch bestimmt auf Grund dessen, was dieser Router ohnehin selbst schon darüber weiß.
Mit dem mehrfach verwendbaren Schlüsselwort SendOption
kann man bei Bedarf eine beliebige DHCP-Option definieren.
Die feste Zuordnung von IP-Adressen ist über den DHCP-Server von systemd-networkd nicht möglich.
NetworkManager startet automatisch auf einer Schnittstelle LAN
einen DHCP-Server, wenn im zugeordneten Verbindungsprofil für die IPv4-Methode der Wert shared
gewählt wird. Dies wird in der GUI als „Gemeinsam mit anderen Rechnern“ dargestellt. Man kann in der GUI nm-connection-editor das Netzwerk definieren oder man verwendet die Vorgabe 10.42.X.0/24
. Im dritten Byte wird „X“, beginnend mit 0
hochgezählt, wenn man mehrere Schnittstellen in diesem Modus konfiguriert. Der Schnittstelle selbst kann man als Gateway für hier angeschlossenen Rechner eine benutzbare Adresse aus dem hier definierten Netz geben. Man kann aber Netzwerk und Vergabebereich der IP-Adressen nicht unabhängig voneinander festlegen. Die oben gestellte Aufgabe kann deshalb mit NetworkManager nur näherungsweise gelöst werden. Entweder muss man die Gateway-Adresse ändern oder den Vergabebereich für die Adressen erweitern. In der Datei für das Verbindungsprofil im Verzeichnis /etc/NetworkManager/system-connections/ sieht das so aus:
[ipv4] # Gateway-Adresse anders als in Aufgabenstellung: address1=192.168.33.64/26,192.168.33.80 # Vergabebereich anders als in Aufgabenstellung: #address1=192.168.33.0/24,192.168.33.11 method=shared
Die DNS-Server und DNS-Suchdomänen werden automatisch entsprechend den bereits für den Rechner geltenden Verhältnisse bestimmt. Da NetworkManager bei Desktop-Installationen normalerweise systemd-resolved als DNS-Cache einrichtet, wird in der Regel dieser Rechner der DNS-Nameserver für die an dieser Schnittstelle LAN
angeschlossenen Rechner.
Die feste Zuordnung von IP-Adressen ist über den DHCP-Server von NetworkManager nicht möglich.
NetworkManager benutzt den DHCP-Server aus dem Paket dnsmasq-base.
Der Artikel zu Dnsmasq wird vorausgesetzt. Dort ist auch die Konfiguration eines DHCP-Servers ausführlich erklärt. Dnsmasq (Abschnitt „Konfiguration-als-DHCP-Server“)
Datei /etc/dnsmasq.conf
interface=LAN interface=AUX no-dhcp-interface=Welt # dhcp-range=interface:LAN,AUX,192.168.33.64,192.168.33.127,12h # dhcp-range=interface:AUX,192.168.33.64,192.168.33.79,1h # dhcp-range=interface:LAN,192.168.33.80,192.168.33.127,infinite dhcp-range=192.168.33.64,192.168.33.127,12h # dhcp-host=<MAC-Adresse>,<IP-Adresse>,<Verleihdauer> dhcp-host=0A:01:02:42:25:67,192.168.33.129,infinite dhcp-host=0A:99:23:55:66:77,192.168.33.130,infinite dhcp-option=3,192.168.33.11
interface
schaltet den DNS-/DHCP-Server auf der genannten Schnittstelle ein.
no-dhcp-interface
schaltet nur den DHCP-Server auf der genannten Schnittstelle aus.
dhcp-range
legt für die genannte Schnittstellen-Liste (oder einzelne Schnittstelle) den zu vergebenden Adressbereich und die Verleihdauer fest. 12h
bedeutet, dass die IP-Adresse 12 Stunden lang gültig ist und dann vom Client erneuert werden muss. Mit der Angabe infinite
statt einer konkreten Verleihdauer verschenkt man die IP-Adresse auf ewig. Wenn man hier die Schnittstellen wegläßt, gilt die Option für alle Schnittstellen.
dhcp-host
ermöglicht es Rechnern über deren DHCP-Client-ID (d.h. in der Regel die benutzte Ethernet-Adresse) eine feste IP-Adresse zuzuweisen.
Mit dhcp-option
kann man den Wert für einen beliebige DHCP-Option festlegen. Dies wird hier benutzt zur Definition des Gateways (= DHCP-Option 3). Genauso kann man auch DNS-Nameserver (= DHCP-Option 6), Suchdomänen (= DHCP-Option 119) und beliebige weitere Daten definieren.
* Jede Schnittstelle muss unabhängig von dnsmasq selbst bereits eine IP-Adresse besitzen!