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:
Im nachfolgenden soll die Konfiguration
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:
HINWEIS - IPv6 soll NICHT genutzt werden!!!
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
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
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
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.
Nach der Installation, ist die Konfigurationsdatei des DHCP-Servers, welche im nachfolgendem Verzeichnis mit dem Namen
/etc/dhcp/dhcpd.conf
steht, erst einmal leer.
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.
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
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.
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.
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 ...
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!!!
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:
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!
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
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
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
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.
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
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
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.
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.
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 ...