ubuntuusers.de

Avahi

Dieser Artikel gilt größtenteils unabhängig von der Ubuntu-Version.

Dieser Artikel wurde für die Ubuntu-Version Noble Numbat getestet. Es wird erwartet, dass er wesentlich auch auf nachfolgende Versionen anwendbar ist. Bitte melde abweichendes Verhalten in der Diskussion zu diesem Artikel.

./avahi_logo.png Avahi 🇬🇧 ist eine freie Implementation von Zeroconf[1].

Die Basisfunktion einer Versorgung mit einer IPv4-Adresse APIPA (auch IPv4LL, 169.254/16) kann Avahi optional übernehmen, wie im Übersichtsartikel[1] beschrieben.

Der in diesem Artikel beschriebene DAEMON avahi-daemon realisiert bei Ubuntu-Desktops die im Übersichtsartikel[1] beschriebenen höheren Funktionen mDNS und DNS-SD von Zeroconf. Bei einem Ubuntu-Server kann systemd-resolved für diese Funktionen benutzt werden.

Die Pakete für Avahi beschreiben sich selbst so:

Avahi ist ein vollständiges, unter der LGPL stehendes, Rahmenwerk für die Multicast-DNS-Diensteerkennung. Es ermöglicht Programmen, Dienste und Rechner in einem lokalen Netzwerk bekanntzugeben bzw. zu entdecken, ohne dass eine besondere Konfiguration nötig wäre. Man kann sich zum Beispiel mit einem Netzwerk verbinden und augenblicklich Drucker, freigegebene Dateien und Menschen, mit denen man sich unterhalten kann, finden.

Installation

Auf Ubuntu-Desktops wird Avahi bereits bei der Installation mit installiert. Auf einem Server benötigt man in der Regel die Dienste von Zeroconf nicht. Man kann sie mit systemd-resolved – allerdings ohne benutzerfreundliche Visualisierung – realisieren, oder man kann Avahi über folgende Pakete installieren[2][3][6], was aber die Namensauflösung per systemd-resolved beeinträchtigt:

  • avahi-daemon (Avahi mDNS/DNS-SD-Daemon, aus main)

  • libnss-mdns (optional, NSS-Modul für die Auflösung von Multicast-DNS-Namen, aus main)

Befehl zum Installieren der Pakete:

sudo apt-get install avahi-daemon libnss-mdns 

Das Paket avahi-daemon 🇬🇧 enthält den DAEMON, libnss-mdns 🇬🇧 bringt Plugins für die Namensauflösung der GNU C Library (glibc); die Plugins befragen den laufenden DAEMON.

Optional kann man einige nützliche Hilfsprogramme installieren:

  • avahi-utils (Avahi-Werkzeuge zum Browsen, Veröffentlichen und Entdecken, aus main)

Befehl zum Installieren der Pakete:

sudo apt-get install avahi-utils 

Dieses Paket enthält u.a. Programme für die Kommandozeile, mit denen man die Arbeit des DAEMONs abfragen und steuern kann:

bzw. ⚓︎

  • avahi-ui-utils (Avahi-Werkzeuge mit grafischer Oberfläche (GTK+), aus universe)

Befehl zum Installieren der Pakete:

sudo apt-get install avahi-ui-utils 

Dieses Paket enthält grafische Werkzeuge, mit denen man im Netzwerk angebotene SSH-Server bzw. VNC-Server finden und Sitzungen zu diesen starten kann.

bzw.

  • avahi-discover (Benutzerschnittstelle zur Diensteerkennung für avahi, aus universe)

Befehl zum Installieren der Pakete:

sudo apt-get install avahi-discover 

Dies istalliert den Avahi Zeroconf Browser.

DAEMON steuern

Der DAEMON kann wie üblich über systemd gesteuert werden[3][4][6]:

systemctl [status|start|stop|restart|force-reload|reload] avahi-daemon.service 

Avahi stoppen

Neben der Unit avahi-daemon.service gibt es noch die Unit avahi-daemon.socket, die dafür sorgt, dass nach einem Absturz des DAEMONs dieser wieder automatisch gestartet wird. Wenn man daher den Service wirklich stoppen will, muss man zuvor den Socket stoppen:

systemctl stop avahi-daemon.socket avahi-daemon.service 

Avahi deaktivieren

Hat man keine Verwendung für Avahi, so kann man den Dienst deaktivieren. Dazu beide Units stoppen und dann die Units für den automatischen Start beim Systemstart deaktivieren:

systemctl disable avahi-daemon.socket avahi-daemon.service 

Wenn man systemd-resolve für mDNS/DNS-SD verwenden will, sollten man dies unbedingt beachten, denn die beiden vertragen sich nicht.

Konfiguration

Avahi kommt mit einer funktionsfähigen Basiskonfiguration. Dieses Kapitel ist daher nur wichtig, wenn man das Verhalten optimieren möchte.

Der DAEMON wird über die Datei /etc/avahi/avahi-daemon.conf konfiguriert. Diese Textdatei steht im INI-Format und kann mit einem Texteditor[3][5] mit Root-Rechten[6] bearbeitet werden. Zulässige Zeilen sind:

  • Überschriften für Abschnitte (sections) in eckigen Klammern []: [server], [wide-area], [publish], [reflector], [rlimits]

  • Einstellungen in der Form "Name=Wert": Im Gegensatz zu den Initialisierungsdateien anderer Programme akzeptiert Avahi keine Leerzeichen vor dem Zeichen =.

  • Kommentarzeilen, die mit einem Zeichen # in der ersten Spalte beginnen müssen. Zeilenendkommentare sind nicht erlaubt.

  • Leerzeilen, die wie Kommentarzeilen ignoriert werden.

Jede Zeile muss mit einen Zeilenumbruch (ASCII 10) enden.

Die zulässigen Namen, zulässige Werte und Vorgaben kann man der ManPage zu avahi-daemon.conf entnehmen.

Die Datei /etc/avahi/avahi-daemon.conf beschreibt, „wie“ der Dienst arbeiten soll, aber nur sehr rudimentär, „was“ publiziert werden soll; dafür gibt es pro Dienst eine XML-Datei im Ordner /etc/avahi/services/. ▶ Dienste veröffentlichen

Grundeinstellungen

Im Abschnitt [Server] kann man u.a. festlegen, welche Schnittstellen und welche Protokolle benutzt werden.

Beispiel:

1
2
3
4
5
[server]
use-ipv4=yes
use-ipv6=no
deny-interfaces=lo,
allow-interfaces=

Mit diesen Einstellungen wird nur IPv4 verwendet. Alle Schnittstellen außer lo werden für Ankündigungen benutzt und können Anfragen empfangen, weil eine leere Liste für allow-interfaces alle lokalen Schnittstellen außer lo und Punkt-zu-Punkt-Verbindungen erlaubt. Diese Einstellung verbietet aber noch nicht die Ankündigung von IPv6-Adressen per IPv4, siehe dafür folgenden Abschnitt.

Diese Restriktionen sind sinnvoll, wenn das lokale Netzwerk viele Stationen umfasst, und die Kapazität des Netzwerks dadurch spürbar belastet wird, oder wenn man in Übersichten die Übersichtlichkeit durch redundante Informationen verliert.

Veröffentlichung steuern

Der folgende Teil aus /etc/avahi/avahi-daemon.conf auf einem Desktop (26.04) zeigt in Kommentarzeilen die Vorgaben für die möglichen Einstellungen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[publish]
#disable-publishing=no
#disable-user-service-publishing=no
#add-service-cookie=no
#publish-addresses=yes
#publish-hinfo=no
#publish-workstation=no
#publish-domain=yes
#publish-dns-servers=
#publish-resolv-conf-dns-servers=no
#publish-aaaa-on-ipv4=yes
#publish-a-on-ipv6=no

publish-aaaa-on-ipv4= no
  • Die letzte Zeile verbietet eine Veröffentlichng der IPv6-Adressen über das Protokoll IPv4.

  • Wer nicht möchte, dass Avahi Dienste in das lokale Netzwerk publiziert, kann diese Funktion deaktivieren. Dadurch ist es weiterhin möglich, die per Avahi annoncierten Dienste anderer Rechner zu benutzen, ohne selbst als Dienst zu erscheinen. Über die Option:

    disable-publishing=yes

    wird Avahi fast ganz deaktiviert, selbst die Auflösung des lokalen Namens auf einem anderen Rechner funktioniert dadurch nicht mehr. Das Durchstöbern des Netzwerks nach Avahi-Diensten ist jedoch weiterhin möglich.

  • Die Option

    disable-user-service-publishing=yes

    erlaubt die Veröffentlichung von Rechnername und IP-Adressen, unterbindet aber das Veröffentlichen weiterer Dienste.

Dienste finden

Man kann nur die Dienste finden, die ihre Existenz auch per DNS-SD ankündigen. Viele Programme machen das bereits selber, bei anderen kann man es durch Bereitstellung einer Textdatei erledigen, siehe: hier

Viele Client-Programme enthalten auch einen speziellen DNS-SD-Browser für jeweils geeignete Server und bieten dem Bediener gefundene Server zum „Verbinden per Anklicken“ an. Beispiele dafür sind Dateimanager für Datei-Freigaben im Netzwerk und system-config-printer für Drucker.

Eine unvollständige Übersicht von Applikationen, welche Funktionen von Avahi benutzen, findet man im Artikel Avahi/Anwendungen.

Man kann außerdem einen allgemeinen Browser benutzen.

Schließlich kann man auch die Kommandozeile bemühen:

avahi-browse -t _services._dns-sd._udp 

oder

avahi-browse -at 

bringt eine Liste erkannter Dienste. Diese Liste kann unvollständig sein, weil die Option -t den Befehl nach einem Timeout beendet. Die Dienste werden vom zweiten Befehl mit Klartextnamen wie z.B. "Microsoft Windows Network" für einen SMB-Dateiserver gelistet. Wenn man weitergehend Informationen sehen will, benötigt man aber den technischen Namen des Dienstes, der mit der zusätzlichen Option -k angezeigt wird:

avahi-browse -akt 

Die Beispielausgabe

+  APIPA IPv4 MARIA                                         _smb._tcp            local

steht für eine über die lokale Schnittstelle APIPA per Protokoll IPv4 vom Rechner mit dem Namen MARIA empfangene Ankündigung eines SMB-Servers in der mDNS-Domäne local.

Weitere Informationen erhält man durch Auflösung des mDNS-Records mit der Option -r:

avahi-browse -rt _smb._tcp 

Beispielausgabe:

+  APIPA IPv4 MARIA                                         Microsoft Windows Network local
=  APIPA IPv4 MARIA                                         Microsoft Windows Network local
   hostname = [Maria.local]
   address = [169.254.86.145]
   port = [445]
   txt = []

Rechnernamen und IP-Adressen

Avahi realisiert u.a. die von Zeroconf[1] definierten Dienste mDNS zur Übersetzung zwischen Rechnernamen und zugehörigen IP-Adressen in beide Richtungen. zu den technischen Grundlagen lese Artikel Zeroconf[1] den Abschnitt zu mDNS.

Man kann mit Avahi einen Rechner im Netzwerk nur finden, wenn er sich auch finden lassen will. Dazu muss der Rechner mindestens seinen Namen und seine IP-Adresse per Avahi veröffentlichen.

⚓︎

Namensauflösung mit mDNS

Avahi dient unter anderem der Namensauflösung im lokalen Netzwerk ohne Verwendung eines DNS-Servers. Dies funktioniert sobald auf beiden Rechnern, also sowohl dem lokalen als auch auf dem, dessen Namen bzw. IP-Adresse man erfragen will, Avahi als Dienst läuft. Avahi wird Namen und IP-Adresse(n) im Netzwerk publizieren. Auf dem abfragenden Rechner muss man an den Rechnernamen die mDNS-Domäne, standardmäßig .local anhängen. Befehl zum Testen:

avahi-resolve-host-name -4 lieselotte.local 

Beispielausgabe:

Lieselotte.local	169.254.160.214

Das funktioniert auch in der anderen Richtung:

avahi-resolve-address 169.254.160.214 

Beispielausgabe:

169.254.160.214	Lieselotte.local

Wenn die Namensauflösung funktioniert, dann kann man z.B über

ping -4 -c1 lieselotte.local 

einen Rechner anpingen oder andere Netzwerkdienste wie z.B. SSH benutzen:

ssh -4 lieselotte.local 

⚓︎

Dienste veröffentlichen

Avahi kann Netzwerkdienste im lokalen Netz ankündigen.

Datei-Freigaben

Das funktioniert beispielsweise für Datei-Freigaben über die Protokolle in folgender Tabelle 1.

Tabelle 1: Dateifreigaben veröffentlichen
Protokoll Type Port Beschreibung
NFS _nfs._tcp 2049 Ankündigung einer Freigabe per "Network File System". Siehe Artikel Howto/NFS-Testserver für ein konkretes Beispiel.
SSH _sftp-ssh._tcp 22 Siehe folgendes Beispiel.
SMB _smb._tcp 445
WebDAV _webdav._tcp 80 Dieses Protokoll ist eine Variante von HTML und dient hauptsächlich zur Realisierung von Dateiservern im Internet, aber man kann so etwas natürlich auch im LAN einsetzen.
WebDAVs _webdavs._tcp 443
FTP _ftp._tcp 21
AFS _afpovertcp._tcp 548 Ein Server mit dem "Apple Filing Protocol", auch bekannt als AppleTalk. Das wird in der Regel ein Gerät mit einem Betriebssystem von Apple sein, welches seine Dienste im Netzwerk per Bonjour ankündigt. Bonjour ist die Vorlage für Avahi. Es gibt aber auch mit dem Paket netatalk 🇬🇧 eine Implementierung von AppleTalk für Linux.

Der Server muss Avahi anweisen, seine Dienste zu veröffentlichen. Dazu muss auf dem Server für die Freigabe mittels eines Text-Editors[5] mit Root-Rechten[6] eine XML-Datei im Ordner /etc/avahi/services angelegt werden, wie im folgenden Beispiel verdeutlicht:

  • Man kann dazu eine Vorlage kopieren und anpassen, beispielsweise für eine Freigabe per SFTP:

    sudo cp /usr/share/doc/avahi-daemon/examples/sftp-ssh.service /etc/avahi/services 
  • In der Kopie ändert man im Element name den Namen, mit dem dieser Dienst im Dateimanager auf dem Client erscheint. Der Platzhalter %h wird Avahi durch den Rechnernamen ersetzen. Außerdem muss man im Element type den für den Server richtigen Typ gemäß Tabelle 1 eintragen und natürlich auch den richtigen Port.

  • Wenn die Freigabe nicht nur angezeigt, sondern auch per Klick eingebunden werden soll, muss man noch mindestens einen txt-record hinzufügen, der beim Einbinden ausgewertet werden kann.

  • ⚓︎Eine fertige Datei kann z.B. so aussehen:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    <?xml version="1.0" standalone='no'?>
     <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
     <service-group>
       <name replace-wildcards="yes">SFTP-Server %h</name>
       <service>
         <type>_sftp-ssh._tcp</type>
         <port>22</port>
         <txt-record>path=/</txt-record>
         <txt-record>u=benutzer</txt-record>
       </service>
     </service-group>
    
  • Neue oder geänderte Dateien werden automatisch von DAEMON gelesen und umgesetzt, sofern sie keine syntaktischen Fehler enthalten. Das sollte man in den Meldungen der Unit kontrollieren:

    systemctl status avahi-daemon.service
    journalctl -b -u avahi-daemon.service 

Auf den Clients erscheinen dann die Zugriffsmöglichkeiten im Dateimanager unter „Netzwerk durchsuchen“ oder nach Eingabe des speziellen Ortes network:, aus denen man sie auch direkt durch Anklicken öffnen kann. Das Programm Gigolo stellt diese Netzwerklaufwerke ebenfalls dar und ermöglicht auch deren direkte Nutzung. Man kann auch einen allgemeinen Browser z.B. wie avahi-discover verwenden.

Weitere Dienste

In ähnlicher Weise kann man auch andere Dienste, wie z.B. Shell-Zugänge per SSH, grafische Ferndesktops via RDP oder VNC im Netzwerk veröffentlichen. Diese erscheinen dann z.B. in speziellen Browsern.

Ein weiteres Beispiel sind Netzwerkdrucker, die über den Browser in system-config-printer auffindbar sind.

Tabelle 2: Auswahl weiterer Dienste zur Veröffentlichung
Protokoll Type Port Beschreibung
SSH _ssh._tcp 22 Verschlüsselter Fernzugriff per Kommandozeile
VNC _rfb._tcp 5900+N Virtual Network Computing: Fernzugriff auf Desktop über das unverschlüsselte „Remote-Framebuffer-Protokoll“
RDP 3389 Fernzugriff auf Desktop über das unverschlüsselte "Remote Desktop Protocol"
IPP _ipp._tcp 631 Drucker und Druckdienste per IPP

Sonderfälle

Für manche Freigaben, beispielsweise per Samba oder Drucker per CUPS benötigt man u.U. keine eigene Datei, da diese Server-Programme das selber auf anderem Wege regeln.

Eine Alternative zur Veröffentlichung über eine XML-Datei bietet das Kommandozeilenprogramm avahi-publish

Hilfsprogramme

./avahi_discovery.png

Avahi Discovery

Man kann mit grafischen Anwendung Avahi-Discover das Netzwerk nach Diensten durchsuchen. So erfährt man, welche Dienste im Netzwerk verfügbar sind und wenn Dienste neu gefunden wurden. Die Ergebnisse werden in einer Baumansicht dargestellt. Klick man auf einen Dienst, so erhält man weitere Informationen zu diesem.

Aufruf z.B.:

  • Anwendungen → Systemwerkzeuge → Avahi Zeroconf Browser

avahi-browse

Dieses bereits oben vorgestellte Programm aus dem Paket avahi-utils leistet auf der Kommandozeile vergleichbares zu Avahi-Discover.

avahi-publish

Dieser Befehl veröffentlicht eine Adresse oder einen Dienst ohne dass es dafür einer XML-Datei bedarf. Man gibt ersatzweise die relevanten Daten auf einer Kommandozeile ein.

  • Syntax zur Veröffentlichung einer Adresse:

    avahi-publish-address RECHNERNAME ADRESSE 
  • Konkretes Beispiel:

    avahi-publish-address fritz.box 169.254.1.1 
  • Syntax zur Veröffentlichung eined Dienstes:

    avahi-publish-service RECHNERNAME TYPE PORT 
  • Konkretes Beispiel:

    avahi-publish-service Drucker _ipp._tcp 631 

Die jeweiligen Daten werden für die Laufzeit des Befehls, der manuell beendet werden muss, veröffentlicht.

avahi-resolve

Dieser Befehl wurde oben bereits vorgestellt.

⚓︎

Avahi und Microsoft Windows

Apple hat für Avahi/Zeroconf (bei Apple Bonjour genannt) einen Client 🇬🇧 für Microsoft Windows geschrieben. Nach Installation des Clients funktioniert beispielsweise die Auflösung lokaler Rechnernamen über rechnername.local. Zusätzlich wird in die Werkzeugleiste des Internet Explorers eine Schaltfläche eingeblendet, über die sich die im lokalen Netzwerk vorhandenen Webserver anzeigen lassen.

Avahi Server Browser

Die beiden grafischen Anwendungen Avahi-SSH-Server-Browser und Avahi-VNC-Server-Browser aus dem Paket avahi-ui-utils durchsuchen das Netzwerk ähnlich wie Avahi Discovery, aber speziell nach den jeweiligen Servern.

Aufruf der Programme z.B. beim Desktop Gnome aus dem Menü:

  • Anwendungen → Internet → Avahi SSH-Server-Browser

  • Anwendungen → Internet → Avahi VNC-Server-Browser

Man kann durch Anklicken eine Sitzung starten.

Beispiel

Innerhalb eines Netzwerkes kann man dank Avahi plattformunabhängig chatten und (teilweise auch) Dateien versenden. Instant Messenger wie Pidgin (Abschnitt „Zeroconf-Avahi“) und Empathy oder auch iChat sowie Adium (beide Mac OS X) unterstützen diese Funktion. Einfach auf dem Rechner z.B. Pidgin öffnen und unter "Account → Hinzufügen → Protocol:Bonjour" auswählen. Den bevorzugten Benutzernamen wählen und fertig. Jetzt kann man von allen anderen Computern innerhalb des selben Netzwerks (LAN) gesehen und angeschrieben werden.

Problembehebung

Siehe hierzu den entsprechenden Abschnitt im Übersichtsartikel[1]: Zeroconf (Abschnitt „Problembehebung“)

Diese Revision wurde am 24. Oktober 2026 16:07 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, System, Zeroconf