Inhaltsverzeichnis
DHCP ISC CentOS 7
DHCP ISC ist ein DHCP-Server, welcher die IP-Adressverteilung in einem Netzwerk realisieren kann. Der DHCP-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten DHCP-Server weltweit.
Hinweis - Die nachfolgenden Ausführungen erheben keinen Anspruch auf Vollständigkeit, sondern stellen eine „Basiskonfiguration“ eins DHCP-Servers für ein kleines privates Netzwerk dar!!!
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Überblick
Im nachfolgenden soll die Konfiguration
- eines DHCP-Servers
- eines DHCP-Relays
welche als internes, nicht nach außen agierender DHCP-Server/DHCP-Relay Konstrukt für ein privates Netzwerk mit drei Netzen durchgeführt werden. Nachfolgende Netze werden dabei verwaltet:
- IDMZ - Domain: idmz.tachtler.net - IP-Adressbereich: 192.168.0.0/24
- EDMZ - Domain: edmz.tachtler.net - IP-Adressbereich: 192.168.1.0/24
- Intranet - Domain: intra.tachtler.net - IP-Adressbereich: 192.168.2.0/24
HINWEIS - IPv6 soll NICHT genutzt werden!!!
DHCP-Server
Installation
Zur Installation eines DHCP-Servers wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete dhcp
installiert:
# yum install dhcp Loaded plugins: changelog, priorities 39 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package dhcp.x86_64 12:4.2.5-27.el7.centos.2 will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: dhcp x86_64 12:4.2.5-27.el7.centos.2 updates 507 k Transaction Summary ================================================================================ Install 1 Package Total download size: 507 k Installed size: 1.4 M Is this ok [y/d/N]: y Downloading packages: dhcp-4.2.5-27.el7.centos.2.x86_64.rpm | 507 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 12:dhcp-4.2.5-27.el7.centos.2.x86_64 1/1 Verifying : 12:dhcp-4.2.5-27.el7.centos.2.x86_64 1/1 Installed: dhcp.x86_64 12:4.2.5-27.el7.centos.2 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket dhcp
installiert wurden.
# rpm -qil dhcp Name : dhcp Epoch : 12 Version : 4.2.5 Release : 27.el7.centos.2 Architecture: x86_64 Install Date: Tue 14 Oct 2014 12:05:50 PM CEST Group : System Environment/Daemons Size : 1444029 License : ISC Signature : RSA/SHA256, Mon 06 Oct 2014 06:33:43 PM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : dhcp-4.2.5-27.el7.centos.2.src.rpm Build Date : Mon 06 Oct 2014 03:45:35 PM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://isc.org/products/DHCP/ Summary : Dynamic host configuration protocol software Description : DHCP (Dynamic Host Configuration Protocol) is a protocol which allows individual devices on an IP network to get their own network configuration information (IP address, subnetmask, broadcast address, etc.) from a DHCP server. The overall purpose of DHCP is to make it easier to administer a large network. To use DHCP on your network, install a DHCP service (or relay agent), and on clients run a DHCP client daemon. The dhcp package provides the ISC DHCP service and relay agent. /etc/NetworkManager /etc/NetworkManager/dispatcher.d /etc/NetworkManager/dispatcher.d/12-dhcpd /etc/dhcp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf /etc/openldap/schema/dhcp.schema /etc/sysconfig/dhcpd /usr/bin/omshell /usr/lib/systemd/system/dhcpd.service /usr/lib/systemd/system/dhcpd6.service /usr/lib/systemd/system/dhcrelay.service /usr/sbin/dhcpd /usr/sbin/dhcrelay /usr/share/doc/dhcp-4.2.5 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example /usr/share/doc/dhcp-4.2.5/ldap /usr/share/doc/dhcp-4.2.5/ldap/README.ldap /usr/share/doc/dhcp-4.2.5/ldap/dhcp.schema /usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap /usr/share/man/man1/omshell.1.gz /usr/share/man/man5/dhcpd.conf.5.gz /usr/share/man/man5/dhcpd.leases.5.gz /usr/share/man/man8/dhcpd.8.gz /usr/share/man/man8/dhcrelay.8.gz /usr/share/systemtap/tapset/dhcpd.stp /var/lib/dhcpd /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd6.leases
Dienst/Deamon-Start einrichten
Um einen DHCP-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable dhcpd.service ln -s '/usr/lib/systemd/system/dhcpd.service' '/etc/systemd/system/multi-user.target.wants/dhcpd.service'
Eine Überprüfung, ob beim Neustart des Server der dhcpd
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep dhcpd.service dhcpd.service enabled
bzw.
# systemctl is-enabled dhcpd.service enabled
IPv6 deaktivieren
Grundsätzlich wird für den Einsatz von IPv6 ein zusätzlicher Dienst/Daemon benötigt, welcher den Namen dhcpd6
trägt.
HINWEIS - Falls dhcpd6
nicht gestartet wird, kommt auch kein IPv6 zum Einsatz!
Jedoch lauscht auch der dhcpd
standardmäßig auf IPv6, dadurch wird es nötig auf für den für den DHCP-Dienst/Daemon dhcpd
IPv6 zu deaktivieren.
HINWEIS - Dies wird NICHT mehr in der Konfigurationsdatei /etc/sysconfig/dhcpd
durchgeführt !!!
Zuerst sollte mit nachfolgendem Befehl die Standard Start Datei von systemd
für den DHCP-Dienst/Daemon dhcpd
in das Verzeichnis
/etc/systemd/system
mit nachfolgendem Befehl kopiert werden:
# cp -a /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
WICHTIG - Im Verzeichnis /etc/systemd/system
befinden sich modifizierte - systemd
Start Dateien !!!
Anschließend kann die kopierte systemd
Start Datei
/etc/systemd/system/dhcpd.service
wie nachfolgend beschrieben, anpasst werden:
[Unit] Description=DHCPv4 Server Daemon Documentation=man:dhcpd(8) man:dhcpd.conf(5) After=network.target After=time-sync.target [Service] Type=notify # Tachtler # default: ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid -4 [Install] WantedBy=multi-user.target
Abschließend muss die systemd
Start Datei noch systemd
bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl --system daemon-reload
iptables Regel
Damit der DHCP-Server auch erreichbar ist und nicht die Weitergabe der IP-Address Informationen vom Paketfilter iptables
blockiert wird, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 34716 43M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 1003 238K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 329 packets, 45404 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p udp --dport 67 -j ACCEPT
-A OUTPUT -p udp --dport 68 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p udp --dport 67 -j ACCEPT # iptables -I OUTPUT 1 -p udp --dport 68 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 34716 43M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 6 1003 238K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 329 packets, 45404 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68
Die neuen Zeilen sind an Position 9 (INPUT) und Postition 1 (OUTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 ... 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/sysconfig/iptables
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Tue Oct 14 12:12:08 2014 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [296:41040] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p udp -m udp --dport 67 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -p udp -m udp --dport 68 -j ACCEPT COMMIT # Completed on Tue Oct 14 12:12:08 2014
Nach der Installation, ist die Konfigurationsdatei des DHCP-Servers, welche im nachfolgendem Verzeichnis mit dem Namen
/etc/dhcp/dhcpd.conf
steht, erst einmal leer.
Basis-Konfiguration
Nach der Installation, ist die Konfigurationsdatei des DHCP-Servers, welche im nachfolgendem Verzeichnis mit dem Namen
/etc/dhcp/dhcpd.conf
steht, erst einmal leer.
/etc/dhcp/dhcpd.conf
Eine grundlegende Konfigurationsdatei, könnte wie die nachfolgend dargestellte aussehen (komplette Konfigurationsdatei):
# # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # see 'man 5 dhcpd.conf' # # ============================================================================== # Globals. # ============================================================================== # Max. number of allocated leases aarived, to decrease to min-lease-time. adaptive-lease-time-threshold 80; # Accept clients, with NOT set broadcast the bit. always-broadcast false; # Accept clients, with expect RFC1048, but did NOT follow RFC1048. always-reply-rfc1048 true; # Send DHCPNAK messages, to misconfiguired clients. authoritative; # Allow clients, wich did NOT send a host declaration to get an IP-Address. boot-unknown-clients true; # Format of the timestamp in lease files, UTC (default) OR local (local). db-time-format local; # Hostname, which setting up the clients A and PTR record. ddns-hostname "ns1"; # Domainname, which appended to the clients hostname for FQDN. ddns-domainname "idmz.tachtler.net"; # Domainname, which appended to the clients reversed IP-Address. ddns-rev-domainname "0.168.192.in-addr.arpa"; # The update-style parameter, none (default), ad-hoc or interim. ddns-update-style none; # Attempt to do a DNS-update, after a lease-file is confirmed. ddns-updates off; # Default lease time in seconds. (86400 = 24h). default-lease-time 86400; # Attempt to do a DHCP-update, on a clients A record at lease-time. do-forward-updates false; # Ending time for al assigned BOOTP clients. (Global setting). # dynamic-bootp-lease-cutoff 0 9999/12/31 23:59:59; # Lenght of lease-time for dynamic BOOTP clients. (86400 = 24h). # dynamic-bootp-lease-length 86400; # Filename of the initial boot file, which is to be loaded by the client. # filename ""; # Look up for all corrosponding IP-Adresses in the lease-pool. get-lease-hostnames false; # Possibility to "resere" leases by client request with infinite (0xffffffff) lease-time. # infinite-is-reserved false; # Path and name of the lease file. # lease-file-name /var/lib/dhcpd/dhcpd.leases # Local port listen to DHCP requests. # local-port 67; # Local address listen to DHCP requests. DO NOT USE !!! # local-address 0.0.0.0; # Log facility. # log-facility local7 # Max. lease time in seconds. (604800 = 7d). max-lease-time 604800; # Clients retry, to get a new lease, in seconds. (Max. 255s). # min-secs 0; # Min. lease time in seconds. (3600 = 1h) min-lease-time 3600; # Allow only one lease per client; one-lease-per-client true; # Path and name of the PID-file. # pid-file-name /var/run/dhcpd.pid; # Check ping to a new IP-Address. If ping is possible IP-Address already in use. ping-check true; # Set wait timeout for check-ping in seconds. (default is 1). ping-timeout 3; # Remote port for DHCP response. # remote-port 68; # Specify the format of the Server DUID. If not specified, it will be generated by dhcpd. # server-duid LLT # IP-Address for the response of the DHCP-Server. server-identifier 192.168.0.1; # Server name of the server, from which the client is booting. server-name "ns1.idmz.tachtler.net"; # Record the relay agent information options sent during the client's initial DHCPREQUEST message. stash-agent-options true; # Check for update-conflicts on IP-Adresses, when leases run out; update-conflict-detection true; # Heal DB inconsestencies easily. (default is true). update-optimization true; # Update leases for fixed IP-Addresses. Only useful with update-style interim. update-static-leases false; # ============================================================================== # Host declarations. # ============================================================================== host rechner01 { allow duplicates; hardware ethernet 12:34:56:78:9a:bd; fixed-address 192.168.2.2; option host-name "rechner01"; } host rechner02 { hardware ethernet 12:34:56:78:9a:be; fixed-address 192.168.2.3; option host-name "rechner01"; } # ============================================================================== # Class definitions # ============================================================================== class "rechner03" { match if ( substring ( hardware, 1, 6 ) = 12:34:56:78:9a:bc ); } # ============================================================================== # Subnet declarations. # ============================================================================== # ------------------------------------------------------------------------------ # Subnet 192.168.0.0/24 # ------------------------------------------------------------------------------ subnet 192.168.0.0 netmask 255.255.255.0 { # # Network settings # option broadcast-address 192.168.0.255; option domain-name "idmz.tachtler.net"; option domain-name-servers 192.168.0.1; option domain-search "idmz.tachtler.net", "edmz.tachtler.net", "intra.tachtler.net", "tachtler.net"; option ntp-servers 192.168.0.1; option routers 192.168.0.1; option subnet-mask 255.255.255.0; option time-servers 192.168.0.1; # # Static IP address definitions (pseudo) # pool { allow members of "rechner03"; range 192.168.0.4 192.168.0.4; } # # Dynamic IP addresses # pool { range 192.168.0.5 192.168.0.254; } } # ------------------------------------------------------------------------------ # Subnet 192.168.1.0/24 # ------------------------------------------------------------------------------ subnet 192.168.1.0 netmask 255.255.255.0 { # # Network settings # option broadcast-address 192.168.1.255; option domain-name "edmz.tachtler.net"; option domain-name-servers 192.168.1.1; option domain-search "edmz.tachtler.net", "idmz.tachtler.net", "intra.tachtler.net", "tachtler.net"; option ntp-servers 192.168.1.1; option routers 192.168.1.1; option subnet-mask 255.255.255.0; option time-servers 192.168.1.1; # # Dynamic IP addresses # pool { range 192.168.1.2 192.168.1.254; } # ------------------------------------------------------------------------------ # Subnet 192.168.2.0/24 # ------------------------------------------------------------------------------ subnet 192.168.2.0 netmask 255.255.255.0 { # # Network settings # option broadcast-address 192.168.2.255; option domain-name "intra.tachtler.net"; option domain-name-servers 192.168.2.1; option domain-search "intra.tachtler.net", "idmz.tachtler.net", "edmz.tachtler.net", "tachtler.net"; option ntp-servers 192.168.2.1; option routers 192.168.2.1; option subnet-mask 255.255.255.0; option time-servers 192.168.2.1; # # Dynamic IP addresses # pool { range 192.168.2.2 192.168.2.254; } }
Um überprüfen zu können, ob die Konfigurationsdatei /etc/dhcp/dhcpd.conf
syntaktische Fehler aufweist, kann nachfolgender Befehl ausgeführt werden, welcher den DHCP-Server nicht startet, sondern nur die Konfigurationsdatei überprüft:
# dhcpd -t -cf /etc/dhcp/dhcpd.conf Internet Systems Consortium DHCP Server 4.2.5 Copyright 2004-2013 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
HINWEIS - Die Ausgabe von „LDAP“ bezogenen Meldungen, kann in diesem Beispiel ignoriert werden.
DHCP-Server starten
Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, Installation, IPv6 deaktivieren, iptables, sollte dem ersten Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl start dhcpd.service
DHCP-Server Überprüfung
Ob der DHCP-Server, sprich der dhcpd
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwwwf | grep dhcpd root 10007 0.0 0.0 112640 924 pts/0 S+ 14:44 0:00 \_ grep --color=auto dhcpd dhcpd 10001 0.0 1.8 107716 18908 ? Ss 14:40 0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien
/var/log/messages
durchgeführt werden.
Ausgabe der LOG-Datei /var/log/messages
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# tail -n 16 /var/log/messages Oct 14 14:40:57 server20 systemd: Starting DHCPv4 Server Daemon... Oct 14 14:40:57 server20 dhcpd: Internet Systems Consortium DHCP Server 4.2.5 Oct 14 14:40:57 server20 dhcpd: Copyright 2004-2013 Internet Systems Consortium. Oct 14 14:40:57 server20 dhcpd: All rights reserved. Oct 14 14:40:57 server20 dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Oct 14 14:40:57 server20 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Oct 14 14:40:57 server20 dhcpd: Wrote 0 class decls to leases file. Oct 14 14:40:57 server20 dhcpd: Wrote 0 deleted host decls to leases file. Oct 14 14:40:57 server20 dhcpd: Wrote 0 new dynamic host decls to leases file. Oct 14 14:40:57 server20 dhcpd: Wrote 0 leases to leases file. Oct 14 14:40:57 server20 dhcpd: Listening on LPF/eth1/52:54:00:00:01:14/192.168.1.0/24 Oct 14 14:40:57 server20 dhcpd: Sending on LPF/eth1/52:54:00:00:01:14/192.168.1.0/24 Oct 14 14:40:57 server20 dhcpd: Listening on LPF/eth0/52:54:00:00:00:14/192.168.0.0/24 Oct 14 14:40:57 server20 dhcpd: Sending on LPF/eth0/52:54:00:00:00:14/192.168.0.0/24 Oct 14 14:40:57 server20 dhcpd: Sending on Socket/fallback/fallback-net Oct 14 14:40:57 server20 systemd: Started DHCPv4 Server Daemon.
Interface Überprüfung
Ob und an welchen Interface der DHCP-Server „lauscht“, bzw. DHCP-Requests beantwortet, kann mit nachfolgendem Befehl überprüft werden:
# netstat -tulpen | grep dhcpd udp 0 0 0.0.0.0:67 0.0.0.0:* 0 57051 10227/dhcpd udp 0 0 0.0.0.0:33597 0.0.0.0:* 0 57027 10227/dhcpd
HINWEIS - Auch bei der Konfiguration nur ein Netzwerk-Interface für eingehende Broadcast-Anfragen zu nutzen, wird immer 0.0.0.0:67
als „Listener“ IP-Adresse angezeigt.
IP-Adressvergabe Überprüfung
Um die Vergabe einer IP-Adresse zu überprüfen, kann ein Blick in die LOG-Datei /var/log/messages
geworfen werden, was mit nachfolgendem Befehl durchgeführt werden kann (nur relevanter Auszug):
# cat /var/log/messages | grep dhcpd ... Oct 15 13:00:25 server20 dhcpd: DHCPDISCOVER from 00:50:0d:b4:6f:37 via 192.168.2.1 Oct 15 13:00:25 server20 dhcpd: DHCPOFFER on 192.168.2.10 to 00:50:0d:b4:6f:37 via 192.168.2.1 Oct 15 13:00:25 server20 dhcpd: DHCPREQUEST for 192.168.2.10 (192.168.1.20) from 00:50:0d:b4:6f:37 via 192.168.2.1 Oct 15 13:00:25 server20 dhcpd: DHCPACK on 192.168.2.10 to 00:50:0d:b4:6f:37 via 192.168.2.1 ...
Lease-Datei
Mit nachfolgendem Befehl, kann die sogenannte Lease-Datei eingesehene werden, welche sich standardmäßig in nachfolgenden Verzeichnis mit nachfolgendem Namen befindet, inklusive Backup-Datei, welche am Namensende mit einem ~
-Zeichen gekennzeichnet ist
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd.leases~
# The format of this file is documented in the dhcpd.leases(5) manual page. # This lease file was written by isc-dhcp-4.2.5 lease 192.168.2.10 { starts epoch 1413175371; # Mon Oct 14 13:00:26 2014 ends epoch 1413178971; # Mon Oct 14 13:00:26 2014 tstp epoch 1413178971; # Mon Oct 14 13:00:26 2014 cltt epoch 1413175371; # Mon Oct 14 13:00:26 2014 binding state free; hardware ethernet 00:50:0d:b4:6f:37; } server-duid "\000\001\000\001\033\317\326YRT\000\007\001\024";
HINWEIS - In dem vorhergehenden Beispiel ist die Lease-Datei leer!!!
DHCP-Relay
Falls mehrere Netzsegmente, hier die nachfolgenden Netzsegmente
192.168.1.0/24 - idmz.tachtler.net
192.168.2.0/24 - intra.tachtler.net
von einem DHCP-Server mit IP-Adressen versorgt werden sollen, gibt es zwei Möglichkeiten:
- der DHCP-Server ist in beiden Netzsegmenten present
- es wird auf dem Router/Gateway mit DHCP-Relaying gearbeitet.
HINWEIS - Im nachfolgend dargestellten Fall, soll kein Hardware-Router als DHCP-Relay zum Einsatz kommen, sondern das Gateway, für das entsprechende Netzsegment, hier 192.168.1.0/24
, was ebenfalls ein Server unter CentOS ist!
Installation
Um eine DHCP-Relay unter Linux, hier im speziellen unter CentOS zu realisieren, wird ein Programm mit dem Namen
dhcrelay
benötigt.
Dieses Programm mit dem Namen dhcrelay
befindet sich ebenfalls im Paket
WICHTIG - Die Installation des Paketes dhcp
erfolgt auf dem GATEWAY, welches als Router in z.B. das Netz 192.168.2.0/24 - intra.tachtler.net
fungiert !!!
Mit nachfolgendem Befehl, wird das Pakete dhcp
installiert:
# yum install dhcp Loaded plugins: changelog, priorities 39 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package dhcp.x86_64 12:4.2.5-27.el7.centos.2 will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: dhcp x86_64 12:4.2.5-27.el7.centos.2 updates 507 k Transaction Summary ================================================================================ Install 1 Package Total download size: 507 k Installed size: 1.4 M Is this ok [y/d/N]: y Downloading packages: dhcp-4.2.5-27.el7.centos.2.x86_64.rpm | 507 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : 12:dhcp-4.2.5-27.el7.centos.2.x86_64 1/1 Verifying : 12:dhcp-4.2.5-27.el7.centos.2.x86_64 1/1 Installed: dhcp.x86_64 12:4.2.5-27.el7.centos.2 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket dhcp
installiert wurden.
# rpm -qil dhcp Name : dhcp Epoch : 12 Version : 4.2.5 Release : 27.el7.centos.2 Architecture: x86_64 Install Date: Tue 14 Oct 2014 12:05:50 PM CEST Group : System Environment/Daemons Size : 1444029 License : ISC Signature : RSA/SHA256, Mon 06 Oct 2014 06:33:43 PM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : dhcp-4.2.5-27.el7.centos.2.src.rpm Build Date : Mon 06 Oct 2014 03:45:35 PM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://isc.org/products/DHCP/ Summary : Dynamic host configuration protocol software Description : DHCP (Dynamic Host Configuration Protocol) is a protocol which allows individual devices on an IP network to get their own network configuration information (IP address, subnetmask, broadcast address, etc.) from a DHCP server. The overall purpose of DHCP is to make it easier to administer a large network. To use DHCP on your network, install a DHCP service (or relay agent), and on clients run a DHCP client daemon. The dhcp package provides the ISC DHCP service and relay agent. /etc/NetworkManager /etc/NetworkManager/dispatcher.d /etc/NetworkManager/dispatcher.d/12-dhcpd /etc/dhcp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf /etc/openldap/schema/dhcp.schema /etc/sysconfig/dhcpd /usr/bin/omshell /usr/lib/systemd/system/dhcpd.service /usr/lib/systemd/system/dhcpd6.service /usr/lib/systemd/system/dhcrelay.service /usr/sbin/dhcpd /usr/sbin/dhcrelay /usr/share/doc/dhcp-4.2.5 /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example /usr/share/doc/dhcp-4.2.5/ldap /usr/share/doc/dhcp-4.2.5/ldap/README.ldap /usr/share/doc/dhcp-4.2.5/ldap/dhcp.schema /usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap /usr/share/man/man1/omshell.1.gz /usr/share/man/man5/dhcpd.conf.5.gz /usr/share/man/man5/dhcpd.leases.5.gz /usr/share/man/man8/dhcpd.8.gz /usr/share/man/man8/dhcrelay.8.gz /usr/share/systemtap/tapset/dhcpd.stp /var/lib/dhcpd /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd6.leases
Dienst/Deamon-Start einrichten
Um einen DHCP-Relay, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable dhcrelay.service ln -s '/usr/lib/systemd/system/dhcrelay.service' '/etc/systemd/system/multi-user.target.wants/dhcrelay.service'
Eine Überprüfung, ob beim Neustart des Server der dhcrelay
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep dhcrelay.service dhcrelay.service enabled
bzw.
# systemctl is-enabled dhcrelay.service enabled
IPv6 deaktivieren
Der Dienst/Daemon lauscht dhcrelay
standardmäßig nicht auf IPv6, jedoch kann explizit für den für den DHCP-Dienst/Daemon dhcrelay
IPv6 zu deaktivieren für eine klare Konfiguration sorgen.
HINWEIS - Dies wird NICHT mehr in der Konfigurationsdatei /etc/sysconfig/dhcrelay
durchgeführt !!!
Zuerst sollte mit nachfolgendem Befehl die Standard Start Datei von systemd
für den DHCP-Dienst/Daemon dhcrelay
in das Verzeichnis
/etc/systemd/system
mit nachfolgendem Befehl kopiert werden:
# cp -a /usr/lib/systemd/system/dhcrelay.service /etc/systemd/system/
WICHTIG - Im Verzeichnis /etc/systemd/system
befinden sich modifizierte - systemd
Start Dateien !!!
Anschließend kann die kopierte systemd
Start Datei
/etc/systemd/system/dhcrelay.service
wie nachfolgend beschrieben, anpasst werden:
[Unit] Description=DHCP Relay Agent Daemon Documentation=man:dhcrelay(8) After=network.target [Service] Type=notify # Tachtler # default: ExecStart=/usr/sbin/dhcrelay -d --no-pid ExecStart=/usr/sbin/dhcrelay -d --no-pid -4 [Install] WantedBy=multi-user.target
Abschließend muss die systemd
Start Datei noch systemd
bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl --system daemon-reload
iptables Regel
Damit der DHCP-Server auch erreichbar ist und nicht die Weitergabe der IP-Address Informationen vom Paketfilter iptables
blockiert wird, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 34716 43M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 1003 238K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 329 packets, 45404 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p udp --dport 67 -j ACCEPT
-A OUTPUT -p udp --dport 68 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p udp --dport 67 -j ACCEPT # iptables -I OUTPUT 1 -p udp --dport 68 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 34716 43M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 6 1003 238K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 329 packets, 45404 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68
Die neuen Zeilen sind an Position 9 (INPUT) und Postition 1 (OUTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 ... 1 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# /usr/sbin/iptables-save > /etc/sysconfig/iptables
Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables
-Regelwerk auch korrekt gespeichert wurde:
# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Tue Oct 15 09:05:12 2014 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [296:41040] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p udp -m udp --dport 67 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -p udp -m udp --dport 68 -j ACCEPT COMMIT # Completed on Tue Oct 15 09:05:12 2014
Nach der Installation, ist die Konfigurationsdatei des DHCP-Servers, welche im nachfolgendem Verzeichnis mit dem Namen
/etc/dhcp/dhcpd.conf
steht, erst einmal leer.
Basis-Konfiguration
Nach der Installation, ist die Konfigurationsdatei des DHCP-Servers, welche im nachfolgendem Verzeichnis mit dem Namen
/etc/dhcp/dhcpd.conf
steht, erst einmal leer - dies soll auch ZWINGEND so bleiben.
WICHTIG - Die Konfiguration eines DHCP-Relay erfolgt NICHT in /etc/dhcp/dhcpd.conf
!!!
Die Konfiguration eines DHCP-Relays gestaltet sich jedoch im Vergleich zum Einrichten eines DCHP-Servers einfacher.
Wie ggf. unter der Konfiguration
durchgeführt, muss die systemd
-Start Datei kopiert und angepasst werden.
Hier nachfolgend noch einmal die Schritte, falls diese nicht bereits durchgeführt wurden:
Zuerst sollte mit nachfolgendem Befehl die Standard Start Datei von systemd
für den DHCP-Dienst/Daemon dhcrelay
in das Verzeichnis
/etc/systemd/system
mit nachfolgendem Befehl kopiert werden:
# cp -a /usr/lib/systemd/system/dhcrelay.service /etc/systemd/system/
WICHTIG - Im Verzeichnis /etc/systemd/system
befinden sich modifizierte - systemd
Start Dateien !!!
Anschließend kann die kopierte systemd
Start Datei
/etc/systemd/system/dhcrelay.service
wie nachfolgend beschrieben, weiter anpasst werden:
[Unit] Description=DHCP Relay Agent Daemon Documentation=man:dhcrelay(8) After=network.target [Service] Type=notify # Tachtler # default: ExecStart=/usr/sbin/dhcrelay -d --no-pid ExecStart=/usr/sbin/dhcrelay -d --no-pid -4 -i eth0 -i eth1 192.168.1.20 [Install] WantedBy=multi-user.target
Option | Beschreibung |
---|---|
-i eth0 | Lauscht auf DHCPREQUEST auf dem Interface eth0 |
-i eth1 | Lauscht auf DHCPREQUEST auf dem Interface eth1 |
192.168.0.20 | DHCP-Server an den die DHCPREQUEST-Anfragen weitergeleitet werden |
Abschließend muss die systemd
Start Datei noch systemd
bekannt gemacht werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl --system daemon-reload
DHCP-Relay starten
Falls alle voranstehenden Schritte wie beschrieben durchgeführt wurden, Installation, IPv6 deaktivieren, iptables, sollte dem ersten Start nichts im Wege stehen und dies mit nachfolgendem Befehl durchgeführt werden:
# systemctl start dhcrelay.service
DHCP-Relay Überprüfung
Ob der DHCP-Server, sprich der dhcrelay
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwwwf | grep dhcrelay root 2257 0.0 0.0 112640 928 pts/0 S+ 09:46 0:00 \_ grep --color=auto dhcrelay root 2233 0.0 1.4 103672 15044 ? Ss 09:40 0:00 /usr/sbin/dhcrelay -d --no-pid -4 -i eth0 -i eth1 192.168.1.20
Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien
/var/log/messages
durchgeführt werden.
Ausgabe der LOG-Datei /var/log/messages
mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:
# tail -n 24 /var/log/messages Oct 15 09:40:41 server10 systemd: Starting DHCP Relay Agent Daemon... Oct 15 09:40:41 server10 dhcrelay: Dropped all unnecessary capabilities. Oct 15 09:40:41 server10 dhcrelay: Internet Systems Consortium DHCP Relay Agent 4.2.5 Oct 15 09:40:41 server10 dhcrelay: Copyright 2004-2013 Internet Systems Consortium. Oct 15 09:40:41 server10 dhcrelay: All rights reserved. Oct 15 09:40:41 server10 dhcrelay: For info, please visit https://www.isc.org/software/dhcp/ Oct 15 09:40:41 server10 dhcrelay: Dropped all unnecessary capabilities. Oct 15 09:40:41 server10 dhcrelay: Internet Systems Consortium DHCP Relay Agent 4.2.5 Oct 15 09:40:41 server10 dhcrelay: Copyright 2004-2013 Internet Systems Consortium. Oct 15 09:40:41 server10 dhcrelay: All rights reserved. Oct 15 09:40:41 server10 dhcrelay: For info, please visit https://www.isc.org/software/dhcp/ Oct 15 09:40:41 server10 dhcrelay: Listening on LPF/eth1/52:54:00:a8:00:01 Oct 15 09:40:41 server10 dhcrelay: Sending on LPF/eth1/52:54:00:a8:00:01 Oct 15 09:40:41 server10 dhcrelay: Listening on LPF/eth1/52:54:00:a8:00:01 Oct 15 09:40:41 server10 dhcrelay: Sending on LPF/eth1/52:54:00:a8:00:01 Oct 15 09:40:41 server10 dhcrelay: Listening on LPF/eth0/52:54:00:00:00:10 Oct 15 09:40:41 server10 dhcrelay: Sending on LPF/eth0/52:54:00:00:00:10 Oct 15 09:40:41 server10 dhcrelay: Sending on Socket/fallback Oct 15 09:40:41 server10 dhcrelay: Dropped all capabilities. Oct 15 09:40:41 server10 dhcrelay: Listening on LPF/eth0/52:54:00:00:00:10 Oct 15 09:40:41 server10 dhcrelay: Sending on LPF/eth0/52:54:00:00:00:10 Oct 15 09:40:41 server10 dhcrelay: Sending on Socket/fallback Oct 15 09:40:41 server10 dhcrelay: Dropped all capabilities. Oct 15 09:40:41 server10 systemd: Started DHCP Relay Agent Daemon.
Interface Überprüfung
Ob und an welchen Interface das DHCP-Relay „lauscht“, bzw. DHCP-Requests weitergeleitet werden, kann mit nachfolgendem Befehl überprüft werden:
# netstat -tulpen | grep dhcrelay udp 0 0 0.0.0.0:67 0.0.0.0:* 0 24421 2233/dhcrelay udp 0 0 0.0.0.0:38475 0.0.0.0:* 0 24411 2233/dhcrelay
HINWEIS - Auch bei der Konfiguration nur ein Netzwerk-Interface für eingehende Broadcast-Anfragen zu nutzen, wird immer 0.0.0.0:67
als „Listener“ IP-Adresse angezeigt.
IP-Adressanfrage Überprüfung
Um die Anfrage einer IP-Adresse zu überprüfen, kann ein Blick in die LOG-Datei /var/log/messages
geworfen werden, was mit nachfolgendem Befehl durchgeführt werden kann (nur relevanter Auszug):
# cat /var/log/messages | grep dhcrelay ... Oct 15 13:00:33 server10 dhcrelay: Forwarded BOOTREQUEST for 00:50:0d:b4:6f:37 to 192.168.1.20 Oct 15 13:00:33 Server10 dhcrelay: Forwarded BOOTREPLY for 00:50:0d:b4:6f:37 to 192.168.2.10 ...