Re: Rép. : Re: freebox et linux

Page principale

Répondre à ce message
Auteur: Olivier Allard-Jacquin
Date:  
À: guilde
Sujet: Re: Rép. : Re: freebox et linux
    Je re-publie ici cette question qui m'a été posé :

> > + serveur DNS + DHCP local (j'insiste sur le terme "local"), avec
> > insertion des nouveaux noms dans le DNS, suite à des requêtes DHCP.
>
> çà se fait çà !?!?!



         Oui, ma machine perso est configurée comme cela depuis plus d'un
an. Ca marche bien, c'est un p'tit bonheur  :)


> 3 petits mots d'explication ou une doc s'il te plaît ;)


    Petite introduction d'abord : Le but est d'avoir sur une machine un 
serveur DHCP qui répond aux requêtes DHCP de PC client nouvellement 
rentré dans le réseau, et qui veulent obtenir une adresse IP. Une fois 
la demande DHCP faite et accepté par le serveur DHCP, celui-ci renvoie 
une information au serveur DNS du réseau, afin de le prévenir qu'il y a 
une nouvelle machine sur le réseau. Il lui donne alors l'adresse IP et 
le nom de la nouvelle machine (*). Ceci permet alors à n'importe quel 
machine du réseau de faire une résolution de nom sur cette nouvelle 
machine, ce qui est très pratique.


    Ce n'est pas très très facile à mettre en oeuvre, surtout si on n'a pas 
beaucoup notions de DNS (la bête est un poil complexe à comprendre). Je 
fournis ici un exemple de ma configuration :


- Dans mon exemple:
+ "phoenix.sky.net" est ma machine (le nom du réseau est interne à mon
LAN, et complètement fictif).
+ Elle fait office de serveur DNS, serveur DHCP et passerelle (via
Netfilter).
+ Son adresse IP est 192.168.0.1
+ Son masque de sous-réseau est 255.255.255.0
+ Son réseau est donc 192.168.0.0/24

- La première chose à faire, est d'avoir un serveur DHCP qui marche.
"urpmi dhcp-server" ou "apt-get install dhcp-server" (syntaxe à
vérifier, je ne suis pas sous Debian). Le programme principal s'appelle
"dhcpd". Pour la configuration, le /etc/dhcpd.conf doit contenir les
informations classiques d'un serveur DHCP : Intervalle d'adresses IP
disponibles, masque de sous réseau, adresse IP de la passerelle et
adresse IP du DNS (192.168.0.1 pour ces 2 dernières dans mon cas).

- Il faut aussi indiquer que le serveur DHCP doit informer le DNS lors
de l'apparition de nouvelles machines :
ddns-update-style interim;
ddns-update;

- Il faut lui indiquer quelles sont les domaines où ces modifications 
doivent être apportées. Dans mon cas, le DNS assure la résolution de nom 
(nom -> adresse IP), mais aussi la résolution inverse (adresse IP -> 
nom) Il y a donc 2 zones à modifier. Pour cela, on indique quelle est 
l'adresse IP du DNS qu'il faut informer :
   zone sky.net. {
       primary 127.0.0.1;
       }


   zone 0.168.192.in-addr.arpa. {
       primary 127.0.0.1;
       }


- Bien, c'est tout pour le DHCP

- Cote DNS, c'est un poil plus complexe. Le serveur DNS que j'ai utilisé
s'appelle "BIND". Pour l'installation "urpmi bind". Le programme
principal s'appelle "named".

- Dans mon exemple, le serveur DNS gères 4 zones : localhost
(complètement inutile, mais c'est pour l'exemple), "sky.net" (le nom de
mon réseau interne), et les zones "reverses IP" associées.

- Il faut aussi indiquer dans ce fichier quelles sont les zones
susceptibles d'être modifiables. Ici, ce sont uniquement les 2 zones
associées à "sky.net" (ce sont les 2 zones que le serveur DHCP vont
modifier). Dans le /etc/named.conf, on a donc :

   // Definition pour le localhost / 127.0.0.
   zone "localhost" {
           notify no;
           type master;
           file "localhost";
   };


   zone "0.0.127.in-addr.arpa" {
           notify no;
           type master;
           file "127.0.0";
   };


   // Definition pour le reseau sky.net / 192.168.0.
   zone "sky.net" {
           notify no;
           type master;
           file "sky.net";


           // Mise à jour automatique par DHCP
           allow-update {
                   127.0.0.1;
           };
   };


   zone "0.168.192.in-addr.arpa" {
           notify no;
           type master;
           file "192.168.0";


           // Mise à jour automatique par DHCP
           allow-update {
                   127.0.0.1;
           };
   };


- Enfin, on va paramétrer différentes options du serveur DNS. Entre 
autre, on va limiter les adresses IP qui vont être autorisées à 
interroger le serveur DNS :
   options {
         directory "/var/named";


         // Enlever les commentaires peut vous aider si vous avez a
         // passer a travers un firewall et que ça ne marche pas :
         // query-source port 53;


         // Le serveur travaille seul, pas besoin de synchronisation
         notify no;


         allow-transfer {
                 127.0.0.0/8;
                 192.168.1.0/24;
         };


         allow-query {
                 127.0.0.0/8;
                 192.168.1.0/24;
         };


         listen-on {
                 127.0.0.0/8;
                 192.168.1.0/24;
         };
   };


- Bien, maintenant que named est configuré, il nous faut créer les 
fichiers qui associent adresses IP et noms de machines. Il y a 4 zones, 
donc il y a 4 fichiers, stockés dans le "/var/named" (voir paramètre 
"directory"). Les fichiers sont ceux nommés par les variables "file" :
[root@phoenix /]# ll /var/named/
total 64
-rw-------    1 named    named     424 jun 24  2003 127.0.0
-rw-------    1 named    named     977 avr 17 19:22 192.168.0
-rw-------    1 named    named    3433 avr 17 19:07 192.168.0.jnl
-rw-------    1 named    named     350 jun 14  2003 localhost
-rw-------    1 named    named    1590 avr 20 20:33 sky.net
-rw-------    1 named    named    4050 avr 17 19:07 sky.net.jnl


(on verra plus tard l'intéret des fichiers "*.jnl")

- La syntaxe de ces fichiers demande une lecture de documentations sur
les DNS. RTFM donc... Notez simplement qu'il y a 3 machines dans mon
réseau "sky.net" : t-40, 600x et phoenix. Et une seule dans le réseau
"localhost"

- Bien maintenant il nous reste à démarrer le serveur DHCP :
[root@phoenix /]# service dhcpd start
Lancement de dhcpd :                                            [  OK  ]
[root@phoenix /]#  tail /var/log/messages
Apr 20 21:24:24 phoenix dhcpd: Wrote 49 leases to leases file.
avr 20 21:24:24 phoenix dhcpd: Démarrage de dhcpd succeeded


- Et démarrer le serveur DNS :
[root@phoenix /]# service named start
Lancement de named :                                            [  OK  ]
[root@phoenix /]#  tail /var/log/messages
Apr 20 21:25:33 phoenix named[11221]: starting BIND 9.2.3rc2 -u named -t 
/var/named
Apr 20 21:25:33 phoenix named[11221]: using 1 CPU
Apr 20 21:25:33 phoenix named[11223]: loading configuration from 
'/etc/named.conf'
avr 20 21:25:33 phoenix named: Démarrage de named succeeded
Apr 20 21:25:33 phoenix named[11223]: no IPv6 interfaces found
Apr 20 21:25:33 phoenix named[11223]: listening on IPv4 interface lo, 
127.0.0.1#53
Apr 20 21:25:33 phoenix named[11223]: listening on IPv4 interface eth0, 
192.168.1.50#53
Apr 20 21:25:33 phoenix named[11223]: command channel listening on 
127.0.0.1#953
Apr 20 21:25:33 phoenix named[11223]: zone 0.0.127.in-addr.arpa/IN: 
loaded serial 2003061401
Apr 20 21:25:33 phoenix named[11223]: zone localhost/IN: loaded serial 
2003061401
Apr 20 21:25:33 phoenix named[11223]: zone 0.168.192.in-addr.arpa/IN: 
loaded serial 2003061482
Apr 20 21:25:33 phoenix named[11223]: zone sky.net/IN: loaded serial 
2003061516
Apr 20 21:25:33 phoenix named[11223]: running


- Il est important qu'aucune erreur n'apparaissent ici. Si les fichiers
de zones du "/var/named/*" ont une syntaxe incorrecte, c'est ici qu'on
le verra. Attention, ce n'est parfois pas évident de trouver la cause
des syntaxes incorrectes. Et "man named.conf" est assez ch... pénible à
lire ! :)

- Maintenant, tout est près. Lorsqu'une nouvelle machine va se connecter
au réseau, et interroger le serveur DHCP, celui-va demande au serveur
DNS de rajouter des entrées dans les fichiers 192.168.0 et sky.net. Mais
comme ces informations ont une certaine durée de vie (la durée du bail
DHCP en fait), le serveur DNS va noter que ce sont des informations
temporaires. Il va donc modifier les fichiers "/var/named/*" et
créer/modifier les fichiers "/var/named/*.jnl", qui sont ce que l'on
appelle des fichiers de journaux. Leur format est +/- binaire. A noter,
et c'est important, qu'il ne faut pas modifier "comme un sauvage" les
fichiers "/var/named/*" lorsqu'il y a des "*.jnl" associés. Si vous
voulez supprimer à la main les modifications faites par le serveur DHCP
(ce N'est PAS du tout conseillé), il faut aussi supprimer les fichiers
"*.jnl".

    Voila le gros des explications. Pour configurer ce système DHCP + DNS, 
je me suis largement aidé de documentations très bien faites trouvées 
sur Internet. Entre autre :


- http://christian.caleca.free.fr/dhcp/
- http://christian.caleca.free.fr/dns/
- ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Chroot-BIND-HOWTO (oui, mon
serveur DNS tourne dans un chroot : Sécurité oblige !!!)

(*) Pour les clients DHCP qui vont se connecter, le problème du nom de
la machine est important. Sur les machines Windows, celles-ci ont
systématiquement un nom propre "NetBIOS", propre à la machine. C'est ce
nom qui sera envoyé au serveur DHCP, et qui sera rentré dans le DNS.
Pour les machines Linux, il n'y a pas de nom par défaut. Aussi, il
convient d'en renseigné un dans le fichier de configuration du CLIENT
DHCP : /etc/dhclient.conf. Normalement, c'est quelque chose comme :

send host-name "newmachine.sky.net";

    J'espère que cette documentation succincte suffira à ceux qui veulent 
implémenté cette technique sur leur réseau. Sinon, Google renvoie pas 
mal d'informations. :)


    Il faudrait peut-être que je rajoute à ma TODO liste, la rédaction 
d'une explication plus complète et plus précise de cette technique. Bon, 
on envisagera cela lorsque la version stable de Debian/Sarge sortira... ;)


            Olivier
-- 
~~~~~~~  _____/\_____  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Phoenix /   _ \/ _   \    Olivier Allard-Jacquin
       /   / \  / \   \   Web:  http://olivieraj.free.fr/
      /___/  /  \  \___\  Mail: olivieraj@???
~~~~ /////  ///\\\  \\\\\ ~~~~~~~~~~~~~~~~~~~~~~~ Linux Powered !!