L'une des parties les plus harassantes du travail d'administration est de sans cesse devoir répéter les mêmes choses et/ou faire un travail de maintenance simpliste. Dans cette catégorie entre le cas typique d'utilisateurs ayant un minimum de connaissances informatiques et se sentant obligés de reconfigurer en permanence leur machine.
Prenons un exemple simple dans lequel un troupeau d'utilisateurs passent leur temps à réinstaller leur système pour ensuite vous appeler afin de poser la question fatidique : "C'est quoi mon adresse IP ?". Heureusement pour le pauvre administrateur, il existe un moyen d'automatiser l'attribution des fameuses adresses et ce, dès le démarrage du système client.
Constituer un DHCP "blanc"
La première étape consiste à créer un fichier de configuration dhcp "blanc" qui acceuille tous les clients du réseau. Ceci n'est que la première étape, ne considérez surtout pas qu'au terme de cette première manipulation, vous obteniez un serveur DHCP fiable et fonctionnel.
Voici le fichier de configuration du serveur DHCP. Je ne m'étendrai pas sur le choix d'une version ou d'une autre. Assurez-vous simplement qu'il n'existe pas de bogue majeur dans le serveur livré avec votre distribution. En particulier si vous comptez utiliser cette configuration dans une entreprise ou un environnement autre que de test :
Le 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-adress 192.168.12.255; range 192.168.12.50 192.168.12.200;
Nous définissons des adresses utilisables par les clients entre 192.168.12.50 et 192.168.12.200. Ces clients recevront également comme information supplémentaire l'adresse de la passerelle à utiliser (192.168.12.1) et celle du serveur DNS.
Maintenant que vous avez lancé votre serveur DHCP (dhcpd start ou autre commande selon votre distribution), vous pouvez démarrer vos stations "clientes" du réseau que vous avez configurées pour obtenir automatiquement une adresse IP. Vous devrez configurer cette capacité à demander une adresse en fonction du système utilisé par les clients. Théoriquement, tous les systèmes capables de se connecter à Internet peuvent être configurés de cette manière. Cela inclut les Unix, Windows 95 et supérieur, et MacOS. Dès que vos clients vont demander une adresse IP au serveur dhcp, un bloc comme celui-ci sera ajouté au 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";
Et c'est ainsi que lorsque tous vos clients auront obtenu une adresse IP, votre fichier dhcpd.leases ressemblera à ceci :
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";
Le serveur DHCP a répondu à leur demande en leur fournissant une adresse IP. Nous, nous récupérons leur adresse ethernet et leur nom de machine. Ces informations vont maintenant nous servir à sécuriser l'ensemble du processus.
Sécuriser le DHCP "ouvert"
Il faut maintenant 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. C'est difficilement envisageable au sein d'une petite entreprise mais beaucoup plus vraisemblable dans le cas d'une grosse institution. Imaginez le stagiaire arrivé avec son portable et ainsi récupérer toutes les données du réseau... Le DHCP "fixe", dans lequel j'attribue une IP à une adresse MAC de carte réseau, me permet d'isoler plus facilement ce genre de problème.
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-adress 192.168.12.255; # ceux qui ne seront pas dans le dhcp # auront les ip entre .10 et .50 range 192.168.12.10 192.168.12.50; host hardware ethernet 00:10:5a:2e:56:a7; fixed-adress "kluster.slach2-100.party"; host hardware ethernet 00:80:ad:97:e1:76; fixed-adress "ceddz.slach2-100.party"; host hardware ethernet 00:80:ad:97:e1:7d; fixed-adress "sds.slach2-100.party"; host hardware ethernet 00:40:95:49:0b:a5; fixed-adress "saigneur.slach2-100.party"; host hardware ethernet 00:50:04:45:e1:65; fixed-adress "homer.slach2-100.party";
Attention : Si vous n'avez pas de DNS, il faut avoir un fichier dhcpd.conf utilisant les IP et non les noms des machines puisque le lien, sans DNS, n'est pas possible. Voici un exemple de dhcpd.conf n'utilisant pas de noms de machine mais des adresses IP (donc sans DNS) :
host hardware ethernet 00:40:95:49:0b:a5; fixed-adress "192.168.12.57"; host hardware ethernet 00:50:04:45:e1:65; fixed-adress "192.168.12.67";
Constitution automatique du DNS
Dans le même ordre d'idées, pourquoi s'arrêter en si bon chemin alors qu'on pourrait faire un DNS en même temps ? La mise en oeuvre d'un serveur DNS est toujours quelque chose qui impressionne. Ici, vous allez voir, c'est vraiment simple...
Un script Perl dhcp-auto_pl.pl permet, en utilisant l'option -dns, de fabriquer automatiquement les fichiers named.$domaine.ajouter et named.$domaine.rev.ajouter que vous ajouterez à vos fichiers de dns et dns reverse. Mais quels fichiers ? Cela dépend encore une fois du choix logiciel que vous aurez fait. Reportez-vous à la documentation de votre distribution.
Veuillez contrôler les fichiers avant de les ajouter à vos fichiers existants. De plus, il vous faudra ajouter au fichier named.conf les paramètres de vos domaines, comme par exemple :
zone "slach2-100.party" type master; file "named.slach2-100"; ; zone "12.168.192.in-addr.arpa" type master; file "named.slach2-100.rev"; ;
Vous avez, maintenant, un serveur DHCP opérationnel ainsi qu'un serveur DNS.
Le "voisinage réseau" des machines Windows
Lors de la Slach 2 (démo party), j'avais mis deux réseaux en place, l'un en 10 Mbit et l'autre en 100 (pour les privilégiés de l'époque) ... et le problème majeur était que les deux réseaux ne pouvaient pas "se voir" par le "voisinage réseau" de Windows.
Une parade existe : WINS. Wins permet de spécifier qu'il existe un serveur sur le réseau qui possède la liste des correspondances IP/Nom de plusieurs domaines. 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 sûr supporté par Samba. Le dessin ci-dessous vous montre l'architecture générale :
Il faut modifier le dhcpd.conf pour auto-configurer les clients de manière à ce qu'ils utilisent 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 ! Ajouter les lignes suivantes à votre dhcpd.conf pour que votre serveur wins soit automatiquement utilisé par vos clients :
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;
Pour avoir le serveur wins, il faut un serveur Samba qui marche. Celui-ci doit être configuré comme ceci :
[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
Pensez à relancer les serveurs DHCP, Samba et DNS lorsque vous faites des modifications et relancez les clients DHCP pour qu'ils absorbent vos nouvelles configurations. Enfin, vérifiez 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 conseil 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éellement passerelle entre vos deux réseaux. Pour plus d'informations à ce sujet, regardez la documentation d'ipchains / iptables. Voici un exemple global qui devrait fonctionner :
# remise à zéro des chaînes ipchains -F # on active le masquerading # à vérifier selon la route par défaut, etc. ipchains -A forward -i eth0 -j MASQ
Attention : cette configuration ipchains est vraiment minimale et simpliste. Parler de sécurité dans ce cas ne serait pas vraiment sérieux.
Attention (bis) : 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 à la main ce fichier.
Voilà, c'est fini. Vous devez être maintenant capable de procéder de même et d'adapter mes exemples à votre configuration réseau. Vous n'aurez plus d'appels d'utilisateurs paniqués et la configuration des clients est simple et fonctionnelle.
Références
* DHCP Mini Howto
* DNS Howto
* Documentation Samba