Sommaire
Préambule rapide
Commençons par faire tomber un mythe : le fichier /etc/resolv.conf
ne vous sauvera pas à lui tout seul. Il n’est pas possible sous Linux de spécifier un numéro de port dans une entrée nameserver
de ce fichier. Ne perdez donc aucun temps à fouiller les tréfonds du net, aucun salut de ce côté là.
D’autre part, la solution de changer le port par défaut de l’interface DNS de Consul pour le port 53 est disqualifiée d’office. Mes convictions profondes m’interdisent de faire tourner un projet comme Consul en utilisateur root juste pour le caler sur le bon port.
Maîtriser la chaîne de résolution
À partir du moment où vous vous penchez sur la chaîne de résolution d’un serveur, c’est que vous avez des besoins sortant du standard simple de ce qui vous est fourni par DHCP (Captain Obvious, pour vous servir). Dans ce cas, il est important de considérer de déporter la configuration de cette partie du système dans un outil dédié à cela : un DNS Resolver.
La solution est donc bien d’avoir une entrée nameserver 127.0.0.1
dans votre fichier /etc/resolv.conf
, mais le service qui tournera sur le port 53 sera un service dédié, qui vous offrira plus de souplesse de configuration.
Quand on parle DNS dans le monde Linux, la réponse qui vient le plus souvent est Bind. La résolution DNS fait effectivement partie de ses fonctionnalités, mais aujourd’hui nous allons en voir un autre : Unbound. C’est un DNS Resolver uniquement et vous allez voir dans quelle mesure il va nous faciliter la vie.
Installation
Nous n’allons pas nous attarder là-dessus, dans la mesure où Unbound est présent dans la plupart des paquets systèmes pour les distributions Linux majeures. Un petit coup de yum install unbound
ou de apt-get install unbound
vous suffira dans la majorité des cas.
Si vous maîtrisez vos configurations réseaux en statique, ajouter un DNS Resolver écoutant uniquement sur loopback ne devrait pas être un défi. Si vous êtes adossé à un service de DHCP, il vous faudra aller modifier la configuration de votre dhclient pour y ajouter votre serveur local.
L’astuce est simplement d’ajouter :
prepend domain-name-servers 127.0.0.1;
De cette façon, vous êtes assurés que votre modification sera reboot-proof.
Unbound et stub-zone
Dans Unbound, les stub-zones permettent de configurer un serveur d’autorité spécifique à consulter pour les résolutions d’une zone DNS. Dans notre cas, toutes les résolutions de noms d’hôte dans la zone consul
doivent être déléguées à notre agent Consul local.
/etc/unbound/conf.d/local-consul.conf
server:
interface: 127.0.0.1
logfile: /var/log/unbound/unbound.log
verbosity: 1
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
hide-identity: yes
hide-version: yes
harden-glue: yes
use-caps-for-id: yes
# Autorise Unbound à consulter un serveur local
do-not-query-localhost: no
# Consul ne supporte pas DNSSEC
domain-insecure: "consul"
stub-zone:
name: "consul"
stub-addr: "127.0.0.1@8600"
Conclusion
Une fois cette configuration en place, votre agent Consul à l’écoute sur son port standard et votre entrée dans le resolv.conf présente, vous pourrez profiter pleinement de l’interface DNS de Consul, sans avoir plus de ports à préciser que cela :
ping graylog.service.consul
Have fun. Hack in peace.