Servidor DHCP

Mòdul: 0227 - Serveis de xarxa / 0375 - Serveis de xarxa i Internet

Nivell: SMX / ASIX

Sistema operatiu: Ubuntu Server 24.04

1. Introducció

El protocol DHCP (Dynamic Host Configuration Protocol) permet assignar automàticament paràmetres de xarxa als clients: adreça IP, màscara de subxarxa, porta d’enllaç predeterminada, servidors DNS, etc.

Sense DHCP, cada dispositiu de la xarxa hauria de tenir la seva adreça IP configurada manualment. En xarxes grans, això és inviable i propens a errors (conflictes d’IP, errors tipogràfics, etc.).

Com funciona DHCP: el procés DORA

Seqüència DORA
Pas Missatge Descripció
1 DISCOVER El client fa un broadcast cercant servidors DHCP
2 OFFER El servidor ofereix una adreça IP disponible
3 REQUEST El client sol·licita formalment l’adreça oferta
4 ACK El servidor confirma i lliura la configuració

2. Escenari de pràctica

En aquest document configurarem el servidor DHCP per a la xarxa següent:

Escenari
Paràmetre Valor
Xarxa 192.168.10.0/24
Màscara 255.255.255.0
Rang d’adreces dinàmiques 192.168.10.100192.168.10.200
Porta d’enllaç (gateway) 192.168.10.1
Servidor DNS primari 8.8.8.8
Servidor DNS secundari 8.8.4.4
Nom de domini smx.local
Temps de concessió (lease) 24 hores

3. Requisits previs

Abans de començar, cal tenir:

3.1. Identifica la interfície de xarxa

ip link show

Exemple de sortida:

1: lo: <LOOPBACK,UP,LOWER_UP> ...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> ...

En aquest document utilitzarem enp0s8 com a interfície de la xarxa LAN.

💡
Nota

Els noms de les interfícies varien segons el maquinari i la configuració del sistema. Substitueix enp0s8 pel nom correcte al teu sistema.

4. Configuració de la interfície de xarxa del servidor

El servidor DHCP ha de tenir una adreça IP estàtica a la interfície LAN. A Ubuntu 24.04, la xarxa es configura amb Netplan.

4.1. Edita la configuració de Netplan

sudo nano /etc/netplan/00-installer-config.yaml

Afegeix o modifica la configuració de la interfície LAN:

network:
  version: 2
  ethernets:
    enp0s8:
      addresses:
      - 192.168.10.10/24
      dhcp4: false
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
      routes:
      - to: "default"
        via "192.168.10.1"      
⚠️
Avís

El format YAML és sensible a la indentació. Utilitza sempre espais, mai tabuladors.

4.2. Aplica la configuració

sudo netplan apply

4.3. Verifica la configuració

ip addr show enp0s8

La sortida ha de mostrar l’adreça 192.168.10.10/24:

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
    inet 192.168.10.10/24 brd 192.168.10.255 scope global enp0s8

5. Instal·lació del servidor DHCP

5.1. Actualitza els dipòsits

sudo apt update

5.2. Instal·la el paquet isc-dhcp-server

sudo apt install isc-dhcp-server -y

Durant la instal·lació, el servei intentarà arrencar i fallarà perquè encara no està configurat. Això és normal.

5.3. Verifica la instal·lació

dpkg -l isc-dhcp-server
ii  isc-dhcp-server  4.4.3-P1-2ubuntu3  amd64  ISC DHCP server for automatic IP address assignment

6. Configura el servidor DHCP

La configuració del servidor DHCP es divideix en dos fitxers principals:

Fitxer Funció
/etc/default/isc-dhcp-server Indica en quines interfícies escolta el servidor
/etc/dhcp/dhcpd.conf Defineix els paràmetres de xarxa i els rangs d’adreces

6.1. Especifica la interfície d’escolta

sudo nano /etc/default/isc-dhcp-server

Modifica la línia INTERFACESv4:

# Interfaces on which the DHCP server will serve DHCP requests.
INTERFACESv4="enp0s8"
INTERFACESv6=""

6.2. Configura dhcpd.conf

Fes una còpia de seguretat del fitxer original:

sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

Edita el fitxer de configuració principal:

sudo nano /etc/dhcp/dhcpd.conf

Substitueix el contingut per la configuració següent:

# ============================================================
# Fitxer de configuració del servidor DHCP
# Servidor: Ubuntu Server 24.04
# Xarxa: 192.168.10.0/24
# ============================================================

# Paràmetres globals del servidor
default-lease-time 86400;       # Temps de concessió per defecte: 24 hores (en segons)
max-lease-time 172800;          # Temps de concessió màxim: 48 hores (en segons)

# El servidor és l'autoritat DHCP d'aquesta xarxa
authoritative;

# Opcions globals (s'apliquen a totes les subxarxes si no s'especifica el contrari)
option domain-name "smx.local";
option domain-name-servers 8.8.8.8, 8.8.4.4;

# -----------------------------------------------------------
# Declaració de la subxarxa 192.168.10.0/24
# -----------------------------------------------------------
subnet 192.168.10.0 netmask 255.255.255.0 {

    # Rang d'adreces IP dinàmiques que es poden assignar
    range 192.168.10.100 192.168.10.200;

    # Opcions específiques per a aquesta subxarxa
    option routers 192.168.10.1;              # Porta d'enllaç predeterminada
    option subnet-mask 255.255.255.0;         # Màscara de subxarxa
    option broadcast-address 192.168.10.255;  # Adreça de difusió
}

7. Assigna adreces IP estàtiques (reserva per MAC)

Per assignar sempre la mateixa IP a un dispositiu concret (impressora, servidor, NAS, etc.), s’utilitza una reserva basada en l’adreça MAC del dispositiu.

Afegeix els blocs host dins del bloc subnet o fora d’ell:

# -----------------------------------------------------------
# Reserves d'adreces IP estàtiques (per adreça MAC)
# -----------------------------------------------------------

# Impressora de la classe
host impressora-classe {
    hardware ethernet 08:00:27:AA:BB:CC;
    fixed-address 192.168.10.11;
}

# PC del professor
host pc-professor {
    hardware ethernet 08:00:27:11:22:33;
    fixed-address 192.168.10.12;
    option host-name "pc-professor";
}

Com obtenir l’adreça MAC d’un client Linux:

ip link show eth0 | grep ether

En Windows:

ipconfig /all

8. Activa i verifica el servei

8.1. Comprova la sintaxi del fitxer de configuració

Abans d’iniciar el servei, verifica que no hi ha errors de sintaxi:

sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

Si no hi ha errors, la sortida serà similar a:

Internet Systems Consortium DHCP Server 4.4.3-P1
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcpd/dhcpd.leases
PID file: /var/run/dhcpd.pid

8.2. Habilita i inicia el servei

# Habilitar el servei perquè s'iniciï automàticament en arrencar
sudo systemctl enable isc-dhcp-server

# Iniciar el servei ara
sudo systemctl start isc-dhcp-server

8.3. Verifica l’estat del servei

sudo systemctl status isc-dhcp-server

La sortida ha de mostrar active (running):

● isc-dhcp-server.service - ISC DHCP IPv4 server
     Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; preset: enabled)
     Active: active (running) since ...

8.4. Odres de gestió del servei

Ordre Acció
sudo systemctl start isc-dhcp-server Iniciar el servei
sudo systemctl stop isc-dhcp-server Aturar el servei
sudo systemctl restart isc-dhcp-server Reiniciar el servei
sudo systemctl reload isc-dhcp-server Recarregar la configuració sense aturar
sudo systemctl status isc-dhcp-server Veure l’estat del servei

9. Verifica les concessions DHCP

9.1. Consulta el fitxer de concessions

El servidor registra totes les IP assignades al fitxer /var/lib/dhcpd/dhcpd.leases:

cat /var/lib/dhcpd/dhcpd.leases

Exemple d’una concessió activa:

lease 192.168.10.100 {
  starts 2 2024/10/01 09:00:00;
  ends 3 2024/10/02 09:00:00;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 08:00:27:ab:cd:ef;
  client-hostname "client-ubuntu";
}

9.2. Consulta les concessions actives en temps real

sudo dhcp-lease-list
💡
Nota

Si dhcp-lease-list no està disponible, instal·la el paquet isc-dhcp-common o utilitza directament cat /var/lib/dhcpd/dhcpd.leases.

9.3. Monitora els registres del servei

sudo journalctl -u isc-dhcp-server -f

Exemple de sortida quan un client rep una IP:

DHCPDISCOVER from 08:00:27:ab:cd:ef via enp0s8
DHCPOFFER on 192.168.10.100 to 08:00:27:ab:cd:ef via enp0s8
DHCPREQUEST for 192.168.10.100 from 08:00:27:ab:cd:ef via enp0s8
DHCPACK on 192.168.10.100 to 08:00:27:ab:cd:ef via enp0s8

10. Configura el tallafoc (UFW)

Si el tallafoc ufw està actiu, cal permetre el trànsit DHCP (port 67/UDP):

sudo ufw allow 67/udp
sudo ufw reload
sudo ufw status

11. Resol problemes habituals

11.1. El servei no s’inicia

Símptoma: systemctl status mostra failed o error.

Diagnosi:

sudo journalctl -u isc-dhcp-server --no-pager -n 50

Causes habituals:

11.2. Els clients no reben IP

Causes habituals i solucions:

Causa Solució
El rang d’adreces s’ha esgotat Ampliar el rang o reduir el temps de concessió
La subxarxa del client no coincideix amb la configurada Revisar la configuració de subnet a dhcpd.conf
El tallafoc bloqueja el port 67/UDP sudo ufw allow 67/udp
El servei no escolta a la interfície correcta Revisar /etc/default/isc-dhcp-server

11.3. Odres de diagnosi útils

# Veure els ports en escolta
sudo ss -ulnp | grep dhcp

# Capturar trànsit DHCP en temps real (requereix tcpdump)
sudo tcpdump -i enp0s8 port 67 or port 68 -n

# Forçar un client Linux a renovar la seva IP
sudo dhclient -r enp0s3   # allibera la IP actual
sudo dhclient enp0s3      # sol·licita una nova IP

12. Fitxer de configuració complet

A continuació es mostra el fitxer /etc/dhcp/dhcpd.conf complet amb totes les opcions del document:

# ============================================================
# /etc/dhcp/dhcpd.conf
# Servidor DHCP - Ubuntu Server 24.04
# Xarxa: 192.168.10.0/24
# ============================================================

# Paràmetres globals
default-lease-time 86400;
max-lease-time 172800;
authoritative;

option domain-name "smx.local";
option domain-name-servers 8.8.8.8, 8.8.4.4;

# Subxarxa principal
subnet 192.168.10.0 netmask 255.255.255.0 {
    range 192.168.10.100 192.168.10.200;
    option routers 192.168.10.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.10.255;
}

# Reserves per adreça MAC
host impressora-classe {
    hardware ethernet 08:00:27:AA:BB:CC;
    fixed-address 192.168.10.11;
}

host pc-professor {
    hardware ethernet 08:00:27:11:22:33;
    fixed-address 192.168.10.12;
    option host-name "pc-professor";
}

13. Resum d’ordres

# Instal·lació
sudo apt update && sudo apt install isc-dhcp-server -y

# Fitxers de configuració
sudo nano /etc/default/isc-dhcp-server   # interfície d'escolta
sudo nano /etc/dhcp/dhcpd.conf           # configuració principal

# Verificació de sintaxi
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf

# Gestió del servei
sudo systemctl enable --now isc-dhcp-server
sudo systemctl status isc-dhcp-server
sudo systemctl restart isc-dhcp-server

# Monitoratge
cat /var/lib/dhcpd/dhcpd.leases
sudo journalctl -u isc-dhcp-server -f

# Tallafoc
sudo ufw allow 67/udp

14. Activitats proposades

  1. Instal·la i configura un servidor DHCP per a la xarxa 10.0.1.0/24 amb el rang 10.0.1.5010.0.1.150 i la porta d’enllaç 10.0.1.1.
  2. Afegeix una reserva d’IP per a una màquina virtual client (obté la seva MAC amb ip link).
  3. Comprova, des del client, que rep correctament la IP, la màscara, la porta d’enllaç i els DNS (ip addr, ip route, cat /etc/resolv.conf).
  4. Modifica el temps de concessió a 1 hora i verifica el canvi al fitxer de concessions.
  5. Simula un esgotament del rang d’adreces reduint-lo a una sola IP i connecta dos clients. Observa els missatges d’error als registres del servidor.

15. Referències

Documentació oficial

Referència del protocol

Recursos didàctics complementaris

Versions d’aquest document

Domini Públic (CC0)