===== DHCP-Server unter Centos7 =====
=== Bei DHCP wird eine Anfrage vom Client an die Broadcast-Adresse seines Netzwerks geschickt. ===
Genutzte Ports: 67/udp (Server)
68/UDP (Client)
=== Notwendige DHCP Pakete installieren ===
yum install dhcp # centos7
yum install dhcp-server # centos8
Der DHCP-Daemon lauscht, sofern nicht anders angegeben, auf allen Netzwerkschnittstellen.
Wenn dies nicht gewünscht ist, kann man dieses in der /etc/sysconfig/dhcpd angeben
=== Konfigurationsdatei für IPv4 ===
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf # Centos7
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf # Centos8
vi /etc/dhcp/dhcpd.conf
=== Der folgende Eintrag in der /etc/sysconfig/dhcpd, sorgt dafür, dass der DHCP-daemon nur auf die ens34 und ens35 lauscht ===
DHCPDARGS="ens34 ens35";
=== Inhalt der dhcpd.conf ===
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
default-lease-time 86400;
max-lease-time 86400;
authoritative;
#Außerdem lassen sich Bereiche von MAC-Adressen in Subnetzen oder Pools zusammenfassen und
#so etwa virtuelle Maschinen in eigene Adressräume verlagern. Der Administrator muss hierzu
#Klassen und Pools definieren. VirtualBox beispielsweise teilt seinen virtuellen Maschinen
#zufällige MAC-Adressen im Bereich 08:00:*:*:*:* zu oder Vmware-Workstation 00:0C:*.*.*.*
class "virtualbox"
{match if binary-to-ascii(16,8,":",
substring(hardware, 1, 2)) = "08:00";
}
# Die VMs sollen einen eigenen Adresspool bekommen:
pool {
allow members of "virtualbox";
range 10.10.10.2 10.10.10.49;
}
class "vmware"
{match if binary-to-ascii(16,8,":",
substring(hardware, 1, 2)) = "00:0c";
}
# Die VMs sollen einen eigenen Adresspool bekommen:
pool {
allow members of "vmware";
range 10.10.10.50 10.10.10.99;
}
# LAN-1
subnet 172.16.17.0 netmask 255.255.255.240 {
range 172.16.17.2 172.16.17.9;
option domain-name "fritz.box";
#option domain-name-servers 172.16.17.1;
}
# LAN-2
subnet 172.16.18.0 netmask 255.255.255.240 {
range 172.16.18.2 172.16.18.9;
option domain-name "local.zuhause";
#option domain-name-servers 172.16.18.1;
}
# WAN -> Dummy eintrag für die 3. Netzwerkkarte, besser
# cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
# systemctl --system daemon-reload && systemctl restart dhcpd.service
#subnet 172.16.12.0 netmask 255.255.252.0 {
#}
# debian-clt-efi LAN-1
host debian-clt-efi_enp0s8 {
hardware ethernet 08:00:27:01:e8:82;
fixed-address 172.16.17.12;
}
# debian-clt-efi LAN-2
host debian-clt-efi_enp0s9 {
hardware ethernet 08:00:27:e2:b3:72;
fixed-address 172.16.18.12;
}
=== Firewall für DHCP anpassen [Port: 67 (DHCP-Server), Proto: udp] ===
firewall-cmd --permanent --zone=lan-1 --add-port=67/udp
firewall-cmd --reload
=== Konfigurationsdatei für IPv6 ===
** Bei DHCPv6 wird vom DHCP-Client eine Anfrage an die Multicast-Adresse geschickt. FF00::8 **
cp /usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example /etc/dhcp/dhcpd6.conf # Centos7
cp /usr/share/doc/dhcp-server/dhcpd6.conf.example /etc/dhcp/dhcpd6.conf # Centos8
vi /etc/dhcp/dhcpd6.conf
** Zusätzlich muss bei DHCPv6 ein /64-Subnetz im LAN erstellt werden und es wird ein Router benötigt, der RAs an das LAN sendet,
um Subnetz- und Routing-Informationen bereitzustellen. Diese Informationen sind nicht Teil von DHCPv6. **
=== Inhalt der dhcpd6.conf ===
#
# DHCPv6 Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd6.conf.example
# see dhcpd.conf(5) man page
#
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";
# LAN-1
subnet6 fd00:ac10:1100::/64 {
range6 fd00:ac10:1100::64 fd00:ac10:1100::95;
range6 fd00:ac10:1100::/64 temporary;
option dhcp6.name-servers fd00:ac10:1100::1;
option dhcp6.domain-search "fritz.box";
}
# LAN-2
subnet6 fd00:ac10:1200::/64 {
range6 fd00:ac10:1200::64 fd00:ac10:1200::95;
range6 fd00:ac10:1200::/64 temporary;
}
# Reservierung
host debian-efi-ens35 {
hardware ethernet 00:0c:29:23:7f:37;
fixed-address6 fd00:ac10:1200::a;
}
# Reservierung
host debian-efi-ens35 {
hardware ethernet 00:0c:29:23:7f:37;
fixed-address6 fd00:ac10:1200::a;
}
# Reservierung
#host grml-live-enp0s9 {
# hardware ethernet 00:0c:29:23:7f:37;
# fixed-address6 fd00:ac10:1200::16;
#}
=== Firewall anpassen [Port: 547 (DHCPv6-Server), Proto: udp] ===
firewall-cmd --permanent --zone=lan-1 --add-port=547/udp --add-service=dhcpv6-client
firewall-cmd --reload
=== Vergebene lokale IPv6-Adressen ===
fd00:ac10:1100::1 # LAN-1: enp0s8
fd00:ac10:1100:0000:0000:0000:0000:0001
fd00:ac10:1200::1 # LAN-2: enp0s9
fd00:ac10:1200:0000:0000:0000:0000:0001
== Überblick der Schnittstellen-Konfigurationen ==
nmcli con show
=== Hinzufügen der IPv6-Adressen über den Network Manager interaktiv mit nmtui ===
nmtui
=== Service-Datei /etc/systemd/system/dhcpd.service anpassen ===
== Kontrolle ob der Dienst schon "enabled" ist ==
systemctl is-enabled dhcpd[.service]
== Wenn "enabled", dann erstmal wieder deaktiveren ==
systemctl disable dhcpd[.service]
cp /lib/systemd/system/dhcpd.service /etc/systemd/system
vi /etc/systemd/system/dhcpd.service
=== Inhalt der Datei dhcpd.service nach der Änderung ===
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target
[Service]
Type=notify
#ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
# LAN-1 und LAN-2
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid ens34 ens35
[Install]
WantedBy=multi-user.target
=== DHCP Server starten ===
systemctl start dhcpd # IPv4
systemctl start dhcpd6 # IPv6
==== Auf der Client-Seite: Anpassung der Datei /etc/dhcp/dhclient.conf ====
interface "ens34" {
send dhcp-client-identifier 00:0c:29:23:7f:2d;
}
interface "ens35" {
send dhcp-client-identifier 1:00:0c:29:23:7f:37;
}
=== Verbundene Netzwerkadressen vom Interface lösen und neu vom DHCP-Server holen ===
ip addr flush dev , z. B. ip adddr flush dev ens35
dhclient -4 -d -v , z. B. dhclient -4- -d -v ens35
=== Das gleiche für IPv6 Link-Local Address (IPv6) erzeugen ===
ip link set down, z. B. ip link set ens35 down
ip link set up, z. B. ip link set ens35 up
systemctl restart NetworkManager
dhclient -6 -d -v , z. B. dhclient -6 -d -v ens35
** Router Advertisement notwendig, da sonst kein Routing über die IPv6 möglich ist **
Zusätzlich muss bei DHCPv6 ein /64-Subnetz im LAN erstellt werden und es wird ein Router benötigt, der
RAs an das LAN sendet, um Subnetz- und Routing-Informationen bereitzustellen. Diese Informationen sind
nicht Teil von DHCPv6.
=== Notwendige Pakete für das Router Advertisement installieren ===
yum install radvd -y
# Sicherheitskopie der Default.conf
cp /etc/radvd.conf /etc/radvd.conf_`date +%Y%m%d%H%M`
=== Konfiguration in der /etc/radvd.conf anpassen ===
interface ens35 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
AdvOtherConfigFlag on;
MaxRtrAdvInterval 10;
prefix fd00:ac10:1200::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS fd00:ac10:1200::1 { };
RDNSS fd00:ac10:1200::a { };
DNSSL fritz.box { };
};
=== raddvd Dienst starten ===
systemctl enable radvd
systemctl start radvd