Afin d’accélérer le chargement des pages web j’ai mis en place sur mon serveur local un cache DNS, celui-ci ne résoudra pas les noms de domaine : il interrogera les DNS d’OpenDNS et mettra en cache ces résultats pour les prochaines requêtes.
Installation et configuration du serveur de cache DNS
Pour cela j’utilise BIND9, si il n’est pas encore installé rien de plus simple
sudo apt-get install bind9
Maintenant configurons le serveur de cache
sudo nano /etc/bind/named.conf.options
De sorte à ce qu’il ressemble a ceci
options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 208.67.222.222; 208.67.220.220; }; forward only; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== recursion yes; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; dnssec-enable yes; dnssec-validation yes; };
Forçons maintenant bind a résoudre des IPv4 et pas des IPv6, il faut donc éditer le fichier /etc/default/bind9
sudo nano /etc/default/bind9
Modifiez le paramètre OPTIONS afin de forcer l’IPv4
OPTIONS="-u bind -4"
Sauvegardez ces modifications et relancer le service bind9
sudo service bind9 restart
Test de votre serveur de cache DNS
Test de votre configuration sous Debian / Ubuntu
Pour tester votre cache DNS rien de plus simple, il vous suffit de modifier le fichier /etc/resolv.conf – ces modifications seront effectives jusqu’au prochain redémarrage de votre machine
sudo nano /etc/resolv.conf
Indiquez l’adresse de votre serveur DNS local
nameserver 192.168.1.2 # nameserver 8.8.4.4 # nameserver 8.8.8.8 # nameserver 209.244.0.3
Nous allons maintenant utiliser la commande dig afin de vérifier que tout fonctionne correctement, celle ci nous donnera des informations détaillés quant à la résolution d’un nom de domaine
dig www.linuxfr.org
Ce qui nous donne :
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> www.linuxfr.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29183 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.linuxfr.org. IN A ;; ANSWER SECTION: www.linuxfr.org. 900 IN CNAME prod.linuxfr.org. prod.linuxfr.org. 900 IN A 88.191.250.176 ;; Query time: 147 msec ;; SERVER: 192.168.1.2#53(192.168.1.2) ;; WHEN: Tue Feb 10 00:36:05 2015 ;; MSG SIZE rcvd: 68
Ici nous pouvons voir que cette requête a été exécutée en 147 msec et que le serveur est bien celui que nous venons de configurer 192.168.1.2, maintenant relancions cette même commande et observons les résultats
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> www.linuxfr.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44290 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.linuxfr.org. IN A ;; ANSWER SECTION: www.linuxfr.org. 711 IN CNAME prod.linuxfr.org. prod.linuxfr.org. 711 IN A 88.191.250.176 ;; Query time: 1 msec ;; SERVER: 192.168.1.2#53(192.168.1.2) ;; WHEN: Tue Feb 10 00:39:14 2015 ;; MSG SIZE rcvd: 68
Vous pouvez voir que notre serveur cache fonctionne, le temps de résolution du nom de domaine est tombé a 0 msec.
Test de votre configuration Windows
Pour tester votre configuration sous windows, rien de plus simple : Les DNS sont à modifier dans les propriétés TCP/IP de la carte réseau qui établit la connexion. Selon votre système Windows vous y accéderez de différentes façons :
- Windows XP : Menu démarrer / Panneau de configuration / Connexions réseau et internet / Connexions réseau
- Windows Vista : Menu Windows / Panneau de configuration / Réseau et Internet / Centre Réseau et partage / Gérer les connexions réseau
- Windows 7 : Menu Windows / Panneau de configuration / Réseau et Internet / Centre Réseau et partage / Modifier les paramètres de la carte
- Windows 8 : Atteindre le « centre réseau et partage » en utilisant la recherche / Modifier les paramètres de la carte
Faites un clic droit sur les propriétes de la carte réseau ou wifi que vous utilisez, sélectionnez en cliquant la ligne « Protocole internet TCP/IP » puis cliquez que le bouton « Propriétés » puis cochez la case « Utiliser l’adresse de serveur DNS suivante » pour pouvoir remplir les champs DNS manuellement. Renseignez ensuite l’adresse IP de votre serveur local et validez.
La commande dig disponible nativement sous linux ne l’est pas sous windows, il reste possible de l’installer de l’utiliser dans l’invite de commande, pour cela rendez vous sur le site officiel de bind afin de télécharger le programme. Une fois que l’archive est téléchargée il vous faut extraire les fichiers suivantes dans C:\Windows\System32 :
dig.exe host.exe libbind9.dll libdns.dll libeay32.dll libisc.dll libisccfg.dll liblwres.dll libxml2.dll
Vous pouvez maintenant ouvrir l’invite de commande et effectuer les mêmes tests que pour Debian / Ubuntu
Utilisez votre serveur de cache de façon permanente
Configuration permanente sous Debian / Ubuntu
Pour cela il vous faut modifier le fichier /etc/network/interfaces
sudo nano /etc/network/interfaces
Modifiez la ligne dns-nameservers de sorte à ce qu’elle indique l’adresse de votre serveur local
dns-nameservers 192.168.1.2
Relancez l’interface concernée par ces modifications (dans notre cas eth0)
sudo ifdown eth0 && sudo ifup eth0
Configuration permanente sous Debian / Ubuntu
Sous windows il suffit de laisser les modifications que vous aviez opérées pour vos tests.
Forcer la configuration des clients depuis votre routeur
Certains routeurs permettent de directement configurer votre serveur DNS pour vos clients locaux via le DHCP, ici un exemple avec l’Asus RT-AC66U (merlin firmware)
Sources :