Last Updated on 05/02/2023 by administrator
Jak nakonfigurovat DHCP server v Linuxu
DHCP server
OS:
Implementace byla prováděna na Ubuntu 22.04 LTS Ubuntu 18.04 LTS, postup může být aplikovatelný na Ubuntu 17.10 a nižší, ale také na Ubuntu 20.04
Implementace:
Aktualizace seznamu balíčků z repozitářů:
sudo apt-get update
Instalace DHCPv4 serveru:
sudo apt-get install isc-dhcp-server
Přejít do konfigurace DHCPv4 serveru v dhcpd.conf:
sudo vim /etc/dhcp/dhcpd.conf
Odkomentovat řetězec authoritative, pokud se jedná o oficiální DHCP server na síti:
authoritative;
Vytvořit nový DHCP pool v dhcpd.conf (příklad konfigurace byl nakopírovaný nakonec configu):
subnet 192.168.88.0 netmask 255.255.255.0 { range 192.168.88.10 192.168.88.29; range 192.168.88.40 192.168.88.99; option routers 192.168.88.1; option domain-name-servers 8.8.8.8, 8.8.4.4; option domain-name "martinuvzivot.cz"; option ntp-servers 192.168.88.15; default-lease-time 43200; max-lease-time 86400; }
Legenda:
subnet – definice podsítě
range – rozsah adres pro přidělení klietům
option routers – výchozí brána
option domain-name-servers – DNS servery
option domain-name – doménové jméno
option ntp-servers – časový server
max-lease-time – maximální doba pro vypůjčení IP adresy, které může zařízení dostat. Pokud např. zařízení požaduje 100 000 sekund a max-lease-time je nastaven na 86 400 sekund, pak dostane 86 400 sekund
default-lease-time – doba pro vypůjčení IP adresy, které zařízení dostane bez požadavku
Pozn. Další DHCP volby (options) lze najít zde: http://www.ipamworldwide.com/ipam/isc-dhcpv4-options.html, nebo alternativně zde: https://www.freebsd.org/cgi/man.cgi?query=dhcp-options&sektion=5&manpath=FreeBSD+7.1-RELEASE
Statické mapování IP adresy na základě MAC adresy se provede také v dhcpd.conf. Příklad konfigurace:
host PC1 { hardware ethernet 28:D2:44:0F:41:3B; fixed-address 192.168.88.31; }
Pozn. I přestože IP adresa 192.168.88.31 není v rozsahu adres (range) pro přidělení z příkladu výše, bude přidělena stanici 28:D2:44:0F:41:3B.
Pro dodatečné zabezpečení DHCP serveru dopsat do dhcpd.conf:
ddns-update-style none; deny declines; deny bootp;
ddns-update-style – zakázání DNS aktualizací
deny declines – zakázání DHCPDECLINE zpráv chrání před DoS útoky a zamezí kompletnímu vyčerpání DHCP poolu.
deny bootp – ignoruje všechny BOOTP žádosti a neodpovídá na BOOTP protokol
Příkaz níže otestuje chyby a syntaxi v dhcpd.conf:
dhcpd -t
Výpis příkazu dhcpd -t:
Internet Systems Consortium DHCP Server 4.3.5 Copyright 2004-2016 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Config file: /etc/dhcp/dhcpd.conf Database file: /var/lib/dhcp/dhcpd.leases PID file: /var/run/dhcpd.pid
Definovat rozhraní na kterém bude DHCPv4 server naslouchat. To se ověří příkazem:
ifconfig
Výpis příkazu ifconfig:
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.88.15 netmask 255.255.255.0 broadcast 192.168.88.255 inet6 fe80::227:eff:fe0e:c6e5 prefixlen 64 scopeid 0x20 inet6 2001:cafe:cafe:cafe::1001 prefixlen 128 scopeid 0x0 ether 00:27:0e:0e:c6:e5 txqueuelen 1000 (Ethernet) RX packets 1554 bytes 200918 (200.9 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1406 bytes 130131 (130.1 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 198 bytes 17846 (17.8 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 198 bytes 17846 (17.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
V tomto případě se jedná o rozhraní enp0s3.
Definice rozhraní pro DHCPv4 server se provede v /etc/default/isc-dhcp-server:
sudo vim /etc/default/isc-dhcp-server
Do souboru isc-dhcp-server dopsat:
INTERFACESv4="enp0s3"
Aby se aplikovaly změny udělat restart DHCP služby:
sudo systemctl restart isc-dhcp-server.service
Alternativně se dá provést restart:
sudo /etc/init.d/isc-dhcp-server restart
Ačkoliv se po rebootu Ubuntu serveru nenahodí DHCP služba automaticky, je nutné aplikovat příkaz níže:
sudo systemctl enable isc-dhcp-server.service
Ověření na DHCP serveru:
sudo systemctl status isc-dhcp-server
Výpis příkazu sudo systemctl status isc-dhcp-server:
â isc-dhcp-server.service - ISC DHCP IPv4 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2019-06-09 13:00:47 CEST; 4min 5s ago Docs: man:dhcpd(8) Main PID: 657 (dhcpd) Tasks: 1 (limit: 4662) CGroup: /system.slice/isc-dhcp-server.service ââ657 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf en 09 13:00:47 jesterka dhcpd[657]: Server starting service.un/dhcp-server/dhcpd.pid: No such file or directory.
Alternativní ověření:
ps -A | grep dhcp
Výpis příkazu ps -A | grep dhcp:
1449 ? 00:00:00 dhcpd
Seznam rezervovaných IP adres:
dhcp-lease-list
Výpis příkazu dhcp-lease-list
To get manufacturer names please download http://standards.ieee.org/regauth/oui/oui.txt to /usr/local/etc/oui.txt Reading leases from /var/lib/dhcp/dhcpd.leases MAC IP hostname valid until manufacturer =============================================================================================== 08:00:27:95:14:07 192.168.88.10 server1-Virtua 2019-06-10 03:04:12 -NA-
Seznam výše neobsahuje „staticky“ mapované IP adresy k MAC adresám, toto je tabulka pouze dynamických IP adres.
Pozn. Při restartu služby DHCP (sudo systemctl restart isc-dhcp-server.service) či kompletnímu rebootu Ubuntu serveru, nedojde ke smazání zapůjčených IP adres v seznamu rezervovaných IP adres (dhcp-lease-list). Je to tím, že jsou tyto IP adresy uloženy po celou dobu v /var/lib/dhcp/dhcpd.leases souboru.
Logy:
grep "dhcp" /var/log/syslog
Výpis příkazu grep „dhcp“ /var/log/syslog:
Jun 9 17:45:15 jesterka dhcpd[1488]: reuse_lease: lease age 2382 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.88.10 Jun 9 17:45:15 jesterka dhcpd[1488]: DHCPDISCOVER from 08:00:27:95:14:07 (server1-VirtualBox) via enp1s0 Jun 9 17:45:16 jesterka dhcpd[1488]: DHCPOFFER on 192.168.88.10 to 08:00:27:95:14:07 (server1-VirtualBox) via enp1s0 Jun 9 17:45:16 jesterka dhcpd[1488]: reuse_lease: lease age 2383 (secs) under 25% threshold, reply with unaltered, existing lease for 192.168.88.10 Jun 9 17:45:16 jesterka dhcpd[1488]: DHCPREQUEST for 192.168.88.10 (192.168.88.15) from 08:00:27:95:14:07 (server1-VirtualBox) via enp1s0 Jun 9 17:45:16 jesterka dhcpd[1488]: DHCPACK on 192.168.88.10 to 08:00:27:95:14:07 (server1-VirtualBox) via enp1s0 Jun 9 17:45:26 jesterka dhcpd[1488]: DHCPINFORM from 192.168.88.31 via enp1s0 Jun 9 17:45:26 jesterka dhcpd[1488]: DHCPACK to 192.168.88.31 (28:d2:44:0f:41:3b) via enp1s0
Tipy:
TIP 1: Vymazání vypůjčené adresy na DHCP serveru:
1. Stopnout DHCP službu
sudo systemctl stop isc-dhcp-server.service
2. Smazání konkrétního uživatele:
sudo vim /var/lib/dhcp/dhcpd.leases
lease 192.168.88.10 { starts 0 2019/06/09 13:08:30; ends 1 2019/06/10 01:08:30; cltt 0 2019/06/09 13:08:30; binding state active; next binding state free; rewind binding state free; hardware ethernet 58:48:22:97:94:c3; uid "\001XH\"\227\224\303"; set vendor-class-identifier = "android-dhcp-6.0.1"; client-hostname "android-5edb3c57b66f42dc"; }
3. Restart DHCP služby
sudo systemctl restart isc-dhcp-server.service
TIP 2: Smazání všech rezervovaných adres:
1. Vymazat soubory dhcpd.leases a dhcpd.leases~:
sudo rm /var/lib/dhcp/dhcpd.leases sudo rm /var/lib/dhcp/dhcpd.leases~
2. Restartovat DHCPv4 server
sudo systemctl restart isc-dhcp-server.service
3. Po restartu si DHCPv4 server automaticky vytvoří nový soubor dhcpd.leases
Test získání IP adresy v Linuxu:
sudo dhclient enp0s3
Ověření získání IP adresy:
ip a
Výpis konfigurace ip a:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 08:00:27:95:14:07 brd ff:ff:ff:ff:ff:ff inet 192.168.88.10/24 brd 192.168.88.255 scope global dynamic noprefixroute enp0s3 valid_lft 37993sec preferred_lft 37993sec inet6 fe80::f549:9c45:434a:98f0/64 scope link noprefixroute valid_lft forever preferred_lft forever
Všechny DHCP parametry klienta (včetně DHCP serveru, který parametry zaslal) lze vidět v souboru níže:
cat /var/lib/dhcp/dhclient.leases
Vrácení IP adresy DHCP serveru s vymazáním souboru obsahující propůjčenou IP adresu:
dhclient -r -v eth0 && rm /var/lib/dhcp/dhclient.*
Test získání IP adresy ve WIN:
Ověření získání IP adresy:
ipconfig /all
Výpis příkazu ipconfig /all:
Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : martinuvzivot.cz Description . . . . . . . . . . . : Qualcomm Atheros AR8171/8175 PCI-E Gigabit Ethernet Controller (NDIS 6.20) Physical Address. . . . . . . . . : 28-D2-44-0F-41-3B DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::fd1d:2049:7eff:8130%13(Preferred) IPv4 Address. . . . . . . . . . . : 192.168.88.31(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Lease Obtained. . . . . . . . . . : Sunday, June 09, 2019 16:57:36 Lease Expires . . . . . . . . . . : Monday, June 10, 2019 04:59:50 Default Gateway . . . . . . . . . : 192.168.88.1 DHCP Server . . . . . . . . . . . : 192.168.88.15 DHCPv6 IAID . . . . . . . . . . . : 220779076 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-23-5F-00-54-28-D2-44-0F-41-3B DNS Servers . . . . . . . . . . . : 8.8.8.8 8.8.4.4 NetBIOS over Tcpip. . . . . . . . : Enabled
Řešení problémů – chyby:
a) Problém “Can’t create PID file /run/dhcp-server/dhcpd.pid: No such file or directory.”:
I přes tuto hlášku by měl DHCPv4 server přidělovat IP adresy, jelikož je proces aktivní.
service isc-dhcp-server status
Výpis příkazu service isc-dhcp-server status ukazuje chybovou hlášku Can’t create PID file /run/dhcp-server/dhcpd.pid: No such file or directory:
● isc-dhcp-server.service - ISC DHCP IPv4 server Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-08-29 16:50:53 CEST; 7min ago Docs: man:dhcpd(8) Main PID: 619 (dhcpd) Tasks: 1 (limit: 2319) CGroup: /system.slice/isc-dhcp-server.service └─619 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf srp 29 16:50:53 jesterka sh[619]: Sending on Socket/fallback/fallback-net srp 29 16:50:53 jesterka sh[619]: Can't create PID file /run/dhcp-server/dhcpd.pid: No such file or directory. srp 29 16:50:53 jesterka dhcpd[619]: Wrote 0 deleted host decls to leases file. srp 29 16:50:53 jesterka dhcpd[619]: Wrote 0 new dynamic host decls to leases file. srp 29 16:50:53 jesterka dhcpd[619]: Wrote 61 leases to leases file. srp 29 16:50:53 jesterka dhcpd[619]: Listening on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24 srp 29 16:50:53 jesterka dhcpd[619]: Sending on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24 srp 29 16:50:53 jesterka dhcpd[619]: Sending on Socket/fallback/fallback-net srp 29 16:50:53 jesterka dhcpd[619]: Can't create PID file /run/dhcp-server/dhcpd.pid: No such file or directory. srp 29 16:50:53 jesterka dhcpd[619]: Server starting service.
Řešení problému [1]:
Nejspíše se bude jednat o problém, kdy služba isc-dhcp-server (DHCPv4) a isc-dhcp-server6 (DHCPv6) používá stejnou RuntimeDirectory [2]
Jako rychlý a správny „workaround“ se může zakázat jedna ze výše uvedených služeb, tak bude využita služba mask. To znemožňuje načtení a spustění služby dokonce i po rebootu a také není možné spustit službu ručně. Pro příklad bude maskována služba DHCPv6 [2]:
sudo systemctl mask isc-dhcp-server6.service
Výpis příkazu sudo systemctl mask isc-dhcp-server6.service ukazuje, že díky službě mask, je vytvořen symbolický odkaz z /etc/systemd/system/isc-dhcp-server6.service do /dev/null.
Created symlink /etc/systemd/system/isc-dhcp-server6.service → /dev/null.
Pozn. Příkazem sudo systemctl unmask isc-dhcp-server6.service, lze vrátit původní změny.
Po rebootu OS hláška Can’t create PID file /run/dhcp-server/dhcpd.pid: No such file or directory u zmizí a DHCPv4 bude aktivní, zatímco DHCPv6 server bude díky příkazu sudo systemctl mask isc-dhcp-server6.service vypnutý.
Další články:
Konfigurace DHCPv6 serveru v Linuxu.
Zdroje:
[1] https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/1448657
[2] https://www.abclinuxu.cz/poradna/linux/show/401977
[3] https://bugs.launchpad.net/ubuntu/+source/isc-dhcp/+bug/1448657