Résolution de nom pour une imprimante Wi-Fi

Tags: #<Tag:0x00007f4e5e2db938> #<Tag:0x00007f4e5e2db7d0> #<Tag:0x00007f4e5e2db690>

salut :

un %20 est accepté dans la définition d’une imprimante :
chez moi ,
network ipp://Brother%20DCP-J772DW%20(USB)._ipp._tcp.local/
marche
mais elle est en usb sur un ordi pas en wifi
et j’ai ça de différent sur nsswitch.conf:
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

oui mlais tu ne peux avoir d’entrée dans un DNS avec un espace dans le nom, c’est un caractère non autorisé.

Je crois que je tiens un bout de la réponse, trouvé dans la doc de mDNS : s’il existe un domaine .local géré « au-dessus » (càd dans les résolutions de nom arrivant APRÈS), mDNS se désactive pour ne pas gêner ! Il se trouve que la gestion du .local sur mon serveur DNS Synology est un effet de bord non souhaité : comme tu le dis @Zargos, ce serveur DNS est assez peu paramétrable et on subit des trucs, là je ne lui demande pas de gérer le .local et pourtant il crée un SOA dessus, désactivant ainsi avahi…

$ cat /usr/share/doc/libnss-mdns/README.Debian
(...)
Sites with a .local DNS zone
----------------------------

Making nss-mdns authoritative for .local breaks resolution
on networks where .local is a real domain name. To work
around this, nss-mdns implements the heuristic described in
<https://support.apple.com/en-us/HT201275>: it looks up the SOA record
for the .local zone, and disables itself automatically if that record
is found.

Il ne me reste plus qu’à regarder si je peux désactiver cette désactivation :sweat_smile: pour avoir une gestion du .local par avahi et le reste (dont mon domaine local .home) par le DNS.

n’oublie pas que dans Bind, c’est une sécurité par ce qu’une requête DNS ne doit jamais traiter de localhost, ou de broadcast, etc…

Attends, tu peux préciser cette dernière phrase, que je comprenne bien STP ?

du fait de la configuration de nsswitch.conf, un serveur DNS ne doit jamais traiter de requête concernant localhost ou broadcast.
Hors certains attaque sur des DNS le font, de facto, la configuration Bind inclue des zone permettant de traiter ces requêtes ou de les blacklister.

Du coup, la solution la plus appropriée pour laisser le DNS inchangé me semble être celle-ci : on peut configurer avahi pour NE PAS chercher le SOA .local dans les DNS. Pour ceci, créer un fichier /etc/mdns.allow tel quel :

$ sudo cat > /etc/mdns.allow <<EOF
# Ne pas escalader au DNS les requêtes du domaine .local (nécessite mdns4 et
# non mdns4_minimal dans /etc/nsswitch.conf)
.local.
.local
EOF

Changer le mode de résolution mdns dans /etc/nsswitch.conf, en effet le mdns4_minimal ne consulte pas le fichier /etc/mdns.allow, il faut passer sur mdns4 :

#hosts:   files myhostname mdns4_minimal [NOTFOUND=return] dns
hosts:    files myhostname mdns4         [NOTFOUND=return] dns

Enfin bon, ça c’est si on veut absolument passer par mDNS : maintenant que j’ai compris pourquoi ça marchait pas, je vais plutôt utiliser le DNS avec mon imprimante en IP fixe sur domaine .home.

À nouveau moi… Même imprimante, mais tentative différente : après avoir compris comment ça marche avec avahi, je tente en DNS, avec la config suivante :

  • Imprimante mise en IP fixe 192.168.1.251
  • Synology faisant office de serveur DNS sur 192.168.1.250, le domaine est .home

La résolution de nom pour l’imprimante fonctionne :

$ nslookup canon-g6050.home
Server:         192.168.1.250     <-- Ça c'est le Synology
Address:        192.168.1.250#53

Name:   canon-g6050.home
Address: 192.168.1.251            <-- Ça c'est bien mon imprimante

Sur le serveur DNS, techniquement, c’est un enregistrement A sur la zone .home

Et maintenant, je ne m’explique pas la différence de comportement selon que je crée l’imprimante avec son IP ou avec son nom :

$ sudo lpadmin -p Canon_dns -v "ipp://canon-g6050.home" -m everywhere -E
lpadmin : Unable to create PPD: No IPP attributes.
$ echo $?
1
$ sudo lpadmin -p Canon_ip -v "ipp://192.168.1.251" -m everywhere -E
$ echo $?
0
$ lpstat -p
printer Canon_dns is idle.  enabled since jeu. 01 janv. 1970 01:00:00
printer Canon_ip is idle.  enabled since mer. 21 janv. 2026 19:00:05

Techniquement, les deux imprimantes sont créées malgré le message d’avertissement sur la création par le nom d’hôte. Mais sur celle créée par le nom, le modèle est marqué comme Local Raw Printer (l’autre est Printer - IPP Everywhere) et ça n’imprime pas : erreur Impossible d'obtenir l'état de l'imprimante.

Avez-vous une idée ?

tu as lu le man de lpadmin?

lpadmin configure les imprimantes et les files d’attente de classes d’imprimantes fournies par CUPS. Il est également utilisé pour définir l’imprimante ou classe d’impri‐
mante par défaut.

-v « uri_périphérique »
Définir l’attribut uri_périphérique de la file d’impression. Utiliser l’option -v avec la commande lpinfo(8) pour obtenir une liste des URI de périphérique géré ainsi
que leur schéma.

Voici ce que me dit lpinfo :

$ sudo lpinfo -v
network beh
file cups-brf:/
serial serial:/dev/ttyS0?baud=115200
network http
network https
network socket
network lpd
network ipp
network ipps
network smb
network dnssd://Canon%20G6000%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-00186502f97a
network ipps://Canon%20G6000%20series._ipps._tcp.local/
network socket://192.168.1.251

Les deux uri utilisées dans mes commandes sont ipp://192.168.1.251 et ipp://canon-g6050.home qui me semblent toutes deux conformes au format attendu par CUPS : CUPS Implementation of IPP. J’ai essayé les variantes avec ou sans le numéro de port, avec ou sans le / final, avec ou sans le /ipp/print suggéré par man lpadmin

Rien n’y fait, la version avec l’adresse IPv4 fonctionne, celle avec le nom DNS ne fonctionne pas. Je soupçonne que le nom d’hôte ne soit résolu que par mDNS, et pas par DNS, mais je n’ai trouvé aucune info à ce sujet.

parce qu’il n’y a pas de file d’impression avec le nom DNS comme le montre ton lpinfo.
lpadmin ne peut pas traiter que des files d’impression qui existent.

Dit autrement, ça ne sert à rien que j’aie mis un nom DNS sur mon imprimante, je suis obligé d’utiliser l’IP v4 en dur, et si un jour je veux changer son adresse IP, je dois repasser partout où j’ai une file d’attente déclarée en IP fixe, et les changer une par une à la mano ?