Outils pour utilisateurs

Outils du site


issue105:c_c

After the Christmas holidays, it’s usually time for me to take stock of my work equipment (computers and servers), and see what I can do while I’m still on holidays to make life simpler. This time around, I wanted to configure an internal Bind9 DNS server, so I can use internal domains for accessing servers, virtual machines, NAS, other computers, and so forth. Since my test area is Ubuntu 15.10 on Vagrant, I’ll cover all the steps (including the steps for Vagrant). Step 0: Configure Vagrant box If you’re setting up Bind DNS on a standalone device, or on a virtual machine that is already configured, you can skip this step. Personally, I think Vagrant is a wonderful way to test configurations, but I will be migrating the Bind9 DNS server to an Intel NUC, once the new skylake models are available. vagrant box add ubuntu/wily64 This command adds the official Wily Werewolf 64-bit Vagrant Box to your system. You can skip this and go straight to the init, but I prefer to have local copies of certain base boxes, as I spin up a lot of vagrant boxes. vagrant init ubuntu/wily64 This will initiate a Vagrantfile that uses the ubuntu/wily64 box from above. If you haven’t added the box using the box add command, it should work anyway (as this is an official image). If not, you may need to supply the URL (see the Further Reading section for a link to the webpage).

Après les vacances de Noël, c'est habituellement le moment pour moi de faire le bilan de mon équipement de travail (ordinateurs et serveurs) et voir ce que je peux faire pour me faciliter la vie pendant que je suis encore en vacances. Cette fois-ci, je voulais configurer un serveur DNS interne Bind9 de façon à utiliser des domaines internes pour accéder aux serveurs, machines virtuelles, NAS, autres ordinateurs et plus. Parce que ma zone de test est Ubuntu 15.10 sur Vagrant, je couvrirai toutes les étapes (y compris les étapes pour Vagrant).

Étape 0 : Configurer la boîte Vagrant

Si vous installez un DNS Bind sur une machine isolée, ou sur une machine virtuelle qui est déjà configurée, vous pouvez passer cette étape. Personnellement, je pense que Vagrant est un moyen formidable de tester des configurations, mais je migrerai le serveur DNS Bind9 sur Intel NUC une fois que les modèles Skylake seront disponibles.

vagrant box add ubuntu/wily64

Cette commande ajoute la boîte officielle Vagrant Wily Werewolf 64-bit à votre système. Vous pouvez sauter ceci et aller directement à l'initialisation, mais je préfère avoir des copies locales de certaines boîtes de base, car je fais tourner beaucoup de boîtes Vagrant.

vagrant init ubuntu/wily64

Ceci initialisera une Vagrantfile qui utilise la Boîte Vagrant du dessus. Si vous n'avez pas ajouté la boîte en utilisant la commande box add, cela devrait marcher quand même (car c'est une image officielle). Sinon, vous devez au besoin fournir l'URL (voir la rubrique Pour aller plus loin pour un lien vers la page Web).

You’ll also want to set up a private network IP (if you plan to actually use the DNS). To do so, edit the Vagrantfile, and edit the line that reads ‘config.vm.network “private_network”’. The IP can be pretty much anything you’d like (provided it isn’t already in use). If you’re going to use the DNS outside the host computer, you’ll need to instead set up a public_network. Since this is a VM, I stuck with a host-only network, as, if my computer isn’t running, neither is the VM (nor do I need to have access to the test DNS from anywhere else). Lastly, you’ll want to start the Vagrant box with: vagrant up Step 1: Installing I recommend installing 3 packages - bind9, bind9-docs, and dnsutils. Bind9 and the -docs package are important, as they will be the actual DNS server. Dnsutils contains a bunch of useful tools for debugging DNS. Step 2: Basic Configuration Open/edit the correct file using the following command: sudo vim /etc/bind/named.conf.options If you’d prefer to use something like emacs or nano, substitute vim for that. If you’re doing this in a graphical environment, you’re welcome to use anything you prefer. If working in Vagrant, you’ll be limited to CLI. I’ll also be referring to line numbers. If your vim isn’t displaying the numbers, you can toggle them with the command “:set number”.

Vous voudrez aussi configurer le réseau privé sur IP (si vous projetez effectivement d'utiliser le DNS). Pour faire cela, éditez la Vagrantfile et modifiez la ligne où vous lisez « config.vm.network “private_network” ». L'IP peut être à peu près tout ce que vous voulez (si elle n'est pas déjà utilisée). Si vous devez utiliser le DNS à l'extérieur de l'ordinateur hôte, vous aurez besoin de configurer un réseau public (public_network) à la place. Comme c'est une VM, je suis resté avec le réseau de l'hôte, car, si mon ordinateur ne tourne pas, la VM ne tourne pas non plus (et je n'ai pas besoin d'accéder au DNS de test de n'importe où).

Enfin, vous démarrerez la boîte Vagrant avec :

vagrant up

Étape 1 : Installation

Je recommande d'installer 3 paquets : bind9, bind9-docs et dnsutils. Les paquets bind9 et bind9-docs sont importants car ils seront le vrai serveur DNS. Dnsutils contient un jeu d'outils utiles pour déboguer le DNS.

Étape 2 : Configuration de base

Ouvrez/éditez le bon fichier en utilisant la commande suivante :

sudo vim /etc/bind/named.conf.options

Si vous préférez utiliser quelque chose comme emacs ou nano, remplacez vim par cela. Si vous travaillez dans un environnement graphique, vous êtes libre de choisir autre chose selon vos préférences. Si vous travaillez dans Vagrant, vous serez limité à la CLI. Je me référerai aussi aux numéros de ligne. Si votre vim n'affiche pas les numéros, vous pouvez le faire par la commande « :set number ».

Step 2a: Forwarders Since we’re focusing on internal connections, any outside IPs (which will be requested from this server as well) can be safely called from existing DNS. This is what Bind9 calls “forwarders” - they are essentially the IP addresses of the DNS that should be checked, if the domain isn’t contained in the local copy. I’d recommend using the Google DNS, but if you want to use your ISP’s, you simply need to know the IPs of them. Find lines 13-15 (that starts with // forwarders {), and make it look like this: forwarders { 8.8.8.8; 8.8.4.4; }; The big change here is replacing line 0.0.0.0; with 8.8.8.8; and 8.8.4.4; (the IPs for Google’s DNS). Also, make sure you uncomment the entire block. If you’re using vim, use a quick ‘Esc’ (to leave edit mode), and then save and quit with: :wq Step 2b: Setting up zones You’ll need to open a new configuration file: sudo vim /etc/bind/named.conf.local

Étape 2a : Les forwarders (réacheminement)

Comme nous sommes focalisés sur les connexions internes, toute IP externe (qui peut aussi être demandée depuis ce serveur) peut être appelée en toute sécurité depuis les DNS existants. C'est ce que Bind9 appelle des « forwarders » - ce sont principalement les adresses IP du DNS qui devraient être vérifiées, si le domaine n'est pas contenu dans une copie locale. Je recommanderai d'utiliser le DNS Google, mais si voulez utiliser votre ISP (fournisseur d'accès Internet), vous avez juste besoin de connaître son IP.

Trouvez les lignes 13-15 (qui commencent par // forwarders {), et assurez-vous qu'elles ressemblent à ceci :

forwarders {

  8.8.8.8;
  8.8.4.4;

};

Ici, la modification importante est de remplacer 0.0.0.0; par 8.8.8.8; et 8.8.4.4; (les IP du DNS de Google). Assurez-vous aussi de décommenter tout le bloc. Si vous utilisez vim, utilisez « echap » (pour quitter le mode d'édition), puis sauvez et quittez avec :wq.

Étape 2b : installer les zones

Vous aurez besoin d'ouvrir un nouveau fichier de configuration :

sudo vim /etc/bind/named.conf.local

This file should be largely empty (on a fresh install, at least). Before we can make any edits, we need to know what our IP address is. Typically, it’s something like 192.168.0.X, or 192.168.1.X (for internal networks). To find out what your IP address is, you can run the command ‘ip addr‘. If you’re running Vagrant, you’ll have a few different interfaces - find the one that uses the private or public network IP you added to the Vagrantfile. If you’re at a physical computer with multiple internet connections, I’ll have to assume you know which IP to use. It’s important to note only the first 3 sections of the IP (so ignore the last number). Also, select a local domain you’d like to configure. I selected lswest.local, simply because it won’t interfere with existing domains (if you use google.com, for example, you will not be able to reach the google homepage). Now, in the named.conf.local file, you’ll need to add the lines shown top right. The section that reads “in-addr.arpa” is required for a DNS IPv4 reverse lookup. For more information, see the wikipedia link in Further Reading. Type indicates whether the DNS is a master (primary), or a slave (secondary). While this is a complicated distinction to fully understand, for the time being it’s safe to assume any local Bind9 DNS zone will be a master. The ‘notify no;’ on the internal IP indicates whether or not zone notifications are to be sent to slaves when changes occur. As this is a master without slaves, it’s not technically necessary. However, since this is for all IP addresses in the network, it’s useful to include (to avoid issues down the line).

Ce fichier devrait être presque vide (au moins sur une nouvelle installation). Avant que vous ne puissiez faire une quelconque modification, vous devez connaître quelle est votre adresse IP. En général, c'est quelque chose comme 192.168.0.X ou 192.168.1.X (pour des réseaux internes). Pour trouver votre adresse IP, vous pouvez taper la commande « ip addr ». Si vous faites tourner Vagrant, vous aurez quelques interfaces différentes - trouvez celle qui utilise l'IP du réseau privé ou public que vous avez ajouté à la Vagrantfile. Si vous êtes sur un ordinateur physique avec des connexions Internet multiples, je dois supposer que vous connaissez quelle IP utiliser. C'est seulement important de noter les 3 premières sections de l'IP (ignorez donc le dernier nombre).

Sélectionnez aussi le domaine local que vous aimeriez configurer. J'ai choisi lswest.local, simplement parce qu'il n'interférera pas avec les domaines existants (si vous utilisez google.com, par exemple, vous ne pourrez pas atteindre la page d'accueil Google).

Maintenant, dans le fichier named.conf.local, vous aurez besoin d'ajouter les lignes présentées en haut à droite.

La section où vous lisez « in-addr.arpa » est impérative pour une résolution DNS inverse en IPv4. Pour plus d'information, regardez le lien Wikipedia dans la rubrique Pour aller plus loin. Le type indique si le DNS est un maître (primary) ou un esclave (secondary). C'est une distinction compliquée et difficilement compréhensible, mais, pour le moment, vous pouvez décider que n'importe quelle zone DNS de Bind9 sera un maître. Le « notify no; » sur l'adresse IP interne indique si les notifications de zone seront envoyées ou non aux esclaves, lors de modifications. Comme c'est un maître sans esclaves, ce n'est pas techniquement une nécessité. Cependant, comme c'est pour toutes les adresses IP du réseau, il est utile de l'inclure (pour éviter des problèmes par la suite).

Now we need to create the db files we refer to in the file. To start with, I’ll focus on the local domain. sudo cp /etc/bind/db.local /etc/bind/db.lswest.local Now we’ll need to open and edit the file: sudo vim /etc/bind/db.lswest.local The file should look like the following: The changes we’ll need to make: • In line 5, we’ll need to change localhost. to domain. (a fully qualified domain name - fqdn) So, since the domain is lswest.local, the line will read “lswest.local.”. Make absolutely sure there is a trailing period. • Also in line 5, we’ll need to edit “root.localhost.” This is actually an email address (but without an @). It isn’t terribly important what you put here, but I’d recommend at least using your username. So root.localhost. becomes “vagrant.localhost.”. • You’ll need to also edit line 12 to be the domain name you chose in 1. So we would edit this to read “lswest.local.”

Maintenant, nous devons créer les fichiers db auxquels nous faisons référence dans le fichier. Pour commencer, je me concentrerai sur le domaine local :

sudo cp /etc/bind/db.local /etc/bind/db.lswest.local

Maintenant, nous devons ouvrir et modifier le fichier :

sudo vim /etc/bind/db.lswest.local

Le fichier devrait ressembler à ceci :

Les modifications que nous devons faire :

• À la ligne 5, nous devons changer localhost. en domain. (un nom de domaine pleinement qualifié - fqdn - fully qualified domain name). Aussi, comme le domaine est lswest.local, la ligne sera lue « lswest.local. ». Assurez-vous absolument qu'il y a un point final. • Également à la ligne 5, nous devons modifier « root.localhost. » C'est en fait une adresse mail (mais sans le @). Ce que vous mettez ici n'est pas très important, mais je recommande au moins d'utiliser votre nom d'utilisateur. Ainsi, root.localhost. devient « vagrant.localhost. ». • Vous devrez modifier la ligne 12 pour y mettre le nom de domaine choisi en 1. Ainsi, vous la modifierez en « lswest.local. ».

Subdomains Now is the time to actually create subdomains. I’m going to focus only on A records, and possible CNAME (canonical name) entries. MX Records are also common, but I don’t know how often you’ll want to really configure MX records in a local network. If you do, the process is the same. I’m going to create 2 subdomains - nas (fqdn: nas.lswest.local), and web (fqdn: web.lswest.local). One will point to the physical NAS I have in the network, and the other will point to the vagrant box I use for web development. I’ll also set up a CNAME entry - vagrant, which I’ll point at the web subdomain. The file will then look like the text shown top right (from line 16 onwards). The lines that start with a semi-colon are comments, and serve to just make the file more readable. As you can see, you point the CNAME to the fqdn of another server. As you can probably figure, this is because CNAMEs are simply aliases.

Sous-domaines

Le moment est venu de créer les sous-domaines. Je ne vais me concentrer que sur les enregistrements A (Address), et les possibles entrées CNAME (nom canonique). Les enregistrements MX (Mail eXchanger) sont communs aussi, mais je ne sais pas combien de fois vous voudrez vraiment configurer des enregistrements MX dans un réseau local. Si vous devez le faire, suivez le même processus.

Je vais créer 2 sous-domaines - nas (fqdn : nas.lswest.local) et web (fqdn : web.lswest.local). L'un pointera sur le NAS physique que j'ai sur le réseau, et l'autre pointera sur la boîte Vagrant que j'utilise pour le développement Web.

Je vais installer aussi une entrée CNAME - vagrant, qui pointera vers le sous-domaine web.

Le fichier ressemblera ensuite au texte montré en haut à droite (ligne 16 et suivantes).

Les lignes qui commencent avec un point-virgule sont des commentaires, et ne servent qu'à rendre le fichier plus lisible. Comme vous pouvez le voir, vous faites pointer le CNAME vers le fqdn d'un autre serveur. Comme vous pouvez probablement le deviner, c'est parce que les CNAME sont des alias.

Step 3: Reverse Lookup This step is optional. If you’re not planning to do reverse DNS checks on IPs (to find domains), you can skip this. However, it’s good practice, and may come in useful. First, we must copy the default db.127 file: sudo cp /etc/bind/db.127 /etc/bind/db.192 Once done, open the file. It will look similar to the db.lswest.local file from above. We need to make the following changes: Line 5: change “localhost.” to the fqdn from earlier. Line 5: Change root.localhost to the email you used earlier. Line 12: change “localhost.” to the fqdn from earlier. Delete line 13 (the pointer). We’ll be replacing this entirely later. We now need to add the entries. After line 12 (the NS line), add the following line: 4 IN PTR nas.lswest.local.

Étape 3 : résolution inverse

Cette étape est optionnelle. Si ne prévoyez pas des vérifications inverses de DNS sur des IP (pour trouver des domaines), vous pouvez la sauter. Cependant, c'est une bonne pratique, qui peut être utile.

D'abord, vous devez copier le fichier par défaut db.127 :

sudo cp /etc/bind/db.127 /etc/bind/db.192

Une fois fait, ouvrez le fichier. Il ressemblera au fichier db.lswest.local ci-dessus. Nous devons faire les modifications suivantes :

Ligne 5 : remplacer “localhost.” par le fqdn vu avant. Ligne 5 : remplacer root.localhost par l'adresse mail que vous avez utilisé avant. Ligne 12 : remplacer “localhost.” par le fqdn vu avant. Effacez ligne 13 (le pointeur). Nous la remplacerons complètement plus tard.

Maintenant, nous devons ajouter les entrées. Après la ligne 12 (la ligne NS), ajoutez la ligne suivante :

4 IN PTR nas.lswest.local.

The 4 is the last number of the IP address from db.lswest.local. Since this is a reverse lookup for 192.168.0, we need only the last digit. It is also why I left out the web value, as the IP is 192.168.33.10 - if I wanted to reverse lookup this, I’d need to set up a zone for 192.168.33. However, as my Vagrant installs don’t generally survive long, I don’t find the effort necessary. The CNAME doesn’t get a pointer, as it’s not assigned to an IP. Save and close the file (:wq in vim). Step 4: Run server, and connect It’s now time to start the Bind9 server. To do so, run the following: sudo service bind9 start Now you need to enter the DNS on the machine you want to use it from, this could be done in the network manager in Ubuntu, or wherever you may configure a DNS on the OS of choice. Use the IP for the server we configured earlier.

Le 4 est le dernier nombre de l'adresse IP de db.lswest.local. Comme c'est une résolution inverse pour 192.168.0, nous n'avons besoin que du dernier digit. C'est aussi pourquoi j'ai omis la valeur Web, car l'IP est 192.168.33.10, si je voulais une résolution inverse de ça, j'aurai pu paramétrer une zone pour 192.168.33. Cependant, comme mon installation Vagrant ne survit en général pas très longtemps, je ne trouve pas cet effort nécessaire. Le CNAME n'obtient pas de pointeur, car il n'est pas assigné à une IP.

Sauvez et fermez le fichier (:wq dans vim).

Étape 4 : démarrer le serveur et se connecter

C'est le moment de démarrer le serveur Bind9. Pour ce faire, lancez la commande suivante :

sudo service bind9 start

Ici, vous avez besoin d'entrer le DNS sur la machine à partir de laquelle vous voulez l'utiliser ; ceci peut être fait dans le gestionnaire de réseau d'Ubuntu, ou quelque part où vous pouvez configurer un DNS dans l'OS de votre choix.

Utilisez l'IP pour le serveur que vous avez configuré précédemment.

Step 5: Testing Once your DNS is configured, you should be able to connect to one of your servers using the domain name. If your browser initiates a search instead of pulling up the webpage, make sure you manually add http:// before the domain. If the domain doesn’t resolve properly, you can check it using dig. The command for that looks something like this: dig nas.lswest.local @192.168.15.3 The @ indicates the DNS to check. If you’ve already changed your DNS IP, it shouldn’t be necessary. If, however, you’re not getting the results you expect, it may be useful.

Étape 5 : le test

Une fois que votre DNS est configuré, vous devriez pouvoir vous connecter à l'un de vos serveurs en utilisant le nom de domaine. Si votre navigateur commence une recherche plutôt que de vous afficher la page Web, assurez-vous que vous avez ajouté manuellement http:// avant le domaine.

Si le domaine ne se resout pas correctement, vous pouvez le vérifier avec dig. La commande pour cela ressemble à quelque chose comme :

dig nas.lswest.local @192.168.15.3

L'@ indique le DNS à vérifier. Si vous avez déjà changé l'IP du DNS, cela ne devrait pas être nécessaire. Si, cependant, vous n'obtenez pas le résultat escompté, ça peut être utile.

Step 6: Logging If you run into issues, you’ll want to enable logging. AppArmor technically has a rule for bind9 already, but the folder in /var/log doesn’t exist. You’ll want to do the following: sudo mkdir /var/log/named/ sudo chown bind:root /var/log/named/ sudo chmod -R 775 /var/log/named/ That should result in a log file (once the service was restarted). If not, you’ll want to check the third link in the Further Reading section. I hope this article is interesting for anyone who may, like me, be a web developer (or just simply run a lot of devices on their internal network). If you enjoyed the article, and have any questions, issues, or suggestions, feel free to reach out to me at lswest34+fcm@gmail.com. Further Reading https://atlas.hashicorp.com/ubuntu/boxes/wily64 - URL to the Wily64 box. https://en.wikipedia.org/wiki/Reverse_DNS_lookup - Reverse Lookup wikipedia article. http://askubuntu.com/a/469867 - Permission errors with Bind9

Étape 6 : enregistrement

Si vous tombez sur des problèmes, vous voudrez pouvoir les enregistrer. Techniquement, AppArmor a déjà une règle pour bind9, mais le dossier dans /var/log n'existe pas. Vous pourrez faire comme suit :

sudo mkdir /var/log/named/

sudo chown bind:root /var/log/named/

sudo chmod -R 775 /var/log/named/

Il devrait en résulter un fichier d'enregistrement (une fois le service redémarré). Sinon, vous pourrez vérifier le troisième lien dans la section Pour aller plus loin.

J'espère que cet article intéresse toute personne qui peut, comme moi, être un développeur Web (ou qui fait tourner beaucoup d'appareils sur son réseau interne). Si vous avez apprécié cet article, et avez quelques questions, problèmes ou suggestions, n'hésitez pas à me joindre à lswest34+fcm@gmail.com.

Pour aller plus loin

https://atlas.hashicorp.com/ubuntu/boxes/wily64 - URL vers la boîte Wily64.

https://en.wikipedia.org/wiki/Reverse_DNS_lookup - Article Wikipedia sur la résolution inverse.

http://askubuntu.com/a/469867 - Erreurs de permission avec Bind9.

issue105/c_c.txt · Dernière modification : 2016/02/09 15:15 de andre_domenech