Résolution de nom pour une imprimante Wi-Fi

Tags: #<Tag:0x00007fb8e53bb370> #<Tag:0x00007fb8e53bb2a8> #<Tag:0x00007fb8e53bb1e0>

Bonjour à vous, il y a quelque chose que je ne comprends pas dans ma résolution de noms sur le LAN, je m’en suis rendu compte en butant pendant un moment sur l’installation de mon imprimante Wi-Fi. Désolé c’est un peu long.

La résolution de nom sur mon LAN :

  • Mon routeur (Freebox), avec le DHCP configuré pour donner comme premier DNS le NAS Synology, et en secondaire des DNS libres du net. Quelques machines importantes du LAN sont en bail fixe (la box elle-même, le PC du salon, et le Synology)
  • Le Synology sert de serveur DNS, avec pour le LAN une zone nommée .home qui me sert les adresses des bécanes en IP fixe… Les DNS backup sont les mêmes que ceux configurés sur la box, pour la résolution de nom internet

Et maintenant passons au souci. Avec un laptop en Trixie 13.3 tout ce qu’il y a de plus normal (à ceci près qu’il a été installé par l’install live), impossible de faire fonctionner mon imprimante Wi-Fi.

Vérification que l’imprimante est visible sur le réseau :

$ sudo lpinfo -v
(...)
network ipps://Canon%20G6000%20series._ipps._tcp.local/
network dnssd://Canon%20G6000%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-00186502f97a

Il s’agit bien de la Canon G6000 series.

Affichage des détails :

$ avahi-browse -rt _ipp._tcp
+ wlp5s0 IPv6 Canon G6000 series                            Internet Printer     local
+ wlp5s0 IPv4 Canon G6000 series                            Internet Printer     local
= wlp5s0 IPv6 Canon G6000 series                            Internet Printer     local
   hostname = [84AD43000000.local]
   address = [192.168.1.134]
   port = [631]
(...)
= wlp5s0 IPv4 Canon G6000 series                            Internet Printer     local
   hostname = [84AD43000000.local]
   address = [192.168.1.134]
   port = [631]
(...)

La découverte trouve bien le hostname (en .local comme c’est du mDNS), l’IP v4, le port.

Tentative d’installation :

$ sudo lpadmin -p Canon_Test -v "dnssd://Canon%20G6000%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-00186502f97a" -m everywhere -E
lpadmin : Unable to connect to 84AD43000000.local:631: Name or service not known

Ça marche pas, le nom est mal résolu. Même tentative avec l’IP:port :

$ sudo lpadmin -p Canon_Test -v "dnssd://192.168.1.134:631/?uuid=00000000-0000-1000-8000-00186502f97a" -m everywhere -E
lpadmin : Unable to create PPD: Printer does not support required IPP attributes or document formats.

Ça marche à moitié, le message est un warning, l’imprimante est bien créée mais impossible d’imprimer dessus.

Tests avec ping, le nom ne fonctionne pas, l’IP fonctionne :

$ ping  84AD43000000.local
ping: 84AD43000000.local: Nom ou service inconnu
$ ping 192.168.1.134
PING 192.168.1.134 (192.168.1.134) 56(84) bytes of data.
64 bytes from 192.168.1.134: icmp_seq=1 ttl=64 time=212 ms
^C

Je regarde dans mes paramètres Debian de résolution de noms :

$ cat /etc/nsswitch.conf
(...)
hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

Si je lis bien, l’ordre est :

  1. La résolution du fichier /etc/hosts
  2. La résolution de localhost
  3. La résolution mDNS
  4. La résolution DNS ← mon Synology

La résolution par mDNS fonctionne bien :

$ avahi-resolve -n 84AD43000000.local
84AD43000000.local      192.168.1.134

Et naturellement la résolution par DNS ne fonctionne pas puisque je gère seulement le .home :

$ nslookup 84AD43000000.local
Server:         192.168.1.250 <-- mon Synology
Address:        192.168.1.250#53

** server can't find 84AD43000000.local: NXDOMAIN

Finalement, j’ai changé mon DNS sur le laptop, au lieu du Synology j’ai utilisé celui de mon FAI, et là BIM ça marche :

$ sudo lpadmin -p Canon_G6000_Test2 -v "dnssd://Canon%20G6000%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-00186502f97a" -m everywhere -E```
$ echo $?
0

L’impression fonctionne, tout nickel.

SYNTHÈSE JUSQU’ICI :

  • Si j’utilise mon DNS Synology, impossible de résoudre les noms en .local (alors qu’il ne comporte aucune configuration pour gérer ce domaine)
  • Si je n’utilise pas mon DNS Synology, tout marche bien (mDNS)
  • Ce qui me gène là-dedans, c’est que Debian est censé faire la résolution de noms d’abord sur mDNS pour le .local, et le DNS ensuite, je ne vois donc pas pourquoi la résolution de nom plante en présence du DNS Synology.

En cherchant un peu plus loin, je me suis aperçu que (pour une raison inconnue), le DNS Synology a un enregistrement SOA pour le .local :

$ host -t SOA local 192.168.1.250
Using domain server:
Name: 192.168.1.250
Address: 192.168.1.250#53
Aliases: 

local has SOA record localhost. root. 1 604800 86400 2419200 604800

Outre le fait qu’il n’est pas censé le faire, en tout cas je n’a rien demandé, la question que je me pose c’est pourquoi ce souci DNS gène la résolution mDNS qui est censée se faire avant ?

ton DNS ne pourra pas résoudre ça correctement.

car c’est ça qu’il cherche.

Ceci étant dit, ton DNS sur ton Synbology est un Bind?

Il te suffirait de regarder les logs de ce DNS pour voir quelle recherche est fait (query) et quel motif d’echec.

En fait je ne suis pas intéressé par ce que répond le DNS : ce qui m’intéresse, c’est de comprendre pourquoi le fait que le DNS ne sache pas répondre, empêche d’opter pour la résolution mDNS qui est censée se faire avant.

Oui j’ai lu que le paquet DNS Server de Synology utilisait bind9 sous le capot.

(source : Release Notes for DNS Server)

C’est un peu contradictoire.
Tu as un problème de résolution et tu ne veux pas savoir ce que dit le DNS…

Dans les logs du DNS tu auras c e qu’il a reçu comme requête, et comment il l’a traité.

Pas vraiment contradictoire, non : vu que mDNS est censé résoudre avant, et qu’il résoud bien, pourquoi on demande son avis au DNS ?

La questions sous-jacente c’est « quel crédit je peux donner à la résolution de nom sur mon Debian, s’il y a un peu d’aléatoire entre ce que je lui demande et ce qu’il fait ».

Je me demande si j’ai bien en visu toute la configuration dans /etc/nsswitch.conf car peut-être qu’il existe d’autres confs que j’ignore ?

Si tu as ton DNS et que tu ne l’utilises pas pourquoi le mettre?

je crois que tu ne comprend pas comment marche les DNS.

Ta machine a pour resolver principal le DNS du synology.

C’est normal, pas de SOA pas de zone de résolution pour ton DNS. C’est un principe de base.
Comme tu as changé les options DHCP relative au serveur DNS, quand tu utilise celui-ci tu n’utilise plus mDNS.

Il n’y a rien d’aléatoire. Le problème que tu as, qui est le problème principal en informatique, est entre la chaise et le clavier.

je pense que tu ne comprends pas pleinement le fonctionnement de la chaine DNS.

La configuration DNS de ta résolution de nom c’est dans /etc/resolv.conf
nsswitch lui est la configuration du service de resolution de nom, c’est à dire qu’il indique qui tu vas interroger en fonction de ce que tu demandes:

 passwd:         files
group:          files
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

Pour la résolution de nom DNS, c’est la ligne hosts qui compte. Ici c’est d’abord les fichiers (/etc/hosts) puis le mdns puis le dns.

Qu’as tu dans le tien?
et qu’as-tu dans la configuration mDNS?

Ma ligne hosts est ci-dessus, j’ai bien le mdns4_minimal avant le dns comme toi.

Donc la suite c’est le contenu des fichiers de config.
Personnellement, je ne met strictement rien dans AVAHI (ne serait-ce que pour des raisons de sécurité). Donc il n’y a jamais de résolution mDNS chez moi, juste mon serveur DNS.
la configuration du daemon avahi est celle de base, pas de résolution donc.

Ce que je veux dire, c’est que dans ma conf DNS, j’ai juste une zone home, pas de zone local, donc je suis surpris de trouver un SOA local dans le DNS. La résolution du domaine local est laissée au mDNS.

Je n’ai aps revu le Bind de Synology depuis un moment.

mais je sais que dans un DNS on protège certaines zones, comme le broadcast, le localdomain, etc… pour des raisons de sécurité. Je pense que c’est ça que tu as dans ton DNS syno.
Je ne l’utilise pas car on a pas suffisamment accès à tout la configuration à mon goût.

L’intérêt de cette config du local, c’est que c’est sur le serveur et non pas sur tout un tas de machine où la sécurité de cette résolution est plus difficile à maintenir

Je crois que sur mon installation live, la configuration avahi par défaut est d’écouter sans rien publier. Et ça semble fonctionner puisque avahi résoud bien mon nom d’imprimante en .local.

Certes, mais AVAHI ce n’est pas du DNS. Ce n’est pas le même protocole de résolution et de prise en compte des requêtes.
Sans visibilité de ta conf DNS, on ne peut pas faire grand chose. Pas de logs pas de conf. En aveugle ce n’est pas possible.

Oui je vois bien l’intérêt, c’est un peu ce que j’ai fait avec mon home. Mais pour l’instant j’ai laissé avahi sur local pour voir.

Es-tu d’accord que c’est bizarre d’avoir dans l’ordre 1. mdsn4_minimal puis 2. dns et que la résolution du mDNS soit « annulée » par le DNS ?

Un DNS ne résoudra jamais un nom de ce type, car %20 ça signifie un espace, et un nom de machine n’a pas le droit d’avoir un espace dans un DNS.

Tout à fait je suis d’accord, mais comme je ne comptais pas sur le DNS pour résoudre ce nom, ça ne m’inquiétait pas outre mesure.

Les logs dans ce cas. tu veux pas aller y voir, donc tu ne risque pas de trouver la solution.

Tu parles des logs de la résolution de nom sur le laptop Debian ? Ils sont dans quel fichier ?