===== 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