Le système DNS : nommage des machines

8 février 2007

Télécharger en PDF


Le service Domain Name System sert à donner un nom symbolique comme www.sharevb.net à une machine ayant une adresse IP connue. En effet, il est plus simple de retenir www.sharevb.net que 192.12.94.30. Le service DNS sert aussi à trouver l'IP d'un nom DNS symbolique.

Pour résumé, à la base, le DNS stocke des associations « nom symbolique » <=> « adresse IP », et répond à des questions comme « Quel est le nom symbolique de 192.12.94.30 ? » ou encore « Quelle est l'IP de www.sharevb.net ». La première question s'appelle « résolution d'adresse» et la seconde « résolution de nom ».

Table des matières

I.Le système DNS 2

1.Les origines 2

2.Alors, c'est quoi DNS ? 2

3.Espace de noms, racine, hôte, FQDN... 2

4.Les serveurs DNS 3

5.Résolution de nom 4

6.TLD 4

II.Test de DNS 5

1.Test de DNS par cheminement manuelle avec nslookup 5

2.Test de DNS en détails 7

III.Configuration DNS d'un client 7

IV.Configuration d'un « serveur DNS » 7

1.Type d'enregistrements dans le DNS 7

2.Enregistrement SOA 9

3.Configuration de Bind : généralités 9

4.Configuration de Bind en DNS primaire 10

5.Configuration en secondaire 11

6.Configuration d'une zone DNS inverse 11

7.Démarrage du serveur DNS 12

V.Rotation de journal 12

VI.Utiliser rndc 12

1.Fichiers de configuration 13

a)/etc/named.conf 13

b)/etc/rndc.conf 13

2.Options de ligne de commande 14

VII.Et iptables dans tout ça 15

VIII.Bibliographie 15



I.Le système DNS

1.Les origines

Dans les débuts de l'informatique, les réseaux TCP/IP était très petit, il était donc plus simple de maintenir sur chaque machine, un fichier /etc/hosts contenant le mapping des IP <=> nom symbolique pour chaque machine. Ainsi chaque machine connaissez statiquement son nom et celui de toutes les autres machines accessibles. Cependant, si l'on voulait changer un nom d'une machine, il fallait le faire sur toutes.

Et puis, les réseaux se sont agrandis et Internet est né rendant impossible la gestion statique par fichiers /etc/hosts. Il a donc fallu inventer autre chose. Le système nommé Domain Name System (DNS) càd Système de nom de domaine, a été mis au point en novembre 1983 par Paul Mockapetris (RFC 882 et RFC 883), puis révisé en 1987 dans les RFC 1034 et 1035. Le DNS a fait l'objet depuis de nombreuses RFC.



2.Alors, c'est quoi DNS ?

Le système de résolution de nom contient :

3.Espace de noms, racine, hôte, FQDN...

La structure du DNS est une arborescence (inversée), comme le système de fichier Unix. Chaque noeud de l'arbre porte le nom de « nom de domaine » et peut comporter un label de maximum 63 caractères. De plus, chaque noeud « nom de domaine » est séparé par un « . » (contrairement au système de fichier Unix à « / »).

Dans cette arborescence sont définis des domaines de niveaux supérieurs, appelés TLD (Top Level Domain) qui se trouve juste en dessous de la racine « . ». Pour faire simple (attention aux points terminaux qui sont très importants), ceux sont les « .fr. », « .com. », « .net. »








Ensuite viennent les noms de domaines, comme sharevb, google, microsoft, kernel...Ils peuvent être encore suivis par des noms de sous domaines, par exemple, pour dénoter l'appartenance à un service d'une entreprise.

Enfin, l'extrémité d'une branche est appelée hôte, et correspond à une machine ou une entité du réseau. Le nom d'hôte qui lui est attribué doit être unique dans le domaine ou sous domaine considéré. Par exemple, le serveur Web d'une entité accessible par internet porte souvent le nom de « www ».

On appelle souvent « domaine » tout ce qui précède le nom d'hôte, par exemple sharevb.net. est un domaine dont www est un hôte.

Le nom complet d'un hôte, domaine compris s'appelle un FQDN (Full Qualified Domain Name) càd Nom de Domaine Entièrement Qualifié. Il permet d'adresser uniquement une machine sur un réseau ou sur Internet. La profondeur maximale de l'arborescence est de 127 niveaux et la longueur maximale d'un nom FQDN est de 255 caractères. Par exemple, www.sharevb.net. est le FQDN de la machine hébergeant ce site (noté bien le « . » derrière « net »).

4.Les serveurs DNS

Le machines appelées « serveur DNS » permettent de connaître l'IP d'un nom FQDN et le FQDN d'une IP. Chaque domaine doit en posséder deux :

De plus, chaque DNS est déclaré dans le DNS du niveau immédiatement supérieur afin d'obtenir une architecture distribuée où chaque DNS n'est en charge que de son (ou ses) domaine(s). Il n'y a pas d'organisme qui se charge de toute l'arborescence.

Les serveurs correspondant aux TLD (noms de domaines de plus haut niveau) sont appelés « serveurs de noms racine ou root servers ». Il en existe treize, répartis sur la planète, possédant les noms « a.root-servers.net » à « m.root-servers.net ».

Un serveur de noms définit une zone, c'est-à-dire un ensemble de domaines sur lequel le serveur a autorité. Pour que le système DNS reste transparent de l'utilisateur, il est important de noter que :

Le serveur le plus répandu s'appelle BIND (Berkeley Internet Name Domain). Il s'agit d'un logiciel libre disponible sous les systèmes UNIX, développé initialement par l'université de Berkeley en Californie et désormais maintenu par l'ISC (Internet Systems Consortium).

5.Résolution de nom

L'action de trouver l'IP d'un nom de domaine s'appelle « résolution de nom » et est confiée à un logiciel appelé « resolver ». Lorsqu'une application veut se connecter à une machine connue par son FQDN (par exemple, www.sharevb.net.), elle demande au resolver de lui renvoyer l'IP de cette machine. Le resolver va alors interroger un serveur DNS dont il trouve l'adresse dans sa configuration.

Le principe est le suivant, par exemple pour la question « Quelle est l'IP de www.sharevb.net ?» :




6.TLD

Il existe deux catégories de TLD (Top Level Domain) :

II.Test de DNS

1.Test de DNS par cheminement manuelle avec nslookup

[user@machine ~]$ nslookup

> server a.root-servers.net

Default server: a.root-servers.net

Address: 198.41.0.4#53

> set query=ns

> altavista.com

Server: a.root-servers.net

Address: 198.41.0.4#53


Non-authoritative answer:

*** Can't find altavista.com: No answer


Authoritative answers can be found from:

com nameserver = A.GTLD-SERVERS.NET.

com nameserver = G.GTLD-SERVERS.NET.

com nameserver = H.GTLD-SERVERS.NET.

com nameserver = C.GTLD-SERVERS.NET.

com nameserver = I.GTLD-SERVERS.NET.

com nameserver = B.GTLD-SERVERS.NET.

com nameserver = D.GTLD-SERVERS.NET.

com nameserver = L.GTLD-SERVERS.NET.

com nameserver = F.GTLD-SERVERS.NET.

com nameserver = J.GTLD-SERVERS.NET.

com nameserver = K.GTLD-SERVERS.NET.

com nameserver = E.GTLD-SERVERS.NET.

com nameserver = M.GTLD-SERVERS.NET.

A.GTLD-SERVERS.NET has AAAA address 2001:503:a83e::2:30

A.GTLD-SERVERS.NET internet address = 192.5.6.30

G.GTLD-SERVERS.NET internet address = 192.42.93.30

H.GTLD-SERVERS.NET internet address = 192.54.112.30

C.GTLD-SERVERS.NET internet address = 192.26.92.30

I.GTLD-SERVERS.NET internet address = 192.43.172.30

B.GTLD-SERVERS.NET has AAAA address 2001:503:231d::2:30

B.GTLD-SERVERS.NET internet address = 192.33.14.30

D.GTLD-SERVERS.NET internet address = 192.31.80.30

L.GTLD-SERVERS.NET internet address = 192.41.162.30

F.GTLD-SERVERS.NET internet address = 192.35.51.30

J.GTLD-SERVERS.NET internet address = 192.48.79.30

K.GTLD-SERVERS.NET internet address = 192.52.178.30

E.GTLD-SERVERS.NET internet address = 192.12.94.30

> server a.gtld-servers.net

Default server: a.gtld-servers.net

Address: 192.5.6.30#53

Default server: a.gtld-servers.net

Address: 2001:503:a83e::2:30#53

> altavista.com

Server: a.gtld-servers.net

Address: 192.5.6.30#53


Non-authoritative answer:

altavista.com nameserver = asia1.akam.net.

altavista.com nameserver = eur1.akam.net.

altavista.com nameserver = ns1-45.akam.net.

altavista.com nameserver = ns1-79.akam.net.

altavista.com nameserver = ns1-92.akam.net.

altavista.com nameserver = ns1.yahoo.com.

altavista.com nameserver = ns2.yahoo.com.

altavista.com nameserver = ns3.yahoo.com.

altavista.com nameserver = ns4.yahoo.com.

altavista.com nameserver = ns5.yahoo.com.

altavista.com nameserver = usc2.akam.net.

altavista.com nameserver = use1.akam.net.

altavista.com nameserver = usw1.akam.net.


Authoritative answers can be found from:

asia1.akam.net internet address = 144.135.8.182

eur1.akam.net internet address = 212.187.244.39

ns1-45.akam.net internet address = 193.108.91.45

ns1-79.akam.net internet address = 193.108.91.79

ns1-92.akam.net internet address = 193.108.91.92

ns1.yahoo.com internet address = 66.218.71.63

ns2.yahoo.com internet address = 66.163.169.170

ns3.yahoo.com internet address = 217.12.4.104

ns4.yahoo.com internet address = 63.250.206.138

ns5.yahoo.com internet address = 216.109.116.17

usc2.akam.net internet address = 207.126.99.93

use1.akam.net internet address = 63.209.170.136

usw1.akam.net internet address = 63.215.198.91

> server ns1.yahoo.com

Default server: ns1.yahoo.com

Address: 66.218.71.63#53

> altavista.com

Server: ns1.yahoo.com

Address: 66.218.71.63#53


Name: altavista.com

Address: 66.218.71.198

2.Test de DNS en détails

Un serveur DNS a deux rôles fondamentaux :


Pour avoir l'IP d'une URL, on utilisera au choix :

dig adresse_internet [@server_DNS]

host adresse_internet [server_DNS]

nslookup adresse_internet [server_DNS]


Pour obtenir le nom d'une adresse IP, on utilisera :

dig -x IP [@server_DNS]

host IP [server_DNS]

nslookup IP [server_DNS]


Pour le nom du serveur de mail d'un domaine, on utilisera :

dig -t MX nom_domaine [@server_DNS]

host -t MX nom_domaine [@server_DNS]

nslookup -query=MX nom_domaine [server_DNS]


III.Configuration DNS d'un client


Voir tuto sur la configuration IP.


IV.Configuration d'un « serveur DNS »

1.Type d'enregistrements dans le DNS

A la base le DNS est prévu pour servir des associations IP <=> FQDN mais pas seulement...

En réalité, on peut voir un DNS comme une base de données « répartie dans le monde » contenant des enregistrements (appelés RR pour Resource Records) et contenant des informations sur les noms de domaines.

Pour permettre un système de cache autorisant le système DNS à être réparti, les enregistrements de chaque domaine possèdent une durée de vie (appelée TTL pour Time To Live c'est à dire une durée de vie). Ceci permet aux serveurs intermédiaires de connaître la date de validité des informations et ainsi savoir s'il est nécessaire ou non de la revérifier pour mettre à jour le cache.

D'une manière générale, un enregistrement DNS comporte les informations suivantes :

FQDN TTL TYPE CLASSE RESOURCE_DATA

Par exemple : www.sharevb.net 3600 A IN 193.108.91.45

Les informations sont les suivantes :


2.Enregistrement SOA


example.org. IN SOA ns1.example.org. admin.example.org. (
                        5               ; Serial
                        10800           ; Refresh after 3 hours
                        3600            ; Retry after 1 hour
                        604800          ; Expire after 1 week
                        86400 )         ; Minimum TTL of 1 day
@       IN NS           ns1.example.org.

Tous les serveurs DNS primaires doivent avoir une ligne comme ceci. Le @ représente l'origine (par ex : example.com).

3.Configuration de Bind : généralités

Plusieurs choses sont importantes pour avoir une bonne configuration de BIND :

options {

#dossier de stockage des fichiers de zone

directory "/var/named";

#fichier cache

dump-file "/var/named/data/cache_dump.db";

#fichiers de stats

statistics-file "/var/named/data/named_stats.txt";

# indique à BIND de faire des requêtes depuis le port DNS

query-source address * port 53;

# d'accord, on sert une zone mais si on veut servir de relais vers un serveur DNS extérieur

forwarders {

#indique les IP de serveurs extérieurs pour servir les autres domaines que le notre

<IP primaire extérieur>;

<IP secondaire extérieur>;

};

};

#on sait quand même donner les adresses des « root servers »

zone "." IN {

type hint;

#on peut récupérer ce fichier à

# ftp://rs.internic.net/domain/named.root

file "named.ca";

};

4.Configuration de Bind en DNS primaire


Dans le fichier /etc/named.conf :

zone "reseau.domaine.fr" IN {

//maitre de la zone

type master;

//nom du fichier dans /var/named

file "reseau.domaine.fr.zone";

//autorise le transfert de la zone par un DNS secondaire

allow-transfer {<IP dns secondaire>;};

};

Créer un lien dans le répertoire /var/named vers le fichier /var/named/chroot/var/named/reseau.domaine.fr.zone. Le serveur named étant chrooté dans /var/named/chroot, son répertoire racine est /var/named/chroot

[root]# ln -s /var/named/chroot/var/named/reseau.domaine.fr.zone /var/named/reseau.domaine.fr.zone


Dans le fichier /var/named/chroot/var/named/reseau.domaine.fr.zone :

$ORIGIN reseau.domaine.fr. #ajoute reseau.domaine.fr. au nom DNS ne se terminant pas par .

$TTL 86400 ; 1 day

reseau.domaine.fr. IN SOA <IP DNS> administrateur.reseau.domaine.fr. (

;date de création + incrément

2005111801 ; serial

10800 ; refresh (3 hours)

3600 ; retry (1 hour)

604800 ; expire (1 week)

86400 ; minimum (1 day)

)

#la machine par défaut du domaine

@ A <IP DNS>

#le serveur DNS par défaut du domaine

@ NS <IP DNS>


#un alias vers pc101

www CNAME pc1000

# deux adresses de machines

pc1000 A <une IP d'une machine du réseau>

toto A <une IP d'une autre machine du réseau>


Tout ce qui se termine par un . est un nom complet alors que ce qui ne se termine pas par un . se réfère à l'origine (définie par $ORIGIN ou par la clause zone de named.conf). Dans ce cas, l'origine sera ajoutée après ces noms relatifs.

5.Configuration en secondaire

Dans la configuration du primaire du serveur primaire, ajouter la clause allow-transfer

Ajouter dans la configuration named.conf du secondaire :

zone "reseau2.domaine.fr." IN {

#DNS secondaire

type slave;

#adresses IP de(s) DNS primaire(s)

masters {

<IP DNS primaire>;

};

//nom du fichier qui sera automatiquement créé par bind par demande au serveur primaire

file "slaves/reseau2.domaine.fr.zone";

};

6.Configuration d'une zone DNS inverse


Dans /etc/named.conf :

zone "X.X.X.in-addr.arpa" IN {

#primaire

type master;

#ou secondaire

#type slave;

#masters {<IP primaire>;};

file "inv.reseau.domaine.fr.zone";

};


Le fichier /var/named/chroot/var/named/inv.reseau.domaine.fr.zone
$ORIGIN .reseau.domaine.fr.

$TTL 86400

X.X.X.in-addr.arpa. IN SOA <IP serveur DNS> administrateur.reseau.domaine.fr. (

2005111800 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

@ NS <IP serveur DNS>

#défini les noms des différentes machines en fonction de leur Ips

#il n'est pas nécessaire de préciser le début de l'IP

#car il est dans le nom du SOA

1 PTR pc1000

#on peut faire les alias simplement

1 PTR www

101 PTR toto


7.Démarrage du serveur DNS

/etc/init.d/named start

Il est cependant souvent nécessaire de vérifier les logs /var/log/messages.

Si par exemple, vous obtenez un problème de droits sur les fichiers, vérifier qu'ils appartiennent bien à root:root ou root:named ou named:named et qu'ils sont en 640.

V.Rotation de journal

Bind enregistre toutes les requêtes qui lui sont adressés dans le journal /var/log/named.log.
Ce journal doit être régulièrement initialisé afin d'éviter qu'il ne grossisse indéfiniment. On peut utiliser pour cela un logiciel nommé logrotate.
Voici un script normalement nommé /etc/logrotate.d/named.

/var/log/named.log {
        missingok
        postrotate
                /usr/bin/kill -HUP `cat /var/run/named/named.pid 2> /dev/null` 2> /dev/null || true
        endscript
        compress
}

VI.Utiliser rndc

BIND contient un utilitaire appelé rndc qui permet d'administrer, localement ou à distance, le démon named grâce à des déclarations en lignes de commandes. Le programme rndc utilise le fichier /etc/rndc.conf pour ses options de configuration.

Afin d'empêcher des utilisateurs non autorisés sur d'autres systèmes de contrôler BIND sur votre serveur, on utilise une méthode de clé secrète partagée pour autoriser certains hôtes à contrôler BIND. Pour que rndc puisse émettre des commandes vers n'importe quel named, même sur un ordinateur local, les clés utilisées dans /etc/named.conf et /etc/rndc.conf doivent se correspondre.

1.Fichiers de configuration

a)/etc/named.conf

Pour que rndc soit autorisé à se connecter à BIND, vous devez autoriser une assiocation IP <=> clé de cette façon :

controls {
  inet 127.0.0.1 allow { localhost; } keys { <key-name>; };
};



Cette déclaration dit à named de se mettre à l'écoute du port TCP 953 de la boucle locale et d'autoriser les commandes rndc provenant de l'hôte local, si la clé adéquate est présentée. <key-name> fait référence à la déclaration key, qui se trouve aussi dans le fichier /etc/named.conf, par exemple :

key "<key-name>" {
  algorithm hmac-md5;
  secret "<key-value>";
};



Dans ce cas, <key-value> est une clé HMAC-MD5. Vous pouvez générer vos propres clés HMAC-MD5 à l'aide de la commande suivante :

dnssec-keygen -a hmac-md5 -b <bit-length> -n HOST <key-file-name>

Une clé d'au moins 256 bits de long est un bon choix. La bonne clé qui doit être placée dans la zone <key-value> se trouve dans <key-file-name>.

Une clé ne peut pas s'appeler « key ».

b)/etc/rndc.conf

Afin de configurer rndc pour qu'il utilise automatiquement la clé spécifiée dans /etc/named.conf pour l'hôte local, vous avez besoin de trois déclarations. La déclaration options vous permet de régler le serveur et la clé par défaut pour utilisation par rndc :

#définir la clé par défaut et l'IP par défaut
options {
  default-server  localhost;
  default-key     "<key-name>";
};
# autoriser la clé <key-name> pour l'hôte localhost
server localhost {
  key  "<key-name>";
};
#la clé à utiliser
key "<key-name>" {
  algorithm hmac-md5;
  secret "<key-value>";
};



<key-name> et <key-value> doivent être absolument identiques à leur configuration dans /etc/named.conf.

2.Options de ligne de commande

Une commande rndc se présente selon la forme suivante :

rndc [<options>] <commande> [<commande-options>]

Quand on exécute rndc sur un hôte local configuré de façon appropriée, les commandes suivantes sont disponibles:

On peut à l'occasion vouloir passer outre les réglages par défaut dans le fichier /etc/rndc.conf. Sont disponibles les options suivantes :



VII.Et iptables dans tout ça

Le service DNS utilise le port 53 :



On aura donc les règles suivantes :

[root]# iptables -A INPUT -p udp --dport 53 -j ACCEPT

[root]# iptables -A OUTPUT -p udp --sport 53 -j ACCEPT

Et aussi une série de règles pour chaque DNS secondaire, pour autoriser les transferts uniquements entre DNS :

[root]# iptables -A INPUT -p tcp --dport 53 -s IP_DNS_secondaire -j ACCEPT

[root]# iptables -A OUTPUT -p tcp --sport 53 -d IP_DNS_secondaire -j ACCEPT

VIII.Bibliographie

sharevb