Vérifier les dns utilisés

Bonjour,

Comment faites vous pour vérifier la liste des DNS configurés de manière fiable ?
Je viens de faire quelques tests :

nmcli dev show | grep DNS
IP4.DNS[1]:                             192.168.1.1

et en complément https://www.dnsleaktest.com/

dig me confirme le résultat de dnsleaktest

pour la config, j’ai suivi le wiki NetworkManager - ArchWiki

vous faites comment pour vérifier les DNS utilisés en ligne de commande ?

Bonjour,

J’ai mis ton sujet dans #support, pour qu’il soit visible.

Tout dépend du périmètre de fiabilité, si tu veux savoir sur une machine Debian quelconque, sache que la commande nmcli n’existe pas sur mes machines.
Il semble que le fichier /etc/resolv.conf soit le plus fiable, à mon humble avis.
Ça te donnera à coup sûr l’adresse du serveur DNS des application du système, mais ça peut être la machine elle-même si un relais DNS tourne dessus.
Si tu as serveur DNS sur la machine, il faut que tu puisses arriver à déterminer le serveur amont (si existant) du relais.

Bonjour,

il suffit de taper dig
dans le résultat affiché il y a vers la fin qui donne le serveur qui a répondu par défaut:

;; Query time: 0 msec
;; **SERVER: xxx.yyy.www.zzz#53(xxx.yyy.www.zzz)**
;; WHEN: Sun May 15 22:02:32 CEST 2022
;; MSG SIZE  rcvd: 851

C’est le resolver. ensuite si c’est l’IP de la BOX, alors il suffit d’aller regarder dans la configuration de la box. si c’est un resolver local (127.0.0.1, localhost) alors il faut aller regarder dans le processus qui écoute sur le port 53 en local et jeter un oeil dans son fichier de configuration.

personnellement je n’utilise jamais de resolver local, car trop facile à pirater.

Il y a une différence entre « utilisés » et « configurés ».
Des serveurs DNS peuvent être configurés à de multiples endroits, notamment :

  • dans les gestionnaires de connexion réseau comme NetworkManager, connman, ifupdown (/etc/network/interfaces), systemd-networkd… qui se retrouvent généralement dans /etc/resolv.conf mais pas toujours
  • dans la configuration des clients DHCP pour compléter ou remplacer les serveurs DNS fournis par le serveur DHCP (cf. option prepend/supersede domain-name-servers dans /etc/dhcp/dhclient.conf pour le paquet isc-dhcp-client)
  • dans les fichier de configuration du paquet resolvconf (qui affecte /etc/resolv.conf)
  • dans les fichiers de configuration des sources de résolution de nom de la libc définies dans la ligne hosts: de /etc/ nsswitch.conf :
    • dns → /etc/resolv.conf
    • tls (DNS over HTTPS, paquet libnss-tls) → /etc/nss-tls.conf
    • resolve (paquet libnss-resolve) → /etc/systemd/resolved.conf, /{etc,run,usr/lib}/systemd/resolved.conf.d/*.conf
  • directement dans les logiciels comme firefox (paramètres réseau > activer le DNS via HTTPS).

Quant aux serveurs DNS effectivement utilisés, ça dépend.
La plupart des programmes font appel aux fonctions de résolution de nom de la libc (getaddrinfo, gethostbyname) qui utilisent les sources définies dans /etc/nsswitch.conf, dont la plus courante est /etc/resolv.conf.
Les outils de test de résolution DNS comme dig, host ou nslookup utilisent directement le fichier /etc/resolv.conf.
Les DNS configurés dans connman (qui embarque son propre relais DNS local) ne sont utilisés que si /etc/resolv.conf pointe vers 127.0.0.1 ou ::1.
Le navigateur firefox utilise les DNS over HTTPS (DoH) définis dans l’option correspondante si elle est activée.

Comme il a été dit, le serveur DNS utilisé par les programmes peut être un relais qui interroge à son tour d’autres serveurs DNS.

2 J'aime

Merci pour la réponse même si elle n’est pas ne permet pas de simplifier les choses.

Je me suis un peu perdu dans la configuration des DNS, notamment /etc/resolv.conf qui peut être écrasé automatiquement.
Autant je ne trouve pas élégant de l’éditer directement et de passer chattr +i , mais je retrouve bien les DNS configurés.

Firefox, dig semblent respecter les DNS utilisés.
Quels utilitaires ne respecteraient pas ça ? j’imagine que ça n’est pas sans raison.

Merci à tous pour vous réponses :grinning_face_with_smiling_eyes:

Ou être un lien symbolique vers un fichier temporaire géré dynamiquement.

Cette phrase ne veut rien dire. Confusion entre « utilisés » et « définis » (où) ?

Ce qu’il faut identifier c’est quelle est la configuration utilisée au sens fichiers de configuration.
par exemple chez moi:

  • Le DHCP fournit les DNS
  • j’utilise /etc/network/interfaces pour ma configuration réseau des interfaces en DHCp
  • le fichier resolv.conf est mis à jour avec les données fournie par le DHCP

Sur une de mes machines j’utilise NetworkManager, mais là aussi c’est lui qui met à jour /etc/resolv.conf automatiquement.

J’ai une machine qui sert de DNS interne (zone et reverse) et qui forward le reste vers les DNS de openDNS. Aucune machine (serveur ou poste de travail) n’accède à des DNS externe (bloqué par le parefeu).

je ne suis pas certain que ce soit une bonne idée. C’est plus un « bricolage » qui peut avoir des interférence avec des outils legit, et qui coté sécurité peut être à risque.

Même DoH ?

C’est pourtant ce que font resolvconf et connman, parfois NetworkManager :

lrwxrwxrwx 1 root root 35 mai   19 08:31 /etc/resolv.conf -> /var/run/NetworkManager/resolv.conf

Non car il utilise le port 443 la plupart du temps donc ça poserait un problème.
Par contre je suis en train de regarder pour ça. Car effectivement quelqu’un pourrait configurer son navigateur pour le faire.
de mon DNS interne je pourrais effectivement, et assez facilement, faire en sorte que le forward se fasse via DOH.
Bloquer les configuration locale destinées à contourner cela impliquerait la mise en place d’un WAF, mais il est difficile de pouvoir différencier le flux DOH d’un autre flux HTTPS.
Ceci dit, l’utilisation d’un proxy pourrait aussi aider, avec du SNI par exemple.

d’un autre coté, je contrôle en totalité les configuration de tous les équipements autorisés à se connecter sur mon infrastructure. ceux que je ne contrôle pas complètement n’ont accès qu’à internet, mais pas au reste de l’infra.