Inhaltsverzeichnis

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 <your_interface_name(s)>
# 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 <interface>, z. B. ip adddr flush dev ens35
dhclient -4 -d -v <interface>, z. B. dhclient -4- -d -v ens35
ip link set <interface> down, z. B. ip link set ens35 down
ip link set <interface> up, z. B. ip link set ens35 up
systemctl restart NetworkManager
dhclient -6 -d -v <interface>, z. B. dhclient -6 -d -v ens35

Router Advertisement notwendig, da sonst kein Routing über die IPv6 möglich ist

<WRAP center round important 100%> 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. </WRAP>

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