Faire un DHCP automatiquement

ArticleCategory:

System Administration

AuthorImage:

[Photo de l'auteur]

TranslationInfo:

Original in fr Eric SEIGNE

fr to en:John Perr

AboutTheAuthor:

Eric travaille dans le monde des logiciels libres ou il développe,entre autres,des applications d'accès aux bases de données sur le web avec des outils comme PostGreSQL ,MySQL et PHP3.



Abstract:

Cet article explique comment configurer le plus facilement possible le dhcp sur un réseau


ArticleIllustration:

[Illustration]

ArticleBody:

Introduction

Les objectifs de la configuration décrite ici visent:

Constituer un dhcp "blanc"

La première étape, consiste à créer un fichier de configuration dhcp "blanc" qui accueille tous les clients du réseau.
Je me base sur le réseau de la slash party 2, pour laquelle j'ai essayé de faire un serveur Linux correct.

<fichier dhcpd.conf>
default-lease-time 86400;
max-lease-time 604800;
get-lease-hostnames true;
option subnet-mask 255.255.255.0;
option domain-name "slach2-100.party";
option domain-name-servers 192.168.12.1;
option interface-mtu 1500;

subnet 192.168.12.0 netmask 255.255.255.0 
        # default gateway
        option routers 192.168.12.1;
        option broadcast-address 192.168.12.255;
        range 192.168.12.50 192.168.12.200;

</fichier>

Maintenant que vous avez lancé votre serveur dhcp (dhcpd start ou autre commande selon votre distrib), vous pouvez démarrer vos stations "clientes" du réseau que vous avez configurés pour obtenir automatiquement une adresse IP.
Dès que vos clients vont demander une adresse IP au serveur dhcp, un bloc comme celui ci sera ajouté au fichier dhcpd.leases:

<bloc exemple attribué à un client dhcp>
lease 192.168.12.58 
        starts 2 1999/08/24 06:28:48;
        ends 3 1999/08/25 06:28:48;
        hardware ethernet 00:10:5a:2e:56:a7;
        uid 01:00:10:5a:2e:56:a7;
        client-hostname "KLUSTER";

</bloc>

et c'est ainsi que lorsque tous vos clients ont obtenus une adresse ip, votre fichier dhcpd.leases ressemblera à cela:

<fichier dhcpd.leases>
lease 192.168.12.58 
        starts 2 1999/08/24 06:28:48;
        ends 3 1999/08/25 06:28:48;
        hardware ethernet 00:10:5a:2e:56:a7;
        uid 01:00:10:5a:2e:56:a7;
        client-hostname "KLUSTER";

lease 192.168.12.53 
        starts 2 1999/08/24 05:42:22;
        ends 3 1999/08/25 05:42:22;
        hardware ethernet 00:80:ad:97:e1:76;
        uid 01:00:80:ad:97:e1:76;
        client-hostname "ceddz";

lease 192.168.12.54 
        starts 2 1999/08/24 03:07:26;
        ends 3 1999/08/25 03:07:26;
        hardware ethernet 00:80:ad:97:e1:7d;
        uid 01:00:80:ad:97:e1:7d;
        client-hostname "SDS";

lease 192.168.12.67 
        starts 2 1999/08/24 02:52:19;
        ends 3 1999/08/25 02:52:19;
        hardware ethernet 00:50:04:45:e1:65;
        uid 01:00:50:04:45:e1:65;
        client-hostname "HOMER";

lease 192.168.12.64 
        starts 2 1999/08/24 01:26:05;
        ends 3 1999/08/25 01:26:05;
        hardware ethernet 00:80:ad:97:e2:1c;
        uid 01:00:80:ad:97:e2:1c;
        client-hostname "chAwArmA";

lease 192.168.12.59 
        starts 2 1999/08/24 01:14:06;
        ends 3 1999/08/25 01:14:06;
        hardware ethernet 00:00:21:2c:30:e7;
        uid 01:00:00:21:2c:30:e7;
        client-hostname "WOOKIE";

</fichier>

Sécuriser le dhcp "ouvert"

Ensuite, il faut convertir ce dhcp "ouvert" en un dhcp fixe plus "sécure". Votre fichier dhcpd.leases étant correctement créé, vous pouvez maintenant le convertir en un dhcp que je qualifie de "fixe".

Quelles sont les différences entre le dhcp "ouvert" et "fixe" ? Pour moi, un dhcp "ouvert" permet à n'importe quel ordinateur se connectant au réseau d'obtenir une IP et les paramètres réseau convenables. Cela me pose un grave problème de sécurité, il suffirait à un pirate de se connecter physiquement au réseau pour obtenir tout cela :( D'où une certaine parade: le dhcp "fixe" dans lequel j'attribue une IP à une adresse MAC de carte réseau, ce qui me permet d'isoler plus facilement ce genre de problème.

<fichier dhcpd.conf>
default-lease-time 86400;
max-lease-time 604800;
get-lease-hostnames true;
option subnet-mask 255.255.255.0;
option domain-name "slach2-100.party";
option domain-name-servers 192.168.12.1;
option lpr-servers 192.168.12.1;
option interface-mtu 1500;

subnet 192.168.12.0 netmask 255.255.255.0 
        # default gateway
        option routers 192.168.12.1;
        option broadcast-address 192.168.12.255;
	# ceux qui ne seront pas dans le dhcp
	# auront des ip entre .10 et .50
        range 192.168.12.10 192.168.12.50;


host 
        hardware ethernet 00:10:5a:2e:56:a7;
        fixed-address "kluster.slach2-100.party";

host 
        hardware ethernet 00:80:ad:97:e1:76;
        fixed-address "ceddz.slach2-100.party";
host 
        hardware ethernet 00:80:ad:97:e1:7d;
        fixed-address "sds.slach2-100.party";

host 
        hardware ethernet 00:40:95:49:0b:a5;
        fixed-address "saigneur.slach2-100.party";

host 
        hardware ethernet 00:50:04:45:e1:65;
        fixed-address "homer.slach2-100.party";

</fichier>

ATTENTION: Si vous n'avez pas de DNS, il faut avoir un fichier dhcpd.conf utilisant les IP et non les noms des machines !

<extrait du dhcpd.conf si il n'y a pas de dns>
host 
        hardware ethernet 00:40:95:49:0b:a5;
        fixed-address "192.168.12.57";

host 
        hardware ethernet 00:50:04:45:e1:65;
        fixed-address "192.168.12.67";

</extrait>

Pour convertir automatiquement le dhcpd.leases en dhcp fixe, j'ai fait un petit script perl qui accompagne ce document.

Constitution automatique du DNS

Dans le même ordre d'idée, pourquoi s'arrêter en si bon chemin alors qu'on pourrait faire un DNS en même temps ?

Le même script perl, en utilisant l'option -dns fabriquera automatiquement les fichiers named.$domaine.ajouter et named.$domaine.rev.ajouter que vous devrez contrôler avant de les ajouter à vos fichiers de dns et dns reverse.

De plus, il vous faudra ajouter au fichier named.conf les paramètres de vos domaines, comme par exemple:

<ajouter au fichier named.conf>
zone "slach2-100.party" 
        type master;
        file "named.slach2-100";
;

zone "12.168.192.in-addr.arpa" 
        type master;
        file "named.slach2-100.rev";
;
</ajouter>
Avec ca, vous avez un dhcp opérationnel ainsi qu'un dns.

Le "voisinage réseau" des machines windows

Toujours plus pour le même prix, et c'est encore mieux lorsque c'est gratuit :) Donc, je continue mon aventure, un petit dessin et une expliquation de ma situation:

Lors de la Slach 2 (démo party), j'ai mis deux réseaux en place, l'un en 10Mbit et l'autre en 100 (pour les privilégiés de l'époque) ... et le problème majeur à été que les deux réseaux ne pouvaient pas "se voir" par le "voisinage réseau" de windows.

Une parade existe, c'est WINS. Wins permet de dire qu'il y a un serveur sur le réseau qui a la liste des correspondances IP/Nom de plusieurs domaines (un peu comme un Master du réseau R1 ET R2).

Il faut donc mettre en place ce serveur wins, configurer les clients pour qu'ils l'utilisent et créer une passerelle IP entre ces deux réseaux.

Wins est bien sur supporté par Samba :)

Dessin:

-------------------
I                 I
I   Réseau R1     I
I                 I
I  192.168.0.0    I
I  255.255.255.0  I
-------+-----------
       |
  -----|-----
 eth0: 192.168.0.1

    Serveur
     Linux

 eth1: 192.168.100.1
  -----|-----
       |
-------+-----------
I                 I
I   Réseau R2     I
I                 I
I  192.168.100.0  I
I  255.255.255.0  I
-------------------

On modifie le dhcpd.conf pour auto configurer les clients à utiliser notre serveur wins :). Si on n'avait pas de dhcp, il faudrait configurer toutes les machines clientes une par une pour leur activer le serveur wins !

ATTENTION, PENSEZ A RAJOUTER LES LIGNES SUIVANTES A VOTRE DHCPD.CONF POUR QUE VOTRE SERVEUR WINS SOIT AUTOMATIQUEMENT UTILISE PAR VOS CLIENTS

<fichier dhcpd.conf>
[...]
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
option netbios-dd-server 192.168.0.1;
option netbios-node-type 8;
[...]
</fichier>

Pour avoir le serveur wins, j'ai donc samba qui marche, configuré comme ceci.

<fichier smb.conf>
; validé sur un samba 2.0.5
[global]
   workgroup = rycks.com
   server string = Linux Box
   comment = Linux Box
   netbios name = pantoufle
   volume = pantoufle
   guest only = yes

   guest account = nobody
   log file = /var/log/samba-log.%m
   max log size = 50

   share modes = yes
   security = share
   socket options = TCP_NODELAY 
   os level = 33

   ; On le configure comme master du réseau
   domain master = yes
   local master = yes
   preferred master = yes

   ; On active le support wins
   wins support = yes
   wins proxy = yes

 ; Le partage FTP
 [ftp]
   path = /home/ftp/pub
   public = yes
   printable = no
   guest ok = yes

</fichier>

Pensez à relancer les serveurs dhcp, samba et dns si vous avez fait des modifications et relancez les clients dhcp pour qu'ils absorbent vos nouvelles configs, et regardez si le voisinage réseau ne fait pas "apparaître" les groupes qui sont sur "l'autre" réseau ?
Vu le temps que met windows pour afficher les machines du voisinage réseau, je vous conseille de rechercher un ordinateur par son nom. Essayez de chercher un ordinateur du réseau dans lequel vous êtes, puis un de ceux qui se trouve dans "l'autre" réseau.

Si vous "voyez" les machines du réseau "extérieur" mais que vous ne pouvez pas y accéder, c'est qu'il faut configurer votre passerelle pour qu'elle fasse réelement passerelle entre vos 2 réseaux.
Pour plus d'informations à ce sujet, regardez ipchains.

Généralement, il faut utiliser à peut près cela:

#remise a zéro des chaînes
ipchains -F
#on active le masquerading
#a vérifier selon la route par défaut etc.
ipchains -A forward -i eth0 -j MASQ

Bugs et limitations

Attention, si vous utilisez votre serveur dhcp pour faire deux zones en même temps, vous n'aurez en sortie du programme qu'un seul fichier de dns ... il faudra donc que vous répartissiez a la main ce fichier.

J'espère que ce petit document vous sera utile, si vous avez des questions et remarques, n'hésitez pas à me contacter.

Références

Pour plus de détails sur les différentes parties, consultez:

Ou trouver la dernière version de ce document?

Les mises à jour se suivent, vérifiez que vous avez bien la dernière version sur le site http://www.rycks.com/erics/linux/