dans l’article précédent de cette série en deux parties, Introduction au DNS (Domain Name System), j’ai décrit comment la base de données DNS est structurée et comment configurer les services de noms sur un client. J’ai également répertorié et décrit certains des enregistrements DNS Les plus courants que vous êtes susceptible de rencontrer lors de la construction d’un serveur de noms ou simplement en essayant d’interpréter les résultats d’une commande dig.

dans cet article, je vous montre comment construire votre propre serveur de noms en utilisant BIND (Berkeley Internet Name Domain)., Il n’est pas aussi difficile que vous pourriez le penser, surtout que vous pouvez le faire en deux étapes.

dans cet article, vous commencerez par apprendre à créer un serveur de noms de cache, puis vous passerez à autre chose et apprendrez à le mettre à niveau vers un serveur de noms de domaine principal (maître) complet pour votre réseau, avec des fichiers de zone avant et arrière.

configuration d’un serveur DNS à L’aide de BIND

la configuration d’un serveur de noms à l’aide de BIND est assez simple, donc je vais vous montrer comment le faire sur n’importe quel ordinateur que vous pourriez avoir à disposition pour l’expérimentation., Ce petit projet de laboratoire vous montrera comment installer et configurer BIND sur votre ordinateur en tant que serveur de noms en cache, le Tester, puis le configurer en tant que serveur de noms principal avec un fichier de zone que vous pouvez utiliser comme résolveur de noms pour votre réseau ou simplement pour les tests.

la configuration d’un serveur de noms sur n’importe quel ordinateur GNU / Linux dont vous disposez est techniquement possible car elle n’interférera pas avec les autres hôtes du réseau ou leur fonctionnement. Cependant, vous ne devriez probablement pas le faire sur un ordinateur qui ne vous appartient pas ou qui ont le droit de modifier, sauf si vous avez l’autorisation expresse de le faire.,

Ma configuration

Vous avez seulement besoin d’un ordinateur pour effectuer des tâches dans ce projet de laboratoire. J’utilise cette configuration sur Mon ThinkPad beaucoup plus puissant car les serveurs de noms fournis par DHCP (Dynamic Host Configuration Protocol) lorsque je me connecte à des réseaux non domestiques en utilisant des connexions filaires ou sans fil peuvent parfois être peu fiables. Pour montrer que presque n’importe quel hôte peut bien fonctionner en tant que serveur de noms, j’ai testé ce projet sur un ancien netbook ASUS EeePC 900.,

je vais utiliser l’adresse IP privée de mon ASUS pour ce projet, mais vous devez utiliser l’adresse IP de l’hôte que vous utilisez.

Le fichier hosts

tout d’Abord, jetons un coup d’oeil au fichier /etc/hosts. Dans son état par défaut, il ne devrait y avoir que deux lignes dans le fichier hosts, les deux premières lignes vues dans la liste 1, ci-dessous.

Liste 1: vous pouvez gérer un simple fichier hosts pour effectuer la fonction d’un résolveur dans les petits réseaux.,

bien que vous puissiez ajouter des noms d’hôte et leurs adresses IP respectives comme indiqué dans la liste 1, ce n’est pas une solution optimale pour nommer les services, en particulier lorsque vous voyagez. S’il y a d’autres entrées dans votre fichier hosts, vous devrez peut-être les commenter pendant la durée de ce projet si elles interfèrent avec les noms ou les adresses IP. La plupart d’entre vous n’auront aucune entrée autre que les deux lignes par défaut.,

préparation

un serveur de noms en cache ne peut pas remplacer votre utilisation de /etc / hosts pour résoudre les noms d’hôtes sur le réseau interne; cependant, comparé à l’utilisation D’un FAI ou d’un autre serveur de noms public, un serveur de noms en cache peut améliorer les performances lors de la résolution www.cnn.com. la meilleure partie est que la mise en place d’un serveur de noms de mise en cache est assez facile.

Avant de commencer, vous devez préparer en effectuant les étapes suivantes.

tout d’Abord, faire des copies de sauvegarde des fichiers /etc/hosts, /etc/named.conf, resolv.conf et /etc/sysconfig/iptables.,

S’ils ne sont pas déjà installés, utilisez le gestionnaire de paquets de votre distribution pour installer les RPM BIND suivants: bind, bind-chroot et bind-utils. Pour permettre à votre hôte de laboratoire d’utiliser le serveur de noms de mise en cache, vous devez ajouter une ligne de serveur de noms pour pointer vers votre propre hôte dans /etc/resolv.conf. Par exemple, si votre adresse IP d’hôte de laboratoire est 192.168.0.203, tout comme mon epc, ajoutez la ligne suivante en haut de la liste des serveurs de noms dans /etc/resolv.conf:

name server 192.168.0.203

assurez-vous d’utiliser l’Adresse IP de l’hôte sur lequel vous êtes à ce projet.,

Vous pouvez utiliser l’adresse IP de votre localhost, 127.0.0.1 au lieu de l’adresse IP externe. Vous devez également commenter toutes les lignes pointant vers d’autres hôtes en tant que Serveurs de noms. Assurez-vous de sauvegarder le resolv révisé.fichier conf.

ces modifications prendront effet immédiatement et aucun redémarrage ou redémarrage du service n’est requis. Maintenant, essayez de ping un hôte public commun qui ne bloque pas les paquets ICMP (Internet Control Message Protocol); n’hésitez pas à utiliser mon pare-feu, qui est un Raspberry Pi.,

ping wally2.both.org

Vous devriez obtenir une erreur « unknown host » ou « Name or service not known » car vous n’avez actuellement aucun service DNS ou résolveur fonctionnel défini dans le resolv.fichier conf. Utilisez maintenant la commande dig pour voir si name services fonctionne.

dig wally2.both.com

Vous devriez obtenir l’erreur « la connexion a expiré; aucun serveur n’a pu être atteint. »

configurer un serveur de noms de mise en cache

un serveur de noms de mise en cache n’est une source faisant autorité pour aucun domaine., Il met simplement en cache les résultats de toutes les demandes de résolveur de noms du réseau qu’il sert à accélérer les réponses aux futures demandes pour le même hôte distant.

Note: Le nom.le fichier conf est très particulier sur la syntaxe et surtout la ponctuation. Les points-virgules sont utilisées pour délimiter la fin de l’entrée et de la fin d’une strophe ainsi que la fin d’une ligne. Assurez-vous de les ajouter correctement comme indiqué dans les échantillons.

pour la configuration initiale du serveur de noms de mise en cache en apportant quelques modifications au/etc / named par défaut.le fichier conf est nécessaire, alors éditez ce fichier en utilisant votre éditeur préféré., Tout d’abord, ajoutez l’adresse IP de votre hôte de test local à la ligne « listen-on port 53 », Comme indiqué dans la liste 2 ci-dessous. Cela permet à named d’écouter l’adresse IP externe de votre hôte, afin que d’autres ordinateurs puissent également l’utiliser comme serveur de noms.

par défaut, BIND fait référence aux serveurs de noms racine d’Internet pour localiser les serveurs de noms faisant autorité pour un domaine. Il est possible de spécifier d’autres serveurs appelés « Forwarders » auxquels l’instance locale de BIND enverra des requêtes au lieu des serveurs racine. Cela augmente la possibilité de détournement DNS.,

ajouter une ligne « transitaires » comme indiqué ci-dessous. Cela indique à votre serveur DNS de mise en cache où obtenir les adresses IP lorsqu’elles ne sont pas déjà mises en cache localement. Les adresses IP dans la liste ci-dessous sont pour les serveurs DNS publics de Google, vous pouvez utiliser votre FAI local ou OpenDNS ou un autre serveur de noms public en tant que transitaire. Il n’est pas nécessaire de définir des transitaires et, dans ce cas, BIND utiliserait les serveurs racine Internet tels que définis dans le fichier /var/named/named.ca pour localiser les serveurs de noms faisant autorité pour les domaines si aucun transitaire n’est défini., Mais pour cet exercice, veuillez définir les transitaires comme je l’ai fait dans la liste 2.

commentez la ligne IPV6 car nous n’utilisons pas IPV6 dans l’environnement de laboratoire. Notez que les deux barres obliques « / /  » indiquent les commentaires dans le nommé.fichier conf.

Liste 2: le/etc / nommé.le fichier conf fournit la configuration simple requise pour configurer un serveur de noms de mise en cache. Les lignes qui doivent être ajoutées ou modifiées sont mises en surbrillance en gras.

ajoutez l’adresse réseau locale, 192.168.0.0 / 24, à la ligne allow-query., Cette ligne spécifie le(S) réseau (s) à partir duquel les requêtes DNS seront acceptées par ce serveur DNS.

démarrer le service de nom

maintenant, démarrez le service nommé et configurez le service nommé pour démarrer à chaque démarrage. J’utilise la commande systemctl sur mon hôte Fedora 25, mais la commande peut être différente sur votre hôte, en fonction de la distribution que vous utilisez. Notez que le nom du service de résolveur de liaison est nommé.,

systemctl enable named
systemctl start named

le premier test que vous pouvez effectuer pour vous assurer que votre serveur de noms de mise en cache fonctionne est d’utiliser dig pour localiser les informations de la base de données DNS pour wally2.both.org. pour tester davantage votre serveur de noms de mise en cache, utilisez la commande dig pour obtenir les adresses IP de certains sites Internet courants, tels que www.opensource.com, CNN, Wired, et tous les autres que vous aimez. Les résultats devraient maintenant afficher votre hôte en tant que serveur répondant.,

à ce stade, votre serveur de noms en cache résoudra correctement les hôtes sur Internet, car ces requêtes DNS pour les hôtes publics sont transmises aux serveurs de noms publics de Google—reportez-vous à la ligne « forwarders » dans named.conf. Cependant, vous dépendez toujours du fichier/etc / hosts pour les services de noms internes. La création d’un serveur de noms principal peut résoudre ce problème.

créer un serveur de noms principal

Une fois que vous avez créé un serveur de noms en cache, le convertir en un serveur de noms principal à part entière n’est pas trop difficile., Un serveur de noms principal est la source faisant autorité pour le domaine qu’il représente.

Vous avez besoin de changer de nom.conf à nouveau et créer quelques nouveaux fichiers. Vous allez créer un domaine appelé Example.com, qui est un nom de domaine réservé à des fins d’exemple dans des documents comme celui-ci. Le Example.com domain a une adresse IP sur Internet et un site web très clairsemé, mais vous pouvez utiliser le nom dans le reste de votre projet de laboratoire sans causer de problèmes à personne. Vous utiliserez le Example.com domaine comme nom de domaine interne pour le reste de cet exercice.,

Les Deux nouveaux fichiers que vous allez créer sont les fichiers de zone avant et arrière, que vous allez placer dans le répertoire /var/named. Cet emplacement est spécifié par la directive « répertoire » dans le nom.fichier de configuration conf.

créer le fichier de zone de transfert

le fichier de zone de transfert contient des enregistrements « A » qui couplent les noms des hôtes de la zone, Alias domaine, avec leurs adresses IP respectives. Il peut également contenir des enregistrements CNAME, qui sont des alias pour les noms d’hôte réels dans les enregistrements A, et des enregistrements MX pour les serveurs de messagerie.

créez un fichier de zone de transfert de base,/var/named / example.com.,zone, et ajoutez – y les lignes suivantes. Votre fichier de zone doit ressembler à l’exemple de fichier de zone dans la liste 3, ci-dessous, lorsque vous avez terminé.

; Authoritative data for example.com zone
;
$TTL 1D
@ IN SOA epc.example.com root.epc.example.com. (
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
$ORIGIN example.com.
example.com. IN NS epc.example.com.
epc IN A 127.0.0.1
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
test1 IN A 192.168.25.21
t1 IN CNAME test1
test2 IN A 192.168.25.22
test3 IN A 192.168.25.23
test4 IN A 192.168.25.24
; Mail server MX record
example.com. IN MX 10 mail.example.com.

Liste 3: le fichier de zone avant pour le Example.com domaine contient les noms d’hôtes et leurs adresses IP pour ce domaine.

la première ligne sans commentaire dans la liste 3 est le spécificateur Time to Live, qui dans ce cas est un jour pour tous les enregistrements qui ne sont pas spécifiés autrement. D est synonyme de Journée. Les spécificateurs de la ligne SOA (Start of Authority) sont tout aussi évidents., Détails des paramètres dans l’enregistrement SOA sont décrits en détail ici.

L’enregistrement NS doit avoir le nom de domaine complet (FQDN) de l’hôte sur lequel vous effectuez ce projet de laboratoire. Il doit aussi y avoir Un enregistrement dans le fichier avec une adresse IP valide pour l’hôte. Dans ce cas, vous devez utiliser l’adresse IP localhost 127.0.0.1.

Les entrées ci-dessus vous donneront quelques noms d’hôte avec lesquels expérimenter.

assurez-vous d’utiliser la date d’aujourd’hui et ajoutez un compteur commençant à 01 pour le numéro de série. Le numéro de série ci-dessus est le premier changement du 4 mars 2017., Le numéro de série est incrémenté chaque fois que le fichier de zone est modifié. S’il y avait des serveurs de noms secondaires qui utilisaient celui-ci pour un primaire, ils ne seraient pas mis à jour à moins que le numéro de série ne soit incrémenté.

ajoutez les fichiers de zone de transfert à named.conf

avant que votre serveur DNS fonctionne, cependant, vous devez créer une entrée dans /etc/named.conf qui pointera vers votre nouveau fichier de zone. Ajoutez les lignes suivantes sous l’entrée de la zone d’indices de niveau supérieur, mais avant les lignes « inclure ».

zone "example.com" IN {
type master;
file "example.com.zone";
};

Liste 4: ajoutez ces lignes au nom.fichier conf pour ajouter l’exemple.,fichier de zone com à la configuration du résolveur.

redémarrez maintenant named pour que ces modifications prennent effet. Testez votre serveur de noms à l’aide des commandes dig et nsloookup pour obtenir les adresses IP des hôtes que vous avez configurés dans le fichier forward zone. Notez que l’hôte n’a pas besoin d’exister sur le réseau pour que les commandes dig et nslookup renvoient une adresse IP.

sachez que l’utilisation du nom de domaine complet pour ces commandes est nécessaire sauf pour la commande nslookup tant que les entrées de domaine et de recherche de Example.com sont fournis dans /etc / resolv.fichier conf., Dans ce cas, ils ne le sont probablement pas, alors utilisez simplement les FQDNs pour tous les tests de ce projet.

Utilisation des serveurs de noms racine

notez que les serveurs de noms racine sont donnés comme serveurs faisant autorité pour Amazon.com recherche. Mais rappelez-vous que vous utilisez les serveurs de noms publics Google comme transitaires. Commentez maintenant la ligne des transitaires dans named.conf et redémarrage nommé. Exécutez à nouveau les commandes ci-dessus pour comparer les résultats renvoyés. Les résultats devraient ressembler à ceux ci-dessous dans la liste 5.

Liste 5: Les résultats d’une recherche sur www.Amazon.,com ont quelques informations intéressantes, y compris les temps à vivre pour les différents types d’enregistrement.

lorsque j’ai fait cela, le premier appel pour résoudre L’adresse externe D’Amazon a pris 3857 ms pendant que les données étaient localisées et renvoyées. Les résultats suivants pour effectuer la même requête étaient 1ms, ce qui montre l’avantage de mettre en cache les résultats du résolveur localement. Notez les nombres 1800, 300, et 60 dans les lignes de section de réponse et 1831 dans les lignes de section d’autorité—ce sont TTL (périodes pour vivre) en secondes., Si vous effectuez la recherche plusieurs fois, ces chiffres changeront, indiquant le temps qu’il reste aux enregistrements à vivre dans le cache local.

Création du fichier de zone inversée

Une zone inversée pour votre domaine vous permettra de faire des recherches inversées. De nombreuses organisations ne le font pas en interne, mais les recherches inversées peuvent être utiles pour déterminer les problèmes. De nombreuses configurations de lutte contre le spam, telles que SpamAssassin, recherchent des recherches inversées pour vérifier les serveurs de messagerie valides.

créez le fichier de zone inverse,/var/named / example.com.rev et ajoutez le contenu suivant., Assurez-vous d’utiliser un numéro de série.

; Authoritative data for example.com reverse zone
;
$TTL 1D
@ IN SOA test1.example.com root.test1.example.com. (
2017031501 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS epc.example.com.
example.com. IN NS epc.example.com.
1 IN PTR mail.example.com.
1 IN PTR server.example.com.
21 IN PTR test1.example.com.
22 IN PTR test2.example.com.
23 IN PTR test3.example.com.
24 IN PTR test4.example.com.

Liste 6: Utilisez ce fichier de zone inverse, example.com.rev, pour votre serveur de noms.

Vous pouvez également nommer votre fichier de zone inverse /var/named/25.168.192.in-addr.arpa, qui suit les anciennes conventions. Vous pouvez réellement le nommer tout ce que vous voulez parce que vous le pointerez explicitement dans le nommé.fichier conf, mais en utilisant l’une des deux conventions, il sera plus facile pour les autres de suivre votre travail.

ajoutez la zone inverse à named.conf:

zone "25.168.192.in-addr.arpa" IN {
type master;
file "example.com.rev";
};

Liste 7: Ajout de cette strophe au nom.,fichier conf permet des recherches inversées.

ajoutez la strophe de la liste 7 au/etc / named.fichier conf pour pointer vers la nouvelle zone inverse. Rechargez maintenant named et testez votre zone inverse en utilisant les commandes de la liste 8. Vos résultats devraient ressembler à ceux ci-dessous.

Liste 8: Après avoir redémarré named, vous devriez voir des résultats similaires à ceux-ci lorsque vous effectuez une recherche inverse sur une adresse IP dans la zone inverse.

assurez-vous de tester certaines des autres entrées inverses de votre réseau et essayez également ce qui suit ainsi que d’autres recherches inverses que vous souhaitez expérimenter., L’option-x signifie la recherche inverse.

dig -x 192.168.25.23
dig -x 192.168.25.1

notez que tous les hôtes qui ont des entrées dans la zone avant n’ont pas besoin d’avoir des entrées dans la zone arrière, mais cela permet d’obtenir des résultats plus cohérents s’ils le font.

à ce stade, vous avez un serveur de noms de travail utilisant BIND. Cependant, les hôtes externes ne peuvent pas encore utiliser ce serveur de noms car le pare-feu ne doit pas encore être configuré pour autoriser les requêtes DNS.

configuration D’IPTables pour DNS

Vous pouvez effectuer cette étape si vous souhaitez que d’autres hôtes de votre réseau local utilisent votre hôte comme serveur de noms.,

le pare-feu de votre hôte de test bloque probablement l’accès à votre hôte pour les services de noms. IPTables doit être configuré pour autoriser les paquets UDP (User Datagram Protocol) entrants sur votre serveur de noms afin que d’autres hôtes puissent l’utiliser pour la résolution de noms. Utilisez les commandes suivantes pour ajouter les entrées requises et les enregistrer.

ajoutez une règle à votre pare-feu IPTables ou firewalld qui autorise les paquets entrants sur le port 53 (domaine) pour UDP et enregistrez le nouvel ensemble de règles., Assurez-vous d’insérer la nouvelle règle après la ligne-A INPUT-m state RELATED State RELATED,ESTABLISHED-j ACCEPT, vous devrez donc compter le nombre de lignes D’entrée dans la table de filtres pour le faire. Le numéro 7 de la commande suivante signifie que cette règle sera insérée à la position numéro 7 dans les règles d’entrée existantes.

iptables -t filter -I INPUT 7 -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

Vous pouvez enregistrer vos nouvelles règles de pare-feu si vous le souhaitez, et vous le feriez si cela devait être une installation permanente et non un projet de laboratoire. Testez ensuite cela à partir de l’un de vos autres hôtes à l’aide de la commande dans la liste 9, ci-dessous., L’argument @ epc indique à la commande dig d’utiliser le serveur de noms spécifié avec le nom d’hôte epc. Vous devez remplacer soit l’adresse IP du serveur DNS que vous venez de créer, soit un nom d’hôte résoluble sur votre réseau qui pointe vers votre nouveau serveur de noms. Bien sûr, vous pouvez toujours ajouter ce nom d’hôte avec son adresse IP au fichier /etc/hosts de l’hôte que vous utilisez pour le test à distance.

liste 9: Test du résolveur de noms que vous avez créé à partir d’un hôte différent sur le même réseau.,

Nettoyage

Pour le nettoyage, vous devez effectuer les tâches suivantes à l’aide des outils appropriés pour votre distribution. Vous pouvez simplement conserver ce serveur de noms pour votre réseau si vous n’en avez pas déjà un.

  1. restaure le fichier/etc / hosts d’origine.
  2. arrêt nommé sur l’hôte résolveur utilisé pour ce projet de laboratoire.
  3. désactiver le service nommé.
  4. Supprimer les fichiers de zone.
  5. Restaurer l’original nommé.fichier conf.
  6. restaure le resolv d’origine.fichier conf.,

réflexions finales

le fonctionnement des services de noms me semblait très obscur jusqu’à ce que je crée un serveur de noms pour mon réseau en utilisant BIND. C’est assez simple et peut améliorer les performances de recherche DNS. Avoir votre propre serveur de noms peut également empêcher de nombreuses interruptions de service de noms relativement mineures mais ennuyeuses causées par des serveurs de noms de FAI mal entretenus.

notez que, même si mon petit EeePC fonctionne avec 100% D’utilisation du processeur pour Seti@Home, il répond extrêmement rapidement aux demandes de résolveur., Vous devriez pouvoir essayer ce projet sur n’importe quel hôte Linux dont vous disposez avec un impact minuscule. J’espère que beaucoup d’entre vous essaieront de configurer votre propre serveur de noms et de l’expérimenter. Les spécificités de votre nom de serveur d’installation dépendra des détails de votre hôte et réseau.