Avahi (Français) - ArchWiki

Jump to content

# Avahi (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de Avahi. Date de la dernière traduction: 2022-01-27. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Selon Wikipedia:

  Avahi est une mise en œuvre des protocoles Zeroconf (connexion au réseau avec zéro configuration) permettant ainsi à des logiciels de publier et de découvrir des services et des hôtes en cours d'exécution sur un réseau local TCP/IP sans configuration particulière. Par exemple, un utilisateur peut brancher son ordinateur sur un réseau et trouver instantanément des imprimantes pour imprimer, des fichiers à lire et des personnes à qui parler. Avahi est publié sous la licence publique générale limitée GNU (LGPL).

## Installation

Installez le paquet avahi.

Vous pouvez gérer le daemon Avahi avec `avahi-daemon.service` en utilisant systemd.

Note: systemd-resolved possède un service mDNS intégré, assurez-vous de désactiver le résolveur/répondeur DNS multicast de systemd-resolved (reportez-vous à resolved.conf(5)) ou désactivez `systemd-resolved.service` entièrement avant d'utiliser Avahi.

## Utilisation d'Avahi

### Résolution des noms d'hôtes

Avahi fournit la résolution des noms d'hôtes locaux en utilisant un schéma de nommage "hostname.local". Pour l'activer, installez le paquet nss-mdns et démarrez et/ou activez `avahi-daemon.service`.

Ensuite, éditez le fichier `/etc/nsswitch.conf` et modifiez la ligne `hosts` pour inclure `mdns_minimal [NOTFOUND=return]` avant `resolve` et `dns` :

    hosts : mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns

Note:

- Si vous rencontrez des ralentissements dans la résolution des hôtes `.local`, essayez d'utiliser `mdns4_minimal` au lieu de `mdns_minimal`.
- La ligne ci-dessus rend `nss-mdns` autoritaire pour le domaine `.local`, à moins que votre serveur DNS unicast ne réponde à des requêtes `SOA` pour le nom `local` de premier niveau, ou si la requête comporte plus de deux labels. Consultez les notes d'activation de `nss-mdns`.
  - systemd-resolved répond à ces requêtes même si son support mDNS est désactivé. Consultez #systemd-resolved empêche nss-mdns de fonctionner.

#### Configuration du mDNS pour un TLD personnalisé

Le module `mdns_minimal` gère uniquement les requêtes pour le TLD `.local`. TLD uniquement. Notez le `[NOTFOUND=return]`, qui spécifie que si `mdns_minimal` ne trouve pas `*.local`, il ne continuera pas à le chercher dans `dns`, `myhostname`, etc.

Si vous voulez qu'Avahi prenne en charge d'autres TLDs, vous devez :

- remplacer `mdns_minimal [NOTFOUND=return]` par le module `mdns` complet. Il existe également des modules IPv4 seulement et IPv6 seulement `mdns[46](_minimal)`
- Personnalisez `/etc/avahi/avahi-daemon.conf` avec le `domain-name` de votre choix.
- Liste blanche des TLD personnalisés d'Avahi dans `/etc/mdns.allow`.

#### Outils

Avahi comprend plusieurs utilitaires qui vous aident à découvrir les services fonctionnant sur un réseau. Par exemple, exécutez

    $ avahi-browse --all --ignore-local --resolve --terminate

pour découvrir les services de votre réseau.

Le navigateur Zeroconf d'Avahi (`avahi-discover`) - notez qu'il nécessite les dépendances facultatives d'Avahi gtk3, dbus-python et python-gobject) affiche les différents services de votre réseau. Vous pouvez également parcourir les serveurs SSH et VNC en utilisant respectivement `bssh` et `bvnc`.

### Pare-feu

Assurez-vous d'ouvrir le port UDP `5353` si vous utilisez un pare-feu.

### Chat local (Bonjour/Zeroconf)

Avahi peut être utilisé pour prendre en charge le protocole Bonjour sous Linux. Consultez Wikipedia:Comparison of cross-platform instant messaging clients ou List of applications#Instant messaging clients pour obtenir une liste des clients prenant en charge le protocole Bonjour.

### Obtention de l'adresse IPv4LL

Par défaut, si vous obtenez une IP en utilisant DHCP, vous utilisez le paquet dhcpcd. Il peut tenter d'obtenir une adresse IPv4LL s'il n'a pas réussi à en obtenir une via DHCP. Par défaut, cette option est désactivée. Pour l'activer, commentez la chaîne noipv4ll :

    /etc/dhcpcd.conf

    ].
    ...
    #noipv4ll
    ...

Alternativement, exécutez `avahi-autoipd` :

    # avahi-autoipd -D

## Ajout de services

Avahi annonce les services dont les fichiers `*.service` se trouvent dans `/etc/avahi/services`. Les fichiers de ce répertoire doivent être lisibles par l'utilisateur/groupe `avahi`.

Si vous voulez faire la publicité d'un service pour lequel il n'existe pas de fichier `*.service`, il est très facile de créer le vôtre. Par exemple, disons que vous voulez faire la publicité d'un service de citation du jour (QOTD) fonctionnant selon la RFC:865 sur le port TCP `17` que vous exécutez sur votre machine.

La première chose à faire est de déterminer le `<type>`. avahi.service(5) indique que le type doit être "le type de service DNS-SD pour ce service, par exemple '_http._tcp'". Comme le registre DNS-SD a été fusionné dans le registre IANA en 2010, nous recherchons le nom du service sur le registre IANA ou dans le fichier `/etc/services`. Le nom du service qui y figure est `qotd`. Puisque nous exécutons QOTD sur tcp, nous savons maintenant que le service est `_qotd._tcp` et que le port (selon l'IANA et la RFC 865) est `17`.

Notre fichier de service est donc :

    qotd.service

    <?xml version="1.0" standalone='no'?><!--*-nxml-*-->
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">

    <service-group>

      <name replace-wildcards="yes">%h</name>

      <service>
        <type>_qotd._tcp</type>
        <port>17</port>
      </service>

    </service-group>

Pour des scénarios plus compliqués, tels que les services de publicité fonctionnant sur un serveur différent, les sous-types DNS et ainsi de suite, consultez avahi.service(5).

### SSH

Avahi est livré avec un exemple de fichier de service pour annoncer un serveur SSH. Pour l'activer :

    # cp /usr/share/doc/avahi/ssh.service /etc/avahi/services/

### Partage de fichiers

#### NFS

Si vous avez configuré un partage NFS, vous pouvez utiliser Avahi pour pouvoir les monter automatiquement dans les navigateurs compatibles avec Zeroconf (comme Konqueror sur KDE et Finder sur macOS) ou les gestionnaires de fichiers comme GNOME/Files.

Créez un fichier `.service` dans `/etc/avahi/services` avec le contenu suivant :

    /etc/avahi/services/nfs_Zephyrus_Music.service

    <?xml version="1.0" standalone='no'?>
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    <service-group>
      <name replace-wildcards="yes">NFS Music Share on %h</name>
      <service>
        <type>_nfs._tcp</type>
        <port>2049</port>
        <txt-record>path=/data/shared/Music</txt-record>
      </service>
    </service-group>

Le port est correct si vous avez insecure comme option dans votre `/etc/exports` ; sinon, il doit être modifié (notez que insecure est nécessaire pour les clients macOS). Le chemin est le chemin de votre exportation, ou un sous-répertoire de celui-ci. Pour une raison quelconque, la fonctionnalité de montage automatique a été supprimée dans Leopard, mais un script est disponible. Ceci était basé sur ce post.

#### Samba

Si le daemon Avahi est exécuté à la fois sur le serveur et le client, le gestionnaire de fichiers du client devrait trouver automatiquement le serveur.

#### Vsftpd

Vous pouvez également détecter automatiquement les serveurs FTP ordinaires, tels que vsftpd. Installez le paquet vsftpd et modifiez les paramètres de vsftpd en fonction de vos préférences personnelles (consultez cette discussion sur ubuntuforums.org ou vsftpd.conf(5)).

Créez un fichier `.service` dans `/etc/avahi/services` avec le contenu suivant :

    /etc/avahi/services/ftp.service

    .
    <?xml version="1.0" standalone='no'?>
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    <service-group>
      <name>Partage de fichiers FTP</name>
      <service>
        <type>_ftp._tcp</type>
        <port>21</port>
      </service>
    </service-group>

Le serveur FTP devrait maintenant être annoncé par Avahi. Vous devriez maintenant être en mesure de trouver le serveur FTP à partir d'un gestionnaire de fichiers sur un autre ordinateur de votre réseau. Vous devrez peut-être activer la #Résolution des noms d'hôtes sur le client.

### AirPrint à partir d'appareils mobiles

Avahi, avec CUPS, offre également la possibilité d'imprimer sur à peu près n'importe quelle imprimante à partir d'appareils mobiles compatibles Airprint. Afin d'activer la capacité d'impression à partir de votre appareil, il suffit de créer un fichier de service Avahi pour votre imprimante dans `/etc/avahi/services/`. Un exemple de fichier de services générique pour une imprimante HP-Laserjet serait similaire à ce qui suit, les champs `name`, `rp`, `ty`, `adminurl` et `note` ayant été modifiés.

    /etc/avahi/services/airprint.service

    <?xml version="1.0" standalone='no'?><!--*-nxml-*-->
    <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
    <service-group>
      <name>votrePrnterName</name>
      <service>
        <type>_ipp._tcp</type>
        <sous-type>_universel._sub._ipp._tcp</sous-type>
        <port>631</port>
        <txt-record>txtver=1</txt-record>
        <txt-record>qqv1</txt-record>
        <txt-record>rp=printers/yourPrnterName</txt-record>
        <txt-record>ty=votrePrnterName</txt-record>
        <txt-record>adminurl=http://198.168.7.15:631/printers/yourPrnterName</txt-record>
        <txt-record>note=Office Laserjet 4100n</txt-record>
        <txt-record>priority=0</txt-record>
        <txt-record>product=(GPL Ghostscript)</txt-record>
        <txt-record>printer-state=3</txt-record>
        <txt-record>printer-type=0x801046</txt-record>
        <txt-record>Transparent=T</txt-record>
        <txt-record>Binary=T</txt-record>
        <txt-record>Fax=F</txt-record>
        <txt-record>Color=T</txt-record>
        <txt-record>Duplex=T</txt-record>
        <txt-record>Staple=F</txt-record>
        <txt-record>Copies=T</txt-record>
        <txt-record>Collage=F</txt-record>
        <txt-record>Punch=F</txt-record>
        <txt-record>Bind=F</txt-record>
        <txt-record>Sort=F</txt-record>
        <txt-record>Scan=F</txt-record>
        <txt-record>pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf</txt-record>
        <txt-record>URF=W8,SRGB24,CP1,RS600</txt-record>
      </service>
    </service-group>

Alternativement, https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py peut être utilisé pour générer des fichiers de service Avahi. Il dépend de python et python-pycups. Le script peut être exécuté en utilisant :

    # python3 airprint-generate.py -d /etc/avahi/services

Note: Si votre imprimante sous http://localhost:631/printers est "Not Shared", ce script python ne produira aucun fichier dans /etc/avahi/services ; dans ce cas, vous devrez "Modify Printer" dans l'un des menus déroulants de CUPS pour activer le partage. Si cela ne fonctionne pas, consultez l'ArchWiki sur le partage d'imprimante CUPS.

## Dépannage

### Changements de nom d'hôte avec ajout de nombres incrémentaux

Il s'agit d'un bug connu qui est causé par une condition de concurrence de nom d'hôte. Une solution possible est de désactiver IPv6 pour essayer d'empêcher la condition de concurrence. Si plusieurs interfaces sont présentes, utiliser allow-interfaces pour limiter Avahi à une seule interface. Une autre solution possible est de désactiver le cache pour empêcher Avahi de vérifier les conflits de noms d'hôtes, mais cela empêche Avahi d'effectuer des recherches.

### systemd-resolved empêche nss-mdns de fonctionner

nss-mdns ne fonctionne que si le serveur DNS listé dans `/etc/resolv.conf` renvoie NXDOMAIN aux requêtes SOA pour le domaine "local". [1] Même si systemd-resolved est configuré avec `MulticastDNS=no` dans resolved.conf(5), il ne renverra pas NXDOMAIN pour ces requêtes. Consultez le problème 21659 de systemd.

Une solution consiste à utiliser le module NSS `mdns` complet au lieu de `mdns_minimal` et de créer `/etc/mdns.allow` pour autoriser uniquement le domaine "local". Par exemple :

    /etc/nsswitch.conf

    hosts : mymachines mdns [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns

    /etc/mdns.allow

    .local.
    .local

## Voir aussi

- Avahi - Site officiel du projet
- Wikipedia:fr:Avahi (logiciel)
- iTunes (inclus Bonjour) - Configurer Zeroconf pour Windows
- http://www.zeroconf.org/

Category:

- Multicast DNS (Français)