Jak nakonfigurovat DHCP server v Linuxu

By | 10/06/2019

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:

WIN DHCP

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

 

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *