Ce tuto est valable pour Ubuntu et ses dérivés. Il fonctionne sans soucis sur Linux Mint 17 (Et 18).

Le serveur DNS, c’est ce qui permet de relier le nom d’un site (lehollandaisvolant.net) à un serveur ailleurs sur le net (5.39.16.10 pour ce site).

En général, vous utilisez les DNS de votre opérateur, mais ceux-ci vont devenir malsain au fur et à mesure que les gouvernements vont leur demande de bloquer des sites dérangeant.
Vous pouvez utiliser les serveurs DNS alternatifs, comme ceux de Google ou d’OpenDNS, mais ces serveurs DNS subiront le même problème que ceux des opérateurs, en plus de constituer un problème manifeste pour la vie privée.

Sachez qu’il est possible d’installer un serveur DNS directement sur votre ordinateur : quand vous voudrez vous connecter à un site, votre ordinateur contactera lui-même les serveurs DNS racine, sans passer par un serveur DNS intermédiaire.
Dans mon cas, la navigation est également devenu sensiblement plus rapide.

Sous Ubuntu et ses dérivés, il y a un paquet à installer. Ouvrez un terminal et copiez ceci :

sudo apt-get install unbound

Exécutez la commande par la touche Entrée, tapez votre mot de passe et validez de nouveau par la touché Entrée. Le paquet va alors s’installer.

Ensuite, changez les DNS dans le gestionnaire de réseau. Faites un clic droit sur l’icône réseau, puis « modification des connexions ». Sélectionnez sur votre connexion réseau puis cliquez sur « Modifier ».

Allez dans l’onglet IPv4, mettez « Adresses automatique seulement (DHCP) » et changez le serveur DNS pour 127.0.0.1. Pour l’IPv6, si c’est applicable, faites la même chose dans l’onglet IPv6, sauf que pour l’adresse DNS, il faut simplement mettre « ::1 » :

changer ses DNS dans Mate
Quand c’est fini, copiez et exécutez successivement ces commandes  :

sudo sed -i 's/dns=dnsmasq/#dns=dnsmasq/g' /etc/NetworkManager/NetworkManager.conf
sudo service network-manager restart
sudo service unbound stop
sudo /etc/init.d/dns-clean restart
sudo unbound -c /etc/unbound/unbound.conf
sudo unbound-anchor -a "/var/lib/unbound/root.key"
sudo service unbound start

Voilà, vous pouvez surfer normalement et vous utilisez maintenant un serveur DNS directement sur votre ordinateur.

Vous pouvez vérifier par la commande suivante :

nmcli dev show | grep DNS

Qui devrait retourner ça :

IP4.DNS[1]:                             127.0.0.1
IP6.DNS[1]:                             ::1

La présence du « 127.0.0.1 » et du « ::1 » indique que c’est bien votre ordinateur qui constitue le serveur DNS.

Les 6 commandes consécutives ci-dessus ont pour fonction respective :

  • de désactiver dnsmask, qui est l’outil DNS par défaut du gestionnaire de réseau d’Ubuntu. Vous pouvez voir qu’il n’apparaît plus quand vous faites sudo lsof -i :53 : seul unbound apparaît maintenant.
  • de relancer le gestionnaire de réseau. Cette commande va vous déconnecter le réseau, puis va vous reconnecter.
  • de désactiver le service unbound le temps de faire les commandes suivantes
  • de supprimer le cache-DNS local
  • de dire à unbound d’utiliser les fichiers de configuration qu’on a installé
  • de dire à unbound d’utiliser la clé DNS-Sec, qui permet de s’assurer que les réponses DNS sont légitimes.
  • de relancer unbound.

Si vous vous amusez à refaire un :

sudo service unbound stop

Vous ne pourrez plus accéder à mon site via son nom (lehollandaisvolant.net) mais ça marchera encore via l’IP (5.39.16.10).

N’oubliez pas de réactiver unbound avec ça :

sudo service unbound start

Ça prouvera que vous utilisez bien le serveur DNS sur votre ordinateur et non celui de votre routeur ou d’un autre programme.

N’oubliez pas de faire en sorte que votre ordinateur ne serve de serveur DNS qu’à vous et pas au reste du réseau (y compris le net) si c’est ce que vous voulez :

Ouvrez le fichier de configuration :

gksudo gedit /etc/unbound/unbound.conf

Et ajoutez ceci à la fin pour limiter le service qu’à votre ordinateur :

access-control: 0.0.0.0/0 refuse
access-control: ::0 refuse
access-control: 127.0.0.0/8 allow
access-control: ::1 allow

Puis relancez unbound :

sudo service unbound restart

Liens :

47 commentaires

gravatar
Matheod a dit :

Je me rappelle un jour avoir vu un tuto qui expliquait comment communiquer "manuellement" avec un serveur mail (par telnet je crois).

Il y a un moyen de faire pareil avec un serv dns ? J'entend par là par exemple lui demander manuellement l'ip de google.

gravatar
Katsono a dit :

Tellement compliqué quand il suffit de rajouter deux lignes ( juste les IP, en fait ) à resolv.conf sur Archlinux. Mais sérieusement, pourquoi Ubuntu et pas Debian, un choix bien plus logique et rationnel ?

gravatar
Guenhwyvar a dit :
Dans mon cas, la navigation est également devenu sensiblement plus rapide.

Pourtant c'est censé être plus lent, au moins au début.

gravatar
Le Hollandais Volant a dit :

@Matheod : tu peux utiliser la commande "dig" suivi du nom du site, puis utiliser des "grep".
Je ne suis pas un spécialiste du telnet, mais ça doit bien exister, quelque part.

@Katsono : dans Ubuntu, le fichier resolv.conf est désuet et sa configuration écrasée par d'autres fichiers (au moins par défaut). Il faut donc d'abord tout remettre à défaut.

Après, Ubuntu ou Arch, il te faudra quand même un resolveur tel que unbound. À moins de constituer un resolv.conf manuellement avec toutes les ip de tous les sites :p.

Sinon le "pourquoi Ubuntu", c'est parce que je l'utilise (Mint en fait), comme la majorité des gens sous Gnu/Linux. La configuration sous Debian doit à mon avis être plus proche de celle d'Arch que d'Ubuntu.

@Guenhwyvar : je te dis mon sentiment, c'est tout.
Peut-être que communiquer avec OpenDns n'était pas aussi rapide que communiquer directement avec des serveurs racine et avec localhost.

Unbound doit gérer ça d'une façon particulièrement performante. Chez moi les pages s'affichent quasi-instantannément, alors qu'avant il y avait toujours un petit délais.

gravatar
GullRaDriel a dit :

"Sachez qu’il est possible d’installer un serveur DNS directement sur votre ordinateur : quand vous voudrez vous connecter à un site, votre ordinateur contactera lui-même les serveurs DNS racine, sans passer par un serveur DNS intermédiaire.
Dans mon cas, la navigation est également devenu sensiblement plus rapide."

Dans la configuration par défaut d'unbound:

forward-addr: 208.67.222.222 #serveur DNS OpenDNS
forward-addr: 208.67.220.220 #serveur DNS OpenDNS
forward-addr: 8.8.8.8 #serveur DNS de google
forward-addr: 8.8.4.4 #serveur DNS de google

AMA c'est parce qu'unbound rend la réponse du plus rapide des 4 et que les timings de son cache et de la réponse son plus court que tu ressent une amélioration.

"de supprimer le cache-DNS local" ===> Plutôt "De remplacer le cache-DNS local par unbound" non ?

IMHO, mais sinon bon tuto !

:-)

gravatar
Le Hollandais Volant a dit :

@GullRaDriel : tu veux dire que par défaut, Unbound utilise les DNS d’OpenDNS et de Google ? C’est dans quel fichier ça ?
Dans le fichier /etc/unbound/unbound.conf j’ai ça : include: "/etc/unbound/unbound.conf.d/*.conf"

Et dans /etc/unbound/unbound.conf.d/ je n’ai qu’un seul fichier root-auto-trust-anchor-file.conf qui contient ça :

server:
# The following line will configure unbound to perform cryptographic
# DNSSEC validation using the root trust anchor.
auto-trust-anchor-file: "/var/lib/unbound/root.key"


Le fichier /var/lib/unbound/root.key ne contient quant à lui que la clé des DNS.

Parce que je veux justement que mon ordi interroge directement les serveurs DNS racine, et me passer totalement des serveurs DNS externes (OpenDNS ou Google) : c’est pour ça que j’ai étendu mon tuto pour éliminer toute les sources de configuration DNS qui ne soient pas de Unbound (celui de Network-Manager, celui de mon routeur [que j’ai mis à OpenDNS pour tester leur page "welcome"]).

Avec mon tuto, ça semble fonctionner : je n’utilise ni OpenDNS, ni les DNS de mon FAI. Je n’ai pas de méthodes sûres pour vérifier, c’est bien mon problème.

@Angristan : Super, j’ai ajouté le lien.

gravatar
Daoka a dit :

Bonjour,
lorsque j'ai redemarré unbound :
$ sudo service unbound start

j'ai obtenu l'erreur :
[1436344501] unbound-checkconf[5278:0] fatal error: file with root-hints: "/etc/unbound/root.hints" does not exist

je l'ai résolu avec les commandes suivantes (source : http://itanp.com/index.php/2015/06/12/unbound-recursive-dns-server-tutorial/)
$ sudo wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /etc/unbound/root.hints
$ sudo cp /etc/unbound/root.hints /var/lib/unbound/

vérification :
$ unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

redemarrage de unbound :
$ sudo service unbound start

gravatar
Fapi a dit :

@Matheod : Sous windows tu peux utiliser la commande "nslookup", avec ton exemple "nslookup google.com"

gravatar
Def a dit :

Mais si je comprends bien, on utilise quand même des DNS extérieurs… qui nous dit que les DNS racines sont plus fiables que ceux de Google ?

Pendant combien de temps nos requêtes sont-elles gardées en cache, et sont-elles écrites sur le disque à l'extinction ? Après tout, on ne visite pas tant de sites que ça : est-ce que l'idéal ne serait pas de *toutes* les garder en cache de façon permanente ?

gravatar
Hardware a dit :

Bonjour,

Il y a une petite chose à savoir lorsque vous installez un résolveur DNS local : votre pc envoie des requêtes vers les serveurs racines du DNS qui eux mêmes demandent l'information aux serveurs faisant autorité sur le domaine que vous voulez résoudre. Donc si chaque internaute faisait la même chose ça pourrait aggraver la charge sur les serveurs autoritaires et sur la racine.

C'est le principe même des serveurs DNS de cache des FAI & autre, ils permettent de réguler la charge réseau. Mais ce jour là n'arrivera jamais, il y a que quelques geeks comme nous qui installons notre propre résolveur DNS ^^

Sinon je conseille les serveurs DNS du projet OpenNIC et ceux de dns.watch

Un truc a pas oublier aussi checker que votre résolveur vérifie correctement les signatures DNSSEC, comme ceux de google par exemple depuis 2013, un petit outil qui permet de faire cela : http://dnssec.vs.uni-due.de/

Sinon pour vérifier que pour ce soit bien la racine qui répond, 2 outils existent :

http://dnsleak.com/
https://www.dnsleaktest.com/

Ou sinon avec le bon vieux dig :

digt A lehollandaisvolant.net

;; ANSWER SECTION:
lehollandaisvolant.net. 13698 IN A 5.39.16.10

; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)


Il y a l'adresse du serveur qui répond, dans notre cas ce sera 127.0.0.1, et comme ce n'est pas un forwarder tu peux être sûr que ton serveur attaque bien la racine.

Merci pour ton article en tout cas ;)

gravatar
matheod a dit :

@Fapi : Je cherchais un truc à un niveau vraiment bas justement. Car cette commande nslookup fait des choses mais lesquelles ? Dois bien y avoir un moyen de faire les choses de manière à un niveau très bas (donc en contactant une ip précise d'un serveur dns) en telnet ou autre.

gravatar
Le Hollandais Volant a dit :

@Def : les serveurs racine ne sons en effet pas forcément plus fiables : on ne sait pas. L’avantage c’est qu’on supprime les intermédiaires.
L’idée d’avoir un cache permanent est une solution : ça reviendrait alors à avoir son propre serveur DNS racine chez soi.

Sauf qu’avec quelques millions de sites, ça devient rapidement très lourd à gérer. Il me semble que les ordinateurs gardent un cache DNS quoi qu’il en soit : ça éviter d’avoir à envoyer des requêtes à chaque fois, surtout si c’est un site que l’on visite 50 fois par jour.
Dans tous les cas, il faut bien mettre ce cache à jour à un moment ou à un autre.

Peut-être est-il possible de constituer un cache DNS en P2P ? Sans point central, donc sans faille.

Le spécialiste de la question, Stéphane Bortzmeyer, y avait également pensé. Le fondateur de TPB voulait faire quelque chose comme ça aussi : après tout, si un site a été victime des attaques que les noms de domaines, c’est bien eux.

Je ne sais pas où ça en est actuellement. Faut voir comment ça se passe lors de la mise à jour d’un nom de domaine : ne va t-il pas être possible à n’importe qui de modifier une entrée DNS ?
Dans ce cas, une autorité de régulation est véritablement nécessaire : le vrai problème, et Bortzmeyer le note bien, c’est donc la politique de nos États.

Ou alors, on se passe tous des noms de domaine et on accède à tous les sites directement en IP.

@Sevy : Merci !

@Hardware : j’y ais pensé aussi…
L’intérêt d’un cache DNS est important.

gravatar
HelloWorld a dit :

J'avais aussi fait un article, il y a longtemps sur l'utilisation d'Unbound :p
Ajouter dans le tuto l'utilisation des serveurs DNS root, DNSSEC, prefetch et le cache, qu'Unbound sait aussi faire, ça serait pas mal aussi :p

gravatar
John Doe a dit :

@qwerty : problèmes de sécurité antérieurs, difficultés de configuration, usine à gaz, etc...

Le problème des communication DNS, c'est qu'elles sont en claires. J'ai trouvé une parade qui utilise un réseau mais j'ai perdu en fiabilité, la résolution de différents noms m'indiquait toujours le même serveur.

@HelloWorld : DNSSEC repose aussi sur le modèle pki. La différence c'est que la validation du certificat se fait a partir du CA qui a délivré la signature. Ce sont des champs dans la résolution DNS qui indique la démarche à suivre pour l'application cliente. Et comme il y a très peu d'application qui utilise ces champs. C'est pas utile aujourd'hui.

gravatar
MacArony a dit :

j'ai rien compris a la plupart des commentaires ici présent, j'ai installé unbound sur ma elementary luna (basé 12.04) la vitesse globale de navigation est grandement améliorée (sauf le premier coup qu'on visite un site mais ça c'est normal j'ai a peu pret compris le fonctionnement)
j'ai juste installé unbound j'ai rien fait de plus.

gravatar
John Doe a dit :

Tiens, ça fait justement quelques temps que je me tâte à convertir mon Pi en serveur DNS, je lirais ça en détail quand je me déciderais. Bonne idée de billet !

gravatar
Le Hollandais Volant a dit :

@MacArony :

j'ai juste installé unbound j'ai rien fait de plus.

Normalement ça doit effectivement suffire.
Vérifies quand même que tu utilises bien tes DNS locaux.

Pour ma part, je voulais être certain qu’il n’y avait pas une configuration quelque part avec les DNS de Google ou d’OpenDNS ou un autre (dans Network-manager, ou ailleurs…) ; d’où tous mes commandes de reset, de restart…

@John Doe :
@John Doe : vous êtes plusieurs :o ?

gravatar
Pierre a dit :

Je n'ai eu aucune erreur mais la résolution des noms de domaines ne fonctionne pas (sous linux mint).
J'ai du remettre mes anciens DNS, puis j'ai exécuté les commandes suivantes pour revenir à la situation antérieure :
sudo sed -i 's/#dns=dnsmasq/dns=dnsmasq/g' /etc/NetworkManager/NetworkManager.conf
sudo service network-manager restart
sudo service unbound stop
Je n'ai pas désinstallé unbound parce que je compte bien réessayer quand j'aurai plus de temps.

gravatar
plop a dit :

Quelqu'un aurait un article ou autre pour comprendre un peu mieux le but de tout ça svp ?
Néophyte ici

Merci

gravatar
John Doe a dit :

@plop : Quand tu communiques sur des serveurs tu emploies des noms par exemple: "https://google.com/?q=wiki ", ici tu communiques avec google.com. . Sauf que le réseau internet, il ne comprend pas google.com. , il veut une IP comme 8.8.8.8 . On a donc créé DNS, un serveur annuaire qui prend des noms et les associe à des adresses IP. Il y a plein de serveurs DNS mais par défaut tu possèdes celui de la box. Et la box va reprendre celui de ton fournisseur d'accès internet. Après c'est un cheminement complexe. Le fonctionnement d'inscription du nom et de l'IP aux serveurs DNS est obligé de passer par les serveurs maîtres.

Le but de la manoeuvre est de se connecter directement sur les serveurs DNS maîtres. Et donc de se passer du DNS du fournisseur d'accès internet.

gravatar
Le Hollandais Volant a dit :

@John Doe : @plop : voilà.
Avec les lois sur le blocage administratif, les FAI sont obligé de bloquer certaines entrées de l’annuaire des FAI.
On pourrait utiliser les serveurs DNS comme ceux de Google ou OpenDNS (à la place de celui de son FAI), mais ces derniers savent alors exactement quel sites on visite : niveau vie privée, c’est pas top.

Ne plus dépendre de serveurs DNS externes permet d’éviter la censure administrative arbitraire et sans juge et de conserver un peu mieux sa vie privée.

Installer un serveur DNS sur son propre ordi, c’est le but de mon article.

gravatar
Tom a dit :

Merci, très intéressant.
Je vais tester ASAP.

gravatar
Drrazmotte a dit :

Et pour windows, avez vous la solution?

gravatar
azerty a dit :

Après installation et configuration (limitation dans unbound.conf tel qu'indiqué), Peerguardian bloque une quantité phénoménale de connexions externes sur mon port 53. Pas cool.

Les instructions pour revenir a la config par défaut seraient utiles.

gravatar
Le Hollandais Volant a dit :

@azerty : Il suffit de désinstaller Unbound :

sudo apt-get remove unbound

Et de remettre tes DNS par défaut dans l’interface du gestionnaire réseau : là où j’ai mis 127.0.0.1, tu mets tes DNS par défaut (Google, OpenDNS…).

Si tu veux vraiment tout remettre, fais aussi un :
sudo sed -i 's/#dns=dnsmasq/dns=dnsmasq/g' /etc/NetworkManager/NetworkManager.conf
Pour annuler les changements à ce fichier.

Après tu réessayes de tester tes DNS :
nm-tool | grep DNS
Et tu devrais voir les DNS que tu as mis dans le gestionnaire de réseau.

gravatar
azerty a dit :

Cool, merci.

Et sinon, auriez vous une idée pour les connection détecteé par peer guardian malgré la config de unbound.conf ?
Plutot étrange.
Une config du firewall peut etre ?

gravatar
Fred a dit :

Bonjour,

Avez-vous une idée pour faire fonctionner cela avec un VPN, je suis obligé de désactiver le VPN (rise up dans mon cas) pour que ça marche.
Merci

gravatar
Le Hollandais Volant a dit :

@Fred : J’utilise un VPN (le logiciel OpenVPN et le service VPN chez ZeVPN) en plus d’utiliser unbound pour le DNS sur ma machine, et ça marche.

Il faut dire à OpenVPN (dans la config du VPN) d’utiliser les DNS d’unbound.
Sous Linux (ubuntu et dérivés) dans le fichier /etc/openvpn/*.conf, ajoutez la ligne suivante à la fin (ou éditez la ligne correspondante si elle se trouve déjà dans le fichier) :
push "dhcp-option DNS 127.0.0.1"


Il se peut qu’une fois que tout est configuré et installé, il faille relancer les deux services (unbound + openvpn) :
sudo service unbound restart && sudo service openvpn restart

gravatar
tih a dit :

Super fonctionne bien même un tantinet plus rapide
Comment on fait pour installer un vpn comme tu l'as fait le @holladaisvolant?

gravatar
Fred a dit :
Bonjour et merci pour ce tuto super clair.
Je rajouterai juste que pour être complet, on doit aussi penser à IPv6.

La manipulation est assez simple. Il suffit de choisir l'onglet "Paramètres IPv6" dans NetworkManager et choisir la Méthode "Automatique, adresses uniquement" puis de rajouter comme serveur DNS "::1". Ne pas oublier de redémarrer ensuite NetworkManager.

Merci de mettre à jour votre tuto, et au passage félicitation pour votre super site :)
PS: Je suppose que ce site est fait à la main, sans l'aide d'un CMS ? En tout cas il est super rapide et agréable à lire.
gravatar
Le Hollandais Volant a dit :
@Fred : j’utilise un CMS, mais celui-ci est fait main, donc j’imagine que ça revient au même ?

Je n’utilise pas IPv6 moi-même (pas eu le temps de me pencher sur la question, d’autant plus que configurer Unbound+VPN m’a semblé assez bordélique pour que j’y touche de nouveau) mais je vais compléter l’article, merci !
gravatar
didpas29 a dit :
Bonjour.

Super tuto, ça fonctionne impeccable.
Par contre, pour l'IPv6 je ne comprends pas ce que c'est ce signe juste avant le "1" qui représente 4 petits points en forme de carré.
Comment le trouver sur le clavier ?
gravatar
Le Hollandais Volant a dit :
@didpas29 : ce n’est pas un caractère spécial, c’est simplement le caractère des deux points « : ». Il faut mettre 2 fois les deux-points « :: ».

Sinon, le « ::1 » représente en IPv6 la même chose que « 127.0.0.1 » en IPv4.

Une adresse IPv6 est de la forme « 2001:610:240:22::c100:68b », mais pour certaines adresses, elle est plus simple, comme c’est le cas pour le "localhost".
gravatar
Sniper a dit :
Merci Timo :-) c'est nickel !
Je suis un "vieux" utilisateur de W$ depuis l'origine (et même bien avant... du DOS 2.5) mais j'ai décidé de m'affranchir de l'envahissant Micromou (surtout depuis W10) et j'ai passé toutes mes bécanes sous Mint Mate 17.3 sans aucun regret. Encore novice sous Linux, je ne peux m’empêcher quand même de bidouiller pour améliorer plein de choses. Mais trouver la bonne info, à la fois simple et fiable, n'est pas toujours facile. Heureusement qu'il y a des gars comme toi qui se mettent à la portée des newbies.
gravatar
Nico a dit :
Plus simple que je ne le pensais, merci pour le tuto.
gravatar
nithir a dit :
Une petite question... vu que l'on héberge chez soi le serveur DNS. Que ce serveur DNS va servir au final de cache entre le DNS "root" et notre machine. En quoi cela améliore t-il la sécurité ou la vie privé ? étant donnée que c'est avec son IP que notre serveur DNS va transmettre nos requête DNS.
Donc on déplace le problème. Ce n'est plus le FAI qui sait ce que l'on fait mais le DNS "root". Sur wikipedia on apprend que ce sont des gouvernements qui maintiennent les serveurs DNS, 12 "organisations" pour reprendre l'article. Donc seul un DNS décentralisé (ODDNS par exemple) serait intéressant niveau censure en se passant de toutes organisation gouvernementale.

Tous ça pour dire que, au final le seul intérêt à la chose est d'avoir un cache dns local qui va accéléré les requête DNS sur les sites auquel on accède souvent. Après on est tracé au niveau européen au lieu de France... on a la censure européenne au lieu de française...

Pour accélérer les requêtes encore un chouia, on peu installer un proxy avec son cache.

Partout ou il y a du cache... on gagne du temps et on introduit des décalages temporel dans l'actualisation des contenus.

Les commentaires sont fermés pour cet article