Tutorial, How-To, HowTo

Si on récupère une adresse IP dynamique par DHCP (notamment quand on utilise un portable en situation de mobilité), comment connaître sa nouvelle adresse IP ? La solution est d’utiliser un système de DNS dynamique (une adresse DNS fixe pointant vers l’adresse IP dynamique récupérée par DHCP).

Plusieurs systèmes sont possibles :

  • sur Internet : utiliser un service tel que DynDNS et le client ddclient qui mettra à jour votre adresse DNS chaque fois que votre adresse IP change
  • sur Internet : monter son propre service de DNS dynamique avec gnudip http://gnudip2.sourceforge.net
  • sur Intranet : utiliser son propre serveur DNS bind9 http://www.isc.org/sw/bind et le client nsupdate pour mettre à jour directement son entrée dans le serveur DNS

Tutorial : Internet & service DynDNS

- Installer par exemple (sous linux) le logiciel ddclient et modifier le fichier /etc/ddclient.conf


syslog=yes
pid=/var/run/ddclient.pid

use=web

protocol=dyndns2
server=members.dyndns.org
login=monnom
password=monmotdepasse
foobar.homedns.org

Tutorial : Internet & gnudip

... en cours de rédaction...

  • Installer les packages suivants :

# apt-get install gnudip
# mkdir /var/cache/gnudip
  • Configurer la base de données MySQL

Dans le fichier /usr/share/doc/gnudip/gnudip2.db, remplacer les lignes "DEFAULT ’0’ NOT NULL auto_increment" par "NOT NULL auto_increment"


# echo "create database gnudip2;" | mysql -u root -p
# echo "grant all on gnudip2.* to gnudip@'localhost' identified by 'motdepasse_gnudip'; flush privileges;" | mysql -u root -p
# cat /usr/share/doc/gnudip/gnudip2.db | mysql -u root -p gnudip2
  • Modifier le fichier de configuration /etc/gnudip.conf

gnudipuser = gnudip
[...]
gnudippassword = motdepasse_gnudip
[...]
gnudipserver = localhost
[...]
  • Ouvrir l’interface web d’administration

Ouvrir l’URL suivante : http://localhost/cgi-bin/gnudip2.cgi

et se logger avec le compte : admin/GnuDIP

  • Cliquer sur "Administrative Settings" pour changer le nom de domaine
  • Cliquer sur "Change Settings" pour changer le mot de passe admin

[...]

Tutorial : Intranet & serveur BIND & nsupdate

- Description de l’architecture :

  • serveur DHCP : 192.168.0.1
  • serveur DNS : 192.168.0.10 gérant le réseau dyn.foobar.com
  • réseau local : 192.168.0.1/255.255.255.0
  • PC client : @IP dynamique, toto.dyn.foobar.com

Comme les ordinateurs sont sur l’intranet, je n’utiliserai pas de chiffrement pour mettre à jour les entrées sur le serveur DNS.

- Installation du serveur DNS : Bind9

  • Installer les packages suivants :

# apt-get install bind9
  • Créer le fichier de zone : /etc/bind/db.dyn.foobar.com

$TTL 3D
@   IN SOA ns.dyn.foobar.com. host.dyn.foobar.com. (
          2006091901 ; serial
          8H         ; refresh, seconds
          2H         ; retry, seconds
          4W         ; expire, seconds
          1D)        ; minimum, seconds
;
   IN     NS    ns.dyn.foobar.com.
;
ns         A     192.168.0.10
  • Modifier le fichier /etc/bind/named.conf.options

/// ACL
acl dyn-clients {
 127.0.0.1;
 192.168.0.1/24;
};
acl ns-clients {
 127.0.0.1;
};

options {
 directory "/var/cache/bind";
 listen-on port 53 { 127.0.0.1; 192.168.0.10; };
 listen-on-v6 { none; };

 allow-query { dyn-clients; };
 allow-transfer { ns-clients; };

 // Put your ISP DNS server
 forwarders {
   80.118.192.100; 80.118.196.36;
 };

 auth-nxdomain no;    # conform to RFC1035
};

logging {
 channel  log-file     {file "/var/log/named.log"; severity debug; print-time yes;};
 category default      {log-file;};
 category panic        {log-file;};
 category packet       {log-file;};
 category eventlib     {log-file;};
};
  • Modifier le fichier /etc/bind/named.conf.local

zone "dyn.foobar.com" {
 type master;
 file "/etc/bind/db.dyn.foobar.com";
 notify yes;
 allow-update { "dyn-clients"; };
 allow-query { "dyn-clients"; };
};

- Configuration des PCs clients

  • Installer les packages suivants :

# apt-get install dhcp3-client dnsutils resolvconf
  • Créer le fichier /etc/dhcp3/dhclient-exit-hooks.d/dyn.foobar.com (vous pouvez utiliser un autre nom de fichier)

TTL=86400
HOSTNAME=toto.dyn.foobar.com
NS=192.168.0.10
ZONE=dyn.foobar.com

nsupdate -v > /dev/null << EOF
server $NS
zone $ZONE
update delete $HOSTNAME A
update add $HOSTNAME $TTL A $new_ip_address
send
EOF
  • Modifier le fichier resolv.conf

Solution 1 : utiliser resolvconf

Modifier /etc/resolvconf/resolv.conf.d/head


# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.10

Solution 2 : modifier /etc/network/interfaces (uniquement sous Debian)


iface eth0 inet dhcp
dns-nameservers 192.168.0.10
#dns-search dyn.foobar.com
  • Redémarrer le service réseau pour tester

# /etc/init.d/networking restart
# ping toto.dyn.foobar.com

Vous pouvez également tester un transfert de zone (dans le tutorial, celui-ci ne peut être que fait en local sur le serveur DNS cf. la liste de contrôle d’accès ns-clients)


# host -l dyn.foobar.com

ou


# dig AXFR dyn.foobar.com

Tutorial : Internet & serveur BIND & nsupdate

- Description de l’architecture :

  • serveur DNS : W.X.Y.Z. gérant le réseau dyn.foobar.com
  • PC client : @IP dynamique, toto.dyn.foobar.com

Comme les ordinateurs sont sur internet, j’utiliserai des clés de chiffrement pour mettre à jour les entrées sur le serveur DNS.

... en cours de rédaction...

Documentation

  • http://dag.wieers.com/howto/bits/bind-ddns.php
  • http://lists.debian.org/debian-user-french/2003/07/msg01403.html
  • http://caunter.ca/nsupdate.txt
  • http://linox.be/index.php/2006/03/07/a_dynamic_dns_update_client_on_debian_with_dhcp3-client/
  • http://www.swisslinux.org/forums/ptopic213.php