La recherche DNS est lente mais uniquement dans le terminal (linux)

1

Il semble que j'ai un problème de DNS, bien que je ne sois pas vraiment sûr.

Lorsque vous naviguez sur Internet, tout va vite et bien. Mais lorsque vous utilisez un terminal, les choses commencent à devenir bizarres.

Lorsque je lance un ping sur www.google.com, j'ai un bon temps de retour, mais chaque demande prend beaucoup de temps (environ 7 à 8 secondes par demande). Lorsque vous utilisez ping -n www.google.com ou que vous faites un ping directement sur l'ip, tout va bien. Ceci est lié à Comment expliquer une RTT faible entre des intervalles de ping extrêmement longs (10 secondes)? ou linux ping n'envoie pas réellement 1 paquet par seconde .

Selon les réponses à ces questions, il s’agit d’un problème de DNS. Mais comme je l'ai dit quand je navigue sur Internet, tout va bien. Il n'y a pas de délai de 8 secondes pour charger une page. Cela se produit uniquement dans un terminal. Je ne comprends pas comment un problème de DNS pourrait affecter un terminal mais pas un navigateur Internet.

Ce ne serait pas un problème, sauf que je dois régulièrement mettre à jour une liste de miroirs pour le téléchargement de mises à jour logicielles (la commande est pacman-mirrors, sur un ordinateur Arch), et en raison du retard, ils se terminent tous en conséquence et sont donc mis à jour. échoue.

Je ne l'ai pas encore essayé, mais peut-être que changer le DNS avec celui de Google fonctionnerait. Cependant, il s’agit plus d’une solution de contournement que d’une solution, et j’estime que le problème devrait être résolu autant que possible.

Merci de votre aide.

Baudouin Roullier
la source
Je voudrais essayer de changer le serveur DNS, si cela résout le problème, alors la solution réelle est probablement hors de votre contrôle. Je soupçonne qu'une fois que l'entrée est mise en cache localement, elle n'est plus lente, le ralentissement ne se produit que pendant la recherche externe, ce qui ne se produit que lorsque la recherche dans le cache local échoue.
Tyson

Réponses:

1

Première hypothèse: vos serveurs DNS configurés sont très lents et vous n'avez pas installé de cache DNS local pouvant fonctionner à l'échelle du système.

Pendant ce temps, certains navigateurs Web (au moins Firefox et Chromium) ont interne La mise en cache DNS, afin qu'ils n'envoient pas de requêtes souvent. Chromium essaye parfois même de faire des recherches DNS avant même de cliquer sur le lien, de sorte que vous ne remarquiez jamais le retard.

Utilisation dig ou un outil similaire pour comparer différents serveurs DNS:

$ dig www.google.com
...
;; Query time: 1 msec
;; SERVER: 10.35.0.1#53(10.35.0.1)

$ dig www.google.com @193.219.xx.xx
;; Query time: 7 msec
;; SERVER: 193.219.xx.xx#53(193.219.xx.xx)

$ dig www.google.com @8.8.8.8
;; Query time: 47 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)

Si seul votre serveur actuel est lent, remplacez-le par un serveur plus rapide. (Parfois, les passerelles domestiques ont tendance à avoir des serveurs proxy DNS vraiment merdiques. C’est particulièrement malchanceux avec D-Link moi-même.)

Mais si tout d’entre eux sont lents, installez-en un qui s’exécute localement (agit comme un cache local) - Unbound ou dnsmasq sont de bons choix. (Bien sûr, il serait intéressant de comprendre Pourquoi votre réseau ralentit tellement les requêtes DNS ...)

  • Si NetworkManager est utilisé, vous pouvez lui indiquer de configurer automatiquement Dnsmasq - set dns=dnsmasq dans le fichier NetworkManager.conf (5). (La dernière version 0.9.10 prend également en charge dns=unbound.)

  • Pour le configurer manuellement, démarrez le service approprié et modifiez /etc/resolv.conf d'utiliser 127.0.0.1 comme serveur de noms.

grawity
la source
dig semble utile. Alors j’ai essayé, et il semble que les serveurs DNS de /etc/resolv.conf ne fonctionnent pas. $ cat /etc/resolv.conf # Generated by resolvconf domain soton.ac.uk nameserver 152.78.3.34 nameserver 152.78.3.35 nameserver 192.168.0.1 $ dig www.google.com @152.78.3.xx dig: couldn't get address for '152.78.3.xx': not found Bien que quand je ne spécifie pas le @server une partie, je reçois: ;; Query time: 389 msec ;; SERVER: 192.168.0.1#53(192.168.0.1)
Baudouin Roullier
Ok, je me suis trompé dans votre réponse. Je pensais que le "xx" représentait n'importe quoi ... Alors je reçois: dig www.google.com @152.78.3.34 ;; connection timed out; no servers could be reached
Baudouin Roullier
@BaudouinRoullier: D'accord, les deux premiers serveurs de noms appartiennent à la plage d'adresses 152.78.0.0/16 Southampton University et ignoreront complètement les requêtes DNS "extérieures". J'imagine que vous les avez configurés manuellement plus tôt mais que vous n'êtes pas sur le réseau de l'université pour le moment. La majeure partie du retard est due au fait que le résolveur doit attendre que les deux premières tentatives expirent ... (IMHO, c'est une mauvaise décision des administrateurs de l'université: il aurait été préférable de faire répondre ces serveurs par "REFUSED" ou au moins par une erreur ICMP.)
grawity
@BaudouinRoullier: le troisième serveur, 192.168.0.1, semble être la passerelle de votre réseau local actuel. C'est également problématique, car il faut près de 400 ms pour répondre - si c'est à proximité, cela devrait plutôt ressembler à 4 ms ...
grawity
Je n'ai pas défini le serveur de noms manuellement. Mais je vais souvent à l’Université, il faut donc l’installer et ne pas l’enlever à mon retour à la maison (c’est bizarre). Est-il possible de "mettre à jour" la liste de serveurs de noms? j'ai pensé resolvconf -u a fait cela mais apparemment pas. Et ça devrait être automatique, je ne sais pas pourquoi ça ne marche pas vraiment. (au fait, j'ai quelque chose comme 10 ms sur la passerelle de mon LAN maintenant, c'est bien)
Baudouin Roullier