Utiliser le serveur DNS du serveur pour régler les problèmes de hairpinning

Bonjour,

Bien que n’ayant plus de problème de hairpinning, la bbox gérant parfaitement le nat loopback, j’ai décidé de blinder ma configuration afin d’éviter de futur problèmes en cas de changement de FAI.
Par la même occasion, j’aimerais qu’on parviennent à mettre au point une méthode plus ou moins universelle pour régler définitivement ce problème par quelques manipulations simple sur la box.
Car c’est à mon avis un point bloquant pour nombre d’utilisateurs.

Ma configuration est plus avantageuse qu’une simple box, puisque je dispose d’un routeur en cascade derrière la box. Ce qui explique la relative simplicité de la méthode (l’absence de dhcp).
Cette méthode est directement tirée de celle-ci:
https://www.sheldon.fr/2014/10/la-livebox-et-son-loopback-go-fuck/


Tout d’abord il convient de désactiver bind9 pour éviter un conflit.

sudo service bind9 stop
sudo update-rc.d -f bind9 remove

Ensuite, on installe dnsmask pour remplacer bind9.

sudo apt-get install dnsmasq

Et on modifie la configuration par défaut de dnsmasq (/etc/dnsmasq.conf) comme suit :

[...]
domain-needed
// Évite de répondre à des requêtes pour des hostnames sans . et donc sans domaine. En particulier les noms de machines sur le réseau.
[...]
bogus-priv
//Nécessaire pour résoudre les adresses locales.
[...]
strict-order
//Parce qu'on veut qu'il interroge d'abord le fichier host qui lui donnera une adresse locale avant d'interroger un DNS distant.
[...]
interface=eth0
//Restreint l'écoute du serveur à l'interface réseau utilisée. (Nécessaire pour le filtrage par IP qui suit)
[...]
listen-address=127.0.0.1
listen-address=192.168.1.1
//Écoute uniquement localhost et l'adresse du routeur/box
[...]
domain=domain.tld
//Option qui semble nécessaire sans que je puisse l'expliquer...
[...]
cache-size=500
//Cache de 500 noms.
[...]
log-queries
log-facility=/var/log/dnsmasq.log
//Log des requêtes dns. Pourrait être retiré pour plus de discrétion. Mais est très utile au début pour s'assurer du bon fonctionnement du DNS.

Modification du fichier /etc/resolv.conf pour paramétrer le DNS à exploiter.

#Mon domaine
domain domain.tld
search domain.tld

#DNS
#En premier il s’interroge lui même afin de vérifier si il a la requête en cache
nameserver 127.0.0.1
#Si il ne la connaît pas, il interroge les DNS OpenDNS
nameserver 208.67.222.222
nameserver 208.67.220.220

Modification de /etc/hosts pour ajouter l’adresse du serveur.

192.168.1.X    domain.tld    domain
192.168.1.X    www.domain.tld    domain

L’adresse est évidemment à remplacer par l’adresse locale du serveur.

On termine en redémarrant dnsmasq pour en prendre en compte sa configuration.

sudo service dnsmasq restart

Enfin, il faut configurer la box/routeur pour qu’elle utilise le serveur DNS mis en place sur le serveur.
On indiquera donc en DNS primaire le serveur, 192.168.1.X et en DNS secondaire le DNS du FAI ou un DNS alternatif.
J’ai choisi 208.67.222.222 pour les DNS d’Open DNS.

A présent toutes les requêtes vers le nom de domaine depuis le réseau local passeront par le serveur qui renverra son adresse locale. Ainsi, plus de problème de paquet entrant sortant.


C’est une solution qui fonctionne parfaitement pour moi. En particulier pour les domaines de test de mes machines virtuelles qui ne sont pas référencées par les DNS. Et le log indique également que mon nom de domaine est résolu en local et ne sort plus pour revenir en NAT loopback.

Toutefois, cette solution implique de pouvoir modifier les DNS utilisés par la box. Ce n’est pas possible sur une bbox, ni non plus sur une box SFR.
Il semble donc nécessaire dans ce cas de substituer le serveur DHCP de la box pour pouvoir indiquer un serveur DNS.
Cela implique toutefois la perte du décodeur TV le cas échéant.
La solution serait alors de garder le DHCP de la box et de le limiter à une seule adresse, réservée par le décodeur TV.

Ce sont là des solutions que je ne peux pas tester avec ma configuration. Ma box servant essentiellement de modem.

Je trouve intéressant de partager sur nos diverses expériences dans l’espoir de pouvoir indiquer simplement à l’avenir un moyen simple de configurer les différentes box pour gérer nos noms de domaines en local.

Excellent How-To !

Je tiens à préciser néanmoins que nous utilisons dorénavant DNSmasq, donc hélas ce tuto ne sera plus à jour pour toutes les nouvelles installations.

L’effort reste apprécié, merci !

Oui j’ai vu le post précédent où tu annonçais un changement pour dnsmasq, et l’annonce de mise à jour incluant dnsmasq.

Toutefois, c’est avant tout un post pour discuter d’une solution pérenne au problème de hairpinning. Mais peut-être que j’arrive après la guerre.
Je n’ai pas encore fait la mise à jour, donc je ne sais pas comment est utilisé dnsmasq par Yunohost à présent.

Je regarde en ce moment du côté des serveurs DNS plus respectueux de la vie privée. (Ce qui exclue donc OpenDNS…). Je vais me pencher sur OpenNIC, IDONS et dot-p2p