153 lines
5.9 KiB
Markdown
153 lines
5.9 KiB
Markdown
# ISC-DHCP-SERVER
|
|
|
|
ISC-DHCP-SERVER est une implémentation du protocole DHCP qui permet à un
|
|
hôte via une requète DHCP au serveur de récupérer une adresse IP, des
|
|
informations à propos des dns et l'adresse de la passerelle. Il est
|
|
actuellement un peu vieillisant mais il est très robuste, il est envisagé de
|
|
le remplacer par son successeur kea quand il sera plus stable.
|
|
|
|
## Principe
|
|
|
|
Le protocole DHCP utilise le transport UDP et les ports 67 du serveur et 68 du
|
|
client.
|
|
|
|
### Configuration initiale
|
|
|
|
Le protocole DHCP fonctionne de la manière suivante :
|
|
|
|
1. le client qui cherche à configurer son interface réseaux envoie une
|
|
requète DHCPDISCOVER sur le lien en broadcast avec comme adresse cible
|
|
255.255.255.255 en spécifiant son adresse MAC dans la requète
|
|
|
|
1. le serveur vérifie s'il est configuré pour répondre au client :
|
|
|
|
* si ce n'est pas le cas il lui renvoie un DHCPDECLINE
|
|
|
|
* sinon il lui fait une offre cohérente par rapport à sa configuration et
|
|
son état actuel via un paquet DHCPOFFER
|
|
|
|
1. le client lui répond avec une requète DHCPREQUEST dans lequel il précise
|
|
l'adresse qu'il souhaiterait que le serveur dhcp lui alloue
|
|
|
|
1. le serveur statue finalement sur l'adresse qu'il alloue effectivement au
|
|
client dans un paquet DHCPACK où il précise en plus de l'adresse des
|
|
options configurations supplémentaires comme l'adresse des serveurs de noms
|
|
ou l'adresse de la passerelle. Il précise aussi pour combien de temps il
|
|
réalise cette allocation (on parle de bail ou de lease).
|
|
|
|
### Rafraichir le bail
|
|
|
|
Au bout du temps configuré par le serveur DHCP, il est possible pour le client
|
|
de demander au serveur de renouveller l'allocation de l'adresse s'il l'utilise
|
|
encore. Pour cela, il se contente de reprendre à partir de la troisième
|
|
étape précédente.
|
|
|
|
### Filtrage et protection
|
|
|
|
Attention, il n'est pas rare qu'on composant actif (un switch par exemple) sur
|
|
le lien dispose par défaut de fonctionnalité bloquant par sécurité le
|
|
traffic dhcp. C'est une option de sécurité désactivable. Il est aussi
|
|
possible parfois d'utiliser cette fonctionnalité à notre avantage pour
|
|
améliorer la sécurité de notre infrastructure en précisant l'adresse de
|
|
notre serveur dhcp permettant au switch de bloquer les acquittements dhcp
|
|
excepté celle provenant de nos serveurs.
|
|
|
|
Certains switchs permettent aussi de configurer certains ports qu'il interdit
|
|
au machines derrière de communiquer avec une autre adresse que celle qu'elles
|
|
ont récupéré par dhcp.
|
|
|
|
## Installation
|
|
|
|
On se contente de tirer le logiciel des repository debian
|
|
`sudo apt install isc-dhcp-server`.
|
|
|
|
## Configuration
|
|
|
|
La page de manuel détaillant les options de configurations de radvd est
|
|
consultable en utilisant `man 5 dhcpd.conf`. Le ficihier de configuration
|
|
principale se trouve dans `/etc/dhcp/dhcpd.conf` et un fichier de configuration
|
|
additionel se trouve dans `/etc/default/isc-dhcp-dserver`.
|
|
|
|
### /etc/dhcp/dhcpd.conf
|
|
|
|
Le logiciel se configure en fonction des plages de sous-réseaux qu'on souhaite
|
|
que le serveur dhcp administre. Il permet en plus de préciser des options de
|
|
configurations par défaut et des options de configuration générale. Un sous
|
|
réseau se définit dans un bloc `subnet` pour lequel on précise le
|
|
sous-réseau, le masque associé et l'interface sur laquelle il servira ces
|
|
requêtes :
|
|
|
|
```txt
|
|
subnet 100.64.0.0 netmask 255.255.0.0 {
|
|
interface "ens23";
|
|
}
|
|
```
|
|
|
|
Il y a deux manières (utilisées au crans) de régler comment le serveur dhcp
|
|
alloue des ips à ces clients. La première est de lui donner dans un fichier
|
|
externer une liste d'association ip MAC au format suivant :
|
|
|
|
```txt
|
|
host gulf.cachan-adh.crans.org {
|
|
hardware ethernet 02:65:6C:01:01:01;
|
|
fixed-address 185.230.76.12;
|
|
}
|
|
```
|
|
|
|
et de préciser l'option suivante dans le bloc de configuration du sous-réseaux.
|
|
|
|
```txt
|
|
include "/var/local/services/dhcp/generated/dhcp.adh.crans.org.list";
|
|
```
|
|
|
|
Les clients présents dans cette liste seront alors considéré comme connus par
|
|
le serveur dhcp. Pour les clients qu'il ne connait pas il peut alors décider de
|
|
les accepter ou de les refuser en précisant soit `allow unknown-clients;` soit
|
|
`deny unknown-clients;` dans le bloc de sous-réseaux.
|
|
|
|
L'autre manière de procéder est de lui laisser gérer lui même l'allocation des
|
|
adresses ips à utiliser en lui précisant simplement dans quels plages il a le
|
|
droit de venir se servir, pour cela on précise l'option suivante dans le bloc :
|
|
|
|
```txt
|
|
pool {
|
|
range 100.65.1.0 100.65.255.254;
|
|
}
|
|
```
|
|
|
|
Vu qu'a priori les clients ne sont pas connus, il faut assez fréquemment
|
|
préciser en conjoncure de cette option l'option `allow unknown-clients;`.
|
|
|
|
Il reste ensuite à régler la durée pour laquelle les adresses sont alloués :
|
|
|
|
```txt
|
|
default-lease-time 600;
|
|
max-lease-time 7200;
|
|
```
|
|
|
|
Ainsi que les options de configuration réseaux a passé au client :
|
|
|
|
```txt
|
|
option subnet-mask 255.255.0.0; # Précise le sous-réseaux dans lequel l'adresse assignée se trouve
|
|
option broadcast-address 100.64.255.255; # Précise l'adresse de broadcast que le client doit configurer
|
|
option routers 100.64.0.99; # Précise l'adresse de la passerelle
|
|
option domain-name-servers 100.64.0.101,100.64.0.102; # Précise l'adresse des serveurs de noms
|
|
option domain-name "adh-nat.crans.org"; # Précise le nom de domaine de l'hote
|
|
option domain-search "adh-nat.crans.org"; # Précise la liste de recherche par défaut pour les fqdn
|
|
```
|
|
|
|
### /etc/default/isc-dhcp-server
|
|
|
|
Ce fichier contrôle les options utilisées pour lancer le daemon
|
|
isc-dhcp-server. Dans notre cas on se contente de préciser sur quels interfaces
|
|
le serveur devrait écouter en ipv4, mais il est possible de préciser d'autres
|
|
options.
|
|
|
|
```txt
|
|
INTERFACESv4="ens22 ens23 ens1 enp1s3"
|
|
```
|
|
|
|
Attention pour que le serveur démarre effectivement, il faut que interfaces
|
|
listées ici soit bien démarrées et dispose d'une ipv4, sinon celui-ci refusera
|
|
de se lancer.
|