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.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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
nameden Namen, mit dem dieser Dienst im Dateimanager auf dem Client erscheint. Der Platzhalter%hwird Avahi durch den Rechnernamen ersetzen. Außerdem muss man im Elementtypeden 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-recordhinzufü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¶
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“)
Links¶
Projektseite 🇬🇧
Verwendung von Avahi im Heimnetzwerk 🇩🇪 - Blogbeitrag, 02/2009
Walk of Fame 🇩🇪 - Artikel im Linux Magazin zu Avahi/Zeroconf, 03/2006