DHCP Server su Raspberry Pi

Raspberry Server DHCP dnsmasq Raspbian Iot Domotica

In questo articolo si vedrà come installare il servizio DHCP tramite dnsmasq, la cui installazione come server DNS è stata spiegata in questo precedente articolo.
L’installazione si riferisce ad una distro Raspbian basata su Debian Stretch su scheda Raspberry Pi 3, ma il procedimento è generalizzabile ad una qualsiasi distribuzione Debian anche su altre piattaforme hardware.

Il servizio di Dynamic Host Configration Protocol (Protocollo di Configurazione Dinamica degli Host) permette di incaricare il nostro server per la gestione e l’assegnazione degli indirizzi IP ai vari host che facciano richiesta di accedere alla nostra rete.

Il processo di assegnazione di un indirizzo IP ad un host è chiamato lease, cioè, traducendo letteralmente, affitto. Questo perchè, in reti di grandi dimensioni o con un numero di indirizzi IP assegnabili ristretto, lo stesso indirizzo IP è solo “prestato” all’host, e diventa riassegnabile ad altri host una volta che l’indirizzo IP viene rilasciato, o percè non è più utilizzato dall’host a cui era stato assegnato o, come vedremo in seguito, perchè è scaduto il tempo di validità per quel lease.

L’uso di un server DHCP, in alternativa all’assegnazione manuale dell’indirizzo IP su ciascun dispositivo, ha i seguenti vantaggi

  1. Per collegare un nuovo host alla rete non è necessario conoscere la configurazione della rete ospite, in quanto appena questo invia una richiesta DHCP, riceve un indirizzo IP valido.
  2. Con l’indirizzo IP il dispositivo può ricevere anche un hostname, eventualmente completo di Domain Name (FQDN).
  3. Può ricevere ulteriori informazioni, come l’indirizzo del gateway e del/dei server DNS.
  4. Il server DHCP evita la possibilità che due host abbiano lo stesso indirizzo IP.
  5. L’assegnazione degli indirizzi IP è gestita in modo centralizzato dal server, quindi eventuali variazioni nella configurazione di rete vengono comunicate agli host che hanno usufruito del servizio DHCP.
  6. Si può riservare uno specifico indirizzo IP per un particolare host, in modo che riceva sempre il medesimo indirizzo (una sorta di IP statico).
  7. Si può vincolare uno specifico range degli indirizzi rete per l’assegnazione degli indirizzi IP.

Come si può vedere, la lista dei vantaggi che l’uso di un server DHCP comporta è ben nutrita.

Prima di installare e avviare un servizio DHCP, è bene precisare che non devono coesistere più server di questo tipo in una rete, altrimenti si potrebbero creare dei conflitti nell’assegnazione degli indirizzi con conseguenze imprevedibili più o meno gravi. Quindi prima è meglio verificare lo stato ed eventualmente disattivare il servizio DHCP solitamente presente nel modem/router.

Se non avete già installato dnsmasq per gestire il servizio DNS locale, vi rimando ad un articolo precedente, in quanto è necessario per proseguire.

Una volta collegati al server raspberry tramite un client SSH, procediamo alla configurazione editando il file /etc/dnsmasq.conf

$ sudo nano /etc/dnsmasq.conf

Se avete seguito il precedente articolo dovreste ritrovarvi con un file contenente la vostra configurazione per il server DNS. Ora aggiungiamo alcune righe per configurare la parte DHCP. Le nuove righe sono evidenziate in rosso

#interface=eth0
#port=53

# Impostazioni di sicurezza
domain-needed
bogus-priv

# Esclusione del file /etc/resolv.conf
# e indicazione dei server di upstream esterni
no-resolv
no-pool

server=8.8.8.8
server=8.8.4.4

# Dominio che il DNS deve interpretare come locale
local=/local.lan/

# Reindirizzamenti
address=/double-click.net/127.0.0.1
address=/mioservizio.miodominio.lan/192.168.0.x

# Esclusione del file /etc/hosts
# Configurazione manuale degli hosts
no-hosts
addn-hosts=/etc/dnsmasq_static_hosts.conf

# Esapnde i nomi host con il nome dominio nel file hosts (o alternativo)
expand-hosts

# Crea un Dominio local.lan 
domain=local.lan

# Assegna un range per gli IP dinamici
dhcp-range=192.168.0.200,192.168.0.254,255.255.255.0,48h

# Assegna indirizzi IP specifici a host specifici (MAC Address)
dhcp-host=xx:xx:xx:xx:xx,hostname,192.160.0.x,lease-time

# Comunica ulteriori configurazioni
dhcp-option=option:router,192.168.0.1
dhcp-option=option:ntp-server,ntp1.inrim.it

# Altre configurazioni
conf-dir=/etc/dnsmasq.d

Di seguito una breve descrizione delle voci aggiunte

exapnd-hosts

Questa direttiva istruisce il demone dnsmasq ad aggiungere automaticamente agli hostname presenti nel file hosts o nei nostri file personalizzati il domain name, specificato con la direttiva domain.

domain

Con questa direttiva si indica il domain name da associare agli host che richiedono l’assegnazione dell’indirizzo IP. Il domain name specificato viene utilizzato anche dalla direttiva expand-hosts per qualificare in modo completo i nomi host presenti nel file hosts o nei file alternativi, se specificati.

dhcp-range

Specifica il range di indirizzi di rete da utilizzare per l’assegnazione dei lease.

dhcp-host

Questa direttiva permette di assegnare ad un host con un determinato indirizzo MAC uno specifico indirizzo IP, un hostname e un tempo di lease.
Il tempo di lease può essere specificato come infinite se non si vuole impostare una scadenza per questo indirizzo.
Esempi possono essere

dhcp-host=00:01:02:03:04,printer,192.160.0.20,infinite
dhcp-host=05:06:07:08:09,motionsensor,192.160.0.72,48h

dhcp-option

Di default dnsmasq invia alcune informazioni extra agli host che richiedono un indirizzo IP. La subnet-mask e l’indirizzo di broadcast sono indicati come quelli in uso dalla macchina che esegue dnsmasq e il server DNS è indicato con l’indirizzo IP della macchina che esegue dnsmasq.
Con questa direttiva si possono inviare informazioni opzionali, come l’indirizzo del router, l’indirizzo di server DNS addizionali, indirizzi di server ntp, ecc.. Le opzioni disponibili possono essere specificate con il loro nome mnemonico (ad es. option:router) o con il loro codice (ad es. 6).
La lista completa delle opzioni può essere ottenuta digitando il comando

$ dnsmasq --help dhcp

Una volta modificato e salvato il file /etc/dnsmasq.conf conviene verificare che non ci siano errori con il comando

$ dnsmasq --test

Se la risposta che otteniamo è

dnsmasq: syntax check OK.

possiamo far ripartire il servizio con il comando

$ sudo systemctl restart dnsmasq.service

a questo punto, con i server DNS e DHCP attivi, possiamo gestire in completa autonomia l’asseganzione degli indirizzi IP e dei relativi hostname.

Per conoscere quali lease dnsmasq sta rilasciando, è sufficiente guardare il file /var/lib/misc/dnsmasq.leases con un comando

$ cat /var/lib/misc/dnsmasq.leases

Il demone dnsmasq offre molte ulteriori possibilità di configurazione che vanno al di là degli scopi di questo articolo. Se si fosse interessati ad una più approfondita analisi delle varie opzioni consiglio di dare un’occhiata ai link riportati a fine articolo o la consultazione del manuale con il comando

$ man dnsmasq

Link Utili

https://it.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
https://wiki.archlinux.org/index.php/Dnsmasq_(Italiano)
http://www.thekelleys.org.uk/dnsmasq/doc.html

Permanent link to this article: https://www.iotnotes.net/2019/01/04/dhcp-server-su-raspberry-pi/

Lascia un commento

Your email address will not be published.