Problème
La Livebox que j’utilise pour me connecter en Wifi me pose le problème suivant :
Le serveur DHCP envoie sa propre adresse 192.168.1.1 comme serveur DNS… logique, me direz-vous, sauf que la boîboîte est incapable de répondre aux requêtes DNS inverses, utilisées par pas mal d’applications. Dès qu’une de ces requêtes est envoyées, donc, l’application en question gèle pendant quelques secondes jusqu’à un certain délai.
$ time nslookup 74.125.43.147 192.168.1.1 ;; connection timed out; no servers could be reached real 0m15.028s user 0m0.016s sys 0m0.000s
Alors qu’en utilisant un serveur DNS qui fonctionne :
$ nslookup 74.125.43.147 80.10.246.2 Server: 80.10.246.2 Address: 80.10.246.2#53 Non-authoritative answer: 147.43.125.74.in-addr.arpa name = bw-in-f147.google.com. Authoritative answers can be found from:
Jusqu’à maintenant, j’avais ajouté les serveurs DNS à la main dans /etc/dhcp3/dhclient.conf
en utilisant la directive prepend domain-name-servers 80.10.246.2
.
Oui mais voila, à chaque fois que me connecte sur un autre réseau Wifi non Livebox, les serveurs DNS (du réseau Livebox) ne sont plus accessibles, et du coup il fallait modifier le resolv.conf
à la main pour retirer lesdits serveurs DNS.
Solution
Ajouter un script bien placé, qui vérifie si on est derrière une Livebox pour modifier le fichier resolv.conf
comme il se doit.
Le script est à placer dans /etc/network/if-up.d/fixdns
avec le contenu suivant :
#!/bin/sh # script pour ajouter d'autres serveurs dns derrière une livebox # si on reconnait la livebox, on fait la modif dans le resolv.conf if arp "$DHCP4_DHCP_SERVER_IDENTIFIER" | grep -q 00:1b:bf:3d:21:49 then cp /etc/resolv.conf.livebox /etc/resolv.conf fi
Et voila, le tour est joué ! Cette solution a le mérite de fonctionner avec NetworkManager, qui n’exécute pas les scripts de /etc/dhcp3/dhclient-enter-hooks.d/
.
OpenDNS
DNS Primaire : 208.67.222.222
DNS Secondaire : 208.67.220.220
Dans /etc/dhcp3/dhclient.conf il faut modifier la ligne suivante pour que le DNS 127.0.0.1 (ou autre) soit utilisé avant de lancer la requête sur 192.168.1.1
prepend domain-name-servers 127.0.0.1;