Notes d'installation/configuration d'un serveur DHCP sous debian/ubuntu.
Installer le serveur DHCP via apt
sudo apt-get install isc-dhcp-server
Dé-commenter la directive authoritative et modifier les temps de prêt:
default-lease-time 86400; max-lease-time 604800;
Déclarer au moins un réseau. Dans l'exemple ci-dessous on propose quelques options usuelles:
subnet 192.168.0.0 netmask 255.255.255.0 { option domain-name "test.lan"; option domain-name-servers 192.168.0.53, 192.168.0.153; option routers 192.168.0.254; option ntp-servers ntp.test.lan; }
Désactiver les fonctionnalités non utilisées:
# Pas de mise a jour d'informations DNS en provenance des clients ddns-update-style none; # Prévention des attaques DoS, ne prends pas en compte les requetes DHCPDECLINE deny declines; # Les postes dont l'adresse MAC n'a pas été déclaréen'auront pas d'adresse automatiquement # attribuée. deny unknown-clients; # Désactivation du support de BOOTP deny bootp;
Il est possible d'associer une adresse à un poste particulier. Il recevra du serveur DHCP systématiquement cette même adresse.
host pc-du-salon { hardware ethernet 00:21:24:fb:33:a7; fixed-address 192.168.0.10; }
Pour ne fournir des IPs qu'aux postes préalablement déclarées, il existe la directive suivante:
deny unknown-clients;
De cette manière le serveur DHCP ne fournira des adresses qu'aux postes déclarés.
Il est possible de vérifier la syntaxe du fichier de configuration:
sudo /usr/sbin/dhcpd -t -cf /path/to/file.conf
Le serveur DHCP émet ces message en direction de syslog (rsyslog pour Ubuntu) avec la catégorie local7 via la directive:
log-facility local7;
Par défaut les message sont enregistrés dans /var/log/syslog. pour enregistrer les messages émis par le serveur DHCP dans un fichier de configuration dédié, il faut légèrement modifier la configuration de rsyslog.
Editer le fichier /etc/rsyslog.d/50-default.conf
La ligne originale:
*.*;auth,authpriv.none -/var/log/syslog
Dans la ligne originale le sélecteur capture tous les messages provenant de toutes catégories et de toutes priorités sauf les catégories auth et authpriv. Il les enregistre dans le fichier /var/log/syslog. Pour que les messages émis par le serveur DHCP ne soient pas enregistrés dans ce fichier on exclue également local7:
La ligne une fois modifiée:
*.*;auth,authpriv,local7.none -/var/log/syslog
Créer le fichier /etc/rsyslog.d/60-dhcpd.conf avec le contenu suivant:
local7.* /var/log/dhcpd.log
Créer le fichier de log, définir les droits et redémarrer rsyslog:
touch /var/log/dhcpd.log chown syslog:adm /var/log/dhcpd.log service rsyslog restart
Le fichier /var/lib/dhcp/dhcpd.leases est mis à jour par le serveur lors des attributions dynamiques dans un pool d'adresses.
Il est possible de spécifier sur quelle(s) interface le serveur DHCP écoute et répond au requêtes clientes via le fichier /etc/default/isc-dhcp-server. Par défaut le serveur écoute sur toutes les interfaces.
# Par défaut le serveur écoute sur toutes les interfaces
#INTERFACES=""
# La directive précédente est commentée et remplacée par celle ci-dessous imposant d’écouter
# seulement sur l'interface eth0
INTERFACES="eth0"
Par défaut le serveur DHCP écoute sur le port UDP 67 l'argument -p ou la directive local-port permettent de modifier la valeur par défaut. Voir le wiki pour vérifier le port d'écoute du serveur.
Le client reçoit les réponses du serveur sur le port UDP 68. Ces ports sont nommées bootps et bootpc dans le fichier /etc/services.
La commande dhcpdump permet d'afficher sur la console les paquets DHCP:
dhcpdump -i eth0