Vermittlungsprotokoll

Komfort im LAN mit Bonjour

Praxis & Tipps | Praxis

Über die Netzwerktechnik Bonjour können sich Geräte selbstständig im LAN konfigurieren und man kann deren Dienste ohne Kenntnis von IP-Adressen oder Namen finden.

Jedes Mal, wenn ein neues Gerät in ein LAN eingebunden wird, beginnt auch der Konfigurationsreigen von vorn: Drucker einrichten, die Freigaben der übrigen LAN-Stationen eintragen oder auch Musik-, Video- und sonstige Server einbinden. Zieht ein Server mal auf einen anderen PC um, wiederholt sich das Spiel. Den Profi-Administrator, der große Netze betreuen muss, nervt das, den unfreiwilligen Heim-Administrator stellt es vor hohe Hürden.

Beides kann Apples Netzwerkdienst Bonjour ersparen, denn die 2002 zunächst unter dem Namen Rendezvous in Mac OS X 10.2 implementierte Software ermöglicht eine weitgehende Autokonfiguration. Inzwischen hat Apple das System in Bonjour umbenannt und auch für Windows und Linux angepasst; Distributionen wie Suse 10.1 bringen es von Haus aus mit.

Es gibt Bonjour-Implementationen von Dritten – auf manchen Linux-Distributionen wird das viel versprechende Avahi mitgeliefert (z. B. Debian, Fedora oder Ubuntu). Howl, das teilweise auf Apple-Sourcen aufsetzt, und sich zudem auch für Windows kompilieren ließ, wird seit kurzem nicht mehr weiterentwickelt. Im Weiteren gehen wir aber nur auf die Apple-Implementierung ein, weil sie für Mac OS X, Linux und Windows weitgehend einheitlich ist.

In diesem Beitrag zeigen wir, wie man den Apache-Webserver auf Mac OS X für Bonjour einrichtet und allgemein via Bonjour Dienste im LAN registriert. Damit lässt sich für Server, Chat-Programme oder Multi-User-Textverarbeitungen Bonjour-Komfort simulieren und man kann den Zugriff auf Netzwerk-Geräte erleichtern, die von Haus aus kein Bonjour an Bord haben.

Richtet man Apache für Bonjour ein, könnten Unternehmen sämtliche Informationen für neue Kollegen auf Webservern vorhalten und über Bonjour annoncieren, sodass man etwa Adress-Datenbanken, Faxnummern, Formulare und anderes Material ohne langwierige Fragen finden kann. Hat man einmal solche Hinweisschilder im LAN aufgestellt, können die Server durchaus auch IP-Adressen wechseln – Bonjour aktualisiert die Informationen auf der Client-Seite umgehend. Das erspart dem Administrator die Kleinarbeit, jedem einzelnen LAN-Nutzer mitzuteilen, was sich geändert hat und funktioniert zuverlässig.

Teilweise greift Bonjour auf bereits bekannte Techniken zurück, etwa APIPA für die selbstständige Wahl einer eindeutigen IPAdresse – also ohne DHCP-Server. Eine der wesentlichen Neuerungen ist aber, dass bei Bonjour-Geräten die Namensvergabe ohne zentralen DNS abläuft und die Geräte ihre Dienste selbst annoncieren respektive abfragen können. So meldet sich zum Beispiel Apples Musik-Player iTunes als Musik-Server, wenn man die MP3-Sammlung im LAN freigibt und Drucker melden sich im Netzwerk selbstständig – man kann sie auf PCs also ohne Kenntnis ihrer Drucker-IP-Adressen einrichten.

Der Traum der Apple-Entwickler, ein LAN, an das man neue Geräte lediglich anstöpseln muss, erfüllt sich also allmählich. Doch viele Peripheriegeräte, die über einen LAN-Anschluss verfügen, lassen Bonjour vermissen. Sie bringen zwar einen DHCP-Client mit und weil in den meisten LANs ein DHCP-Server aktiv ist, erhalten sie auch eine IP-Adresse, doch anschließend harren sie, dass der Nutzer herausfindet, auf welche IP-Adresse sie hören und mit der Einrichtung fortfährt.

Das ist zum Beispiel bei DSL-Routern oder auch WLAN-Access-Points der Fall; man konfiguriert sie in der Regel über einen Webbrowser. Mit Bonjour ausgestattet, würden die Webbrowser Internet Explorer und Safari sie umgehend in einer Liste aufführen, sodass man ohne Umschweife darauf zugreifen könnte.

Wie man Bonjour in Hardware implementiert, beschreibt Apple zwar, und es gibt auch eine Bonjour-Mailing-Liste, in der Entwickler bei Problemen Hilfestellung finden, aber für ältere Netzwerkgeräte wird es keine Firmware-Updates geben, die die Bonjour-Funktion nachrüsten.

Man kann sich jedoch mit einem PC, auf dem Bonjour bereits eingerichtet ist, und einer wenig beachteten Bonjour-Funktion behelfen: Der PC kann nämlich mit wenig Aufwand auch Dienste anderer Geräte im LAN annoncieren. Das bürdet zwar dem Netzwerk-Administrator etwas Arbeit auf, aber es entlastet sein Gedächtnis und erleichtert LAN-Neulingen die Orientierung.

Das Prinzip ist einfach: Anwendungen übergeben einen Satz von Dienstemerkmalen an einen Bonjour-Daemon, und dieser reicht die Information standardisiert über Multicast-DNS-Pakete auf UDP-Port 5353 an Teilnehmer des eigenen Sub-Netzes weiter. Üblicherweise sind Router so konfiguriert, dass sie Multicast-DNS-Pakete nicht aus dem LAN hinausbefördern. Die von Bonjour annoncierten Dienste sind im Internet also normalerweise nicht sichtbar, die Privatheit bleibt gewahrt.

Auf den LAN-Stationen geht die Information den umgekehrten Weg, von Bonjour zu den daran angemeldeten Client-Anwendungen. Deshalb erfährt Apples Musik-Player iTunes umgehend, wenn eine Musik-Freigabe im Netz hinzugekommen ist. Nimmt der Anbieter die Freigabe zurück, werden die LAN-Stationen ebenso darüber unterrichtet und die dort laufenden Client-Programme tilgen dann den Eintrag aus ihren Listen.

dns-sd -B _http._tcp local.
Browsing for _http._tcplocal.
Timestamp A/R Flags if Domain Service Type Instance Name
17:23:26.634 Add 3 4 local. _http._tcp. hp LaserJet 4200 (00306EFDD4CB)
17:23:26.636 Add 3 4 local. _http._tcp. hp LaserJet 1320 series (9B1874)
17:23:26.636 Add 3 4 local. _http._tcp. macserver
17:23:26.636 Add 3 4 local. _http._tcp. iCals
17:23:26.637 Add 3 4 local. _http._tcp. rosinante
17:23:26.637 Add 3 4 local. _http._tcp. Mini-Archiv (dz)
17:23:26.638 Add 3 4 local. _http._tcp. Bonjour-Tools
17:23:26.638 Add 3 4 local. _http._tcp. Ingo T. Storms iMac G5
17:23:26.638 Add 2 4 local. _http._tcp. Christian Persson

Mit dns-sd kann man alle im LAN annoncierten Web-Services anzeigen lassen.

Ein vollständiges Bild über die annoncierten Dienste verschaffen Bonjour-Browser. Für Mac OS X gibt es einige solcher Programme, die alle gemeldeten Dienste nach Art, Port oder IP-Adresse der anbietenden LANStation sortieren. Eines der interessantesten ist Observation Post, das man als Application Launcher für Bonjour Services nutzen kann – klickt man auf einen Eintrag einer fremden LAN-Station, öffnet Observation Post auf dem lokalen Mac das mit dem Bonjour-Service assoziierte Programm – zum Beispiel die Shell für ssh-Verbindungen oder das Printer Setup Utility für die Drucker-Einrichtung.

Auf anderen Betriebssystemen sind solche Browser mit grafischem User-Interface noch selten. Man kann jedoch auf Java-Implementationen oder auf Kommandozeilenprogramme wie dns_sd zurückgreifen. Im Weiteren gehen wir auf Letztere ausführlich ein, weil sie auf Mac OS X, Windows und Linux gleich bedient werden und weil man damit nicht nur Dienste abfragen, sondern auch annoncieren kann.

Die Bonjour-Funktionen sind weitgehend im Daemon mDNSResponder implementiert (auf manchen Systemen auch mdnsd genannt), den der jeweilige Bonjour-Installer auf dem PC einrichtet (Windows, Linux oder Mac OS X). Läuft der Daemon, nimmt dieser PC automatisch an der Bonjour-Kommunikation teil. Ein zentraler mDNS-Server ist nicht vorgesehen.

Ein User-Interface bringt der mDNSResponder nicht mit. Die Applikationen greifen auf dessen Funktionen über das Bonjour-Framework zu und üblicherweise findet man in den Anwendungen Schalter, über die sich Bonjour-Annoncen ein- oder ausschalten lassen. Zusätzlich kann man den mDNSResponder-Daemon mit dem Kommandozeilenprogramm dns-sd nutzen. Das bringen Mac OS X ab Version 10.4 sowie Suse ab Version 10.1 mit (wie man ältere Suse-Versionen mit dnssd nachrüstet, findet sich im Kasten Suse sagt Bonjour). Beim BonjourSetup für Windows fehlt dns-sd, aber es ist immerhin Bestandteil des Bonjour SDK für Windows. Die Sourcen setzen Windows 2003 SDK, Visual Studio 2003 sowie das Driver Development Kit voraus. Wer diese umfangreichen Pakete nicht installieren will, kann statt des Bonjour SDK auch JmDNS verwenden.

Um etwa Web-Services im LAN anzeigen zu lassen, startet man dns-sd mit dem Parameter -B und gibt eine Domain (in der Regel .local) sowie einen "Service Type" an, zum Beispiel "_http._tcp" für Webserver. Die Domain .local nutzt Bonjour von Haus aus, um auch Dienste per DNS verwalten zu können.

Die Zahl der inzwischen registrierten Service Types ist enorm. Das dürfte auch daran liegen, dass man eigene Service Types mit nur geringem Aufwand registrieren lassen kann – eine Mail mit einer Hand voll Angaben genügt.

Dns-sd koppelt sich nach dem Start dauerhaft an den mDNSResponder und liefert nach kurzer Zeit eine Tabelle, die es so lange aktualisiert, bis man es via CTRL-C beendet.

Startet man dns-sd mit der Option -R, lässt sich ein neuer Service registrieren. So können interessierte Entwickler mit Bonjour erste Erfahrungen sammeln, ohne gleich eigene Programme entwickeln zu müssen. Als weitere Parameter übergibt man dem Kommando einen Label (z. B. WindowsWebServer), den Service Type und die Portnummer; der letzte Parameter, das beschreibende TXT-Feld kann leer bleiben:

dns-sd -R WindowsWebServer _http._tcp. local. 80 ""

Bonjour prüft dann, ob das Label Windows-WebServer für den avisierten Service Type noch frei ist, meldet den Dienst gegebenenfalls an und berichtet "Name now registered and active" – der Service ist nun so lange im LAN sichtbar, wie dns-sd läuft. Mit JmDNS sieht das Befehlsformat nur geringfügig anders aus:

java -jar jmdns.jar -rs WindowsWebServer _http._tcp  local. 80 path=dz/index.html

Dieser Befehl meldet einen Webservice namens WindowsWebServer an und führt Webbrowser über Port 80 zum Unterverzeichnis dz, sodass sie automatisch die dort deponierte Index-Datei öffnen.

Virtual Host auf Mac OS X: Für die grundlegende Einrichtung genügen schon wenigen Einträge. Die Hauptarbeit erledigt das Programm Server Admin.

Eine wenig beachtete Möglichkeit von Bonjour ist die Proxy-Funktion. Damit kann man Dienste stellvertretend für Geräte annoncieren, die kein Bonjour haben, etwa Webcams, Printer-Server, Router, DVB-Receiver und überhaupt beliebige via TCP/IP erreichbare Geräte.

Prinzipiell braucht man dafür drei Parameter: das Protokoll, das der Dienst nutzt, die IP-Adresse und die Port-Nummer, auf der das Gerät horcht. Das Protokoll entnimmt man der Service-Types-Liste [8], die Port-Nummer der Dokumentation des Geräts und die IPAdresse kann man aus der Gerätekonfiguration auslesen.

Bei Tools wie Network Beacon für Mac OS X ist die Proxy-Funktion über eine hübsche grafische Oberfläche zugänglich. Weil Network Beacon aber so lange laufen muss, wie der Dienst annonciert werden soll, stört es, dass die Anwendung Arbeitsspeicher und Platz auf dem Desktop belegt. Das kann man ökonomischer auch mit dns-sd über die Option -p haben:

dns-sd -P Bullauge _rfb._tcp "" 5900 Bullauge.local  192.168.20.167

Im obigen Beispiel wird der VNC-Service für einen PC mit der IP-Adresse 192.168.20.167 unter dem Label Bullauge annonciert – das Label darf beliebigen, bis zu 63 Zeichen langen Text enthalten. VNC ist eine Software für die Fernsteuerung von PCs; rfb steht für Remote Frame Buffer, die von den VNC-Entwicklern verwendete Bezeichnung für deren Remote-Control-Protokoll.

Ein Mausklick genügt, um auf einem Mac-OS-X-Server das Bonjour- Modul für Apache einzuschalten.

Kombiniert man dns-sd mit ssh, kann man nicht nur Bonjour-Dienste von einem fremden Netz in sein eigenes holen (tunneln), sondern auch im eigenen LAN annoncieren. Für LAN-Kollegen sieht der getunnelte Dienst aus, als käme er aus dem eigenen LAN. Das kann nützlich sein, wenn eine Firma zum Beispiel auf Server einer Filiale ohne aufwendige VPN-Installation zugreifen will. Es gibt dafür bereits einige spezielle Programme, etwa RNSplicer für Mac OS X oder mTunnel für Windows, doch sind manche davon nur umständlich zu bedienen. Zudem ist die vom Japanischen ins Englische übersetzte Bedienungsanleitung des RNSplicer nur mit Mühe zu verstehen, sodass wir hier einen einfacheren Weg zeigen, der zudem auf allen Betriebssystemen funktioniert, auf denen ssh verfügbar ist.

Zunächst "holt" man per ssh den Dienst des entfernten Servers ins eigene LAN:

ssh -C -g -L 55000:remote.machine.net:80  >user<@remote.machine.net

Die Option -C schaltet die ssh-eigene Kompression ein und -L die Port-Weiterleitung – der Port 80 des entfernten Servers remote.machine.net wird lokal über Port 55000 angesprochen. Statt Port 55000 kann man einen beliebigen freien Port verwenden.

Ein zusätzlicher Trick ist noch erforderlich, damit Stationen des lokalen LAN an den Port 55000 ankoppeln können – dafür setzt man die Option -g ein. Kommt die Verbindung zustande, öffnet man in der Firewall den Port 55000, damit sie Verbindungsversuche von LAN-Stationen durchlässt und annonciert dann den Dienst:

dns-sd -P cubeTest _http._tcp "" 55000 cubeTest.local  192.168.20.100

192.168.20.100 ist die IP-Adresse des Rechners, der die ssh-Verbindung hält und den Dienst annonciert. In diesem Beispiel wird der auf remote.machine.net laufende Webserver annonciert. Entsprechend kann man auch andere Dienste heranholen und etwa Musik vom heimischen iTunes in der Firma hören:

ssh -g -L 55000:remote.machine.net:3689 user@remote.machine.net
dns-sd -P Jukebox _daap._tcp "" 55000 Jukebox.local 192.168.20.100

Die ssh-Kompression (-C) lässt man dabei besser weg, weil MP3-Streams ohnehin kaum komprimierbar sind.

Als erster Webserver lernte Apache für Mac OS X, sich ohne fremde Hilfe via Bonjour zu erkennen zu geben. Das erste Apache-Modul namens mod_rendezvous hat Eric Seidel für Mac OS X entwickelt. Für den Internet Information Server plant die Firma STG ein Bonjour-Plug-in. Auf Linux-Plattformen mit Avahi kann man die Annoncierungstechnik über das Modul mod_dnssd nutzen. Die einzelnen Schritte sind ausführlich beschrieben.

Kaum dokumentiert ist hingegen mod_bonjour, das Apple inzwischen mit Mac OS X 10.4 liefert. Wer Apache auf Mac OS X in Betrieb nimmt, wird zunächst vielleicht überrascht sein, dass er von Haus aus scheinbar keinen Gebrauch vom mitgelieferten Bonjour- Modul macht. Das hat zwei Gründe: Von Haus aus werden nur die Sites von Usern annonciert, die ihre Homepage editiert haben und die Haupt-Site wird gar nicht annonciert. Man kann die Apache-Annoncierung aber schnell einschalten, indem man in der Datei httpd.conf ein Kommentarzeichen entfernt. Fügt man der Datei ein bisschen mehr Text hinzu, kann man sogar mehr als eine Annonce für denselben Apache-Server einrichten. Zunächst öffnet man httpd.conf mit einem Texteditor, etwa pico. Dafür sind Administrator-Rechte erforderlich:

sudo pico /etc/httpd.conf

Nach der Eingabe des Administrator-Passworts stellt man sicher, dass am Ende der Liste der zu ladenden Module das Bonjour-Modul geladen wird – entfernt also gegebenenfalls das Kommentarzeichen:

LoadModule bonjour_module
libexec/httpd/mod_bonjour.so

Weiter unten am Ende des Abschnitts "Reconstruction of the complete module list…" sollte stehen:

AddModule mod_bonjour.c

Das Abschnittsende "VirtualHost" sollte etwa so aussehen; entscheidend sind die Zeilen "RegisterResource …":

<IfModule mod_bonjour.c>
# Nur die Seiten der User, die ihre default home
# page editiert haben, werden annonciert
RegisterUserSite customized-users
#RegisterUserSite all-users
# Die Annoncierung ist in der Grundeinstellung
# abgeschaltet, also Kommentarzeichen löschen
RegisterDefaultSite
# für jede optionale Bonjour-Annonce legt man einen
# zusätzlichen Eintrag an
RegisterResource "Mini-Archiv (dz)" "/~dz/PC/"
RegisterResource "Bonjour-Tools" "/~dz/Bonjour"
</IfModule>

Nach dem Speichern startet man den Apache-Server neu, beispielsweise so:

sudo apachectl restart

Hat alles geklappt, zeigen Browser mit Bonjour-Technik die neuen Annoncen als separate Server im Bereich Bonjour an, nämlich "Mini-Archiv (dz)" und "Bonjour-Tools". Wenig bekannt ist der "Trick", mit dem man einen Mac-OS-X-Server mit mehreren Webservern und zugehörigen IP-Adressen dazu bringt, alle korrekt per Bonjour zu annoncieren.

Zunächst legt man Virtual Hosts an. Die kann man bequem mit Apples Programm Server Admin erstellen; die zugehörigen Einträge legt das Programm im Ordner /etc/httpd/sites ab. Für eine Grundausstattung genügen Einträge in den Feldern Domain Name, IP Adress sowie Web folder (siehe Abbildung "Virtual Host auf Mac OS X"). Im Abschnitt Options kann man zudem je nach Anwendungszweck einen der Einträge Folder Listing, WebDAV, CGI Execution, WebMail oder Server Side Includes eintragen. Den Performance Cache sollte man grundsätzlich einschalten.

Der virtuelle Host ist dann im Prinzip schon erreichbar, und zwar über die zugewiesene IP-Adresse sowie den Port, der in der Datei /etc/httpd/sites/virtual_host_global.conf angegeben ist. Diese Datei legt Server Admin automatisch gemäß den Administrator-Vorgaben an. Im einfachsten Fall stehen darin zwei Zeilen, etwa diese:

Listen 192.168.22.160:16080
NameVirtualHost 192.168.22.160:16080

Anschließend erzeugt man einen Ordner, der die Webseiten des Virtual Host enthalten soll. In diesem Beispiel heißt der Virtual Host "Portier":

sudo mkdir /Library/WebServer/Documents/Portier/
sudo chgrp www /Library/WebServer/Documents/Portier/
sudo chmod 775 /Library/WebServer/Documents/Portier/

Für einen ersten Test kann man zum Beispiel die Datei index.html aus /Library/WebServer/Documents/ dort hinein kopieren:

sudo cp /Library/WebServer/Documents/index.html /Library/WebServer/Documents/Portier/

Die Bonjour-Unterstützung ist auf dem Mac-OS-X-Server 10.4 von Haus aus abgeschaltet. Die erforderlichen Bonjour-Einträge in /etc/httpd.conf sind dieselben wie auf der Client-Version von Mac OS X ("LoadModule …" sowie "AddModule …"). Man muss sie jedoch nicht per Hand eingeben, sondern kann das Bonjour-Modul ebenfalls über das Programm Server Admin einschalten, nämlich im Abschnitt "Modules".

Ganz ohne manuelle Eingriffe geht es freilich nicht; man muss an das Ende der Datei httpd.conf die Bonjour-Parameter für den Virtual Host anfügen:

<IfModule mod_bonjour.c>
# Nur die Seiten der User, die ihre default home pages
# editiert haben werden annonciert
RegisterUserSite customized-users
# RegisterUserSite all-users
# Bonjour-Annoncierung ist in der Voreinstellung
# abgeschaltet, also Kommentarzeichen löschen
RegisterDefaultSite
# und nun die Virtual Hosts bei Bonjour registrieren
RegisterResource "iCals" "/iCals" 16080
RegisterResource "Portier" "/Portier" 16080
</IfModule>

Zu beachten ist, dass das Programm Server Admin nach jedem Speichern der Webserver-Einstellungen auch /etc/httpd.conf neu schreibt und dabei gelegentlich manuelle Einträge wie den obigen überschreibt. (rek)

Suse sagt Bonjour

Suse 10.1, das voraussichtlich im Mai in den Handel kommt, bringt bereits eine vollständige Bonjour-Implementation mit. Bei Suse 10 findet sich lediglich der mDNSResponder (mdnsd) im Lieferumfang, aber weder man-Pages noch dns-sd, und ältere Suse-Versionen lassen Bonjour ganz vermissen. Man kann aber das komplette mDNSResponder-Archiv von Apple mit ein wenig Handarbeit einrichten. RPMs gibt es dafür nicht, sodass man die Sourcen [4] kompilieren muss. Nach dem Entpacken des Archivs in ein beliebiges Verzeichnis wechselt man in das UnterVerzeichnis mDNSPosix und startet den Vorgang mit:

make os=linux

Anschließend würde man die Dateien via make install in die zugehörigen Systemverzeichnisse verteilen lassen, aber das scheitert bei der aktuellen Version mDNSResponder 107.5, weil das Makefile ein Start-Skript namens \u201emdns\u201c in den Ordner etc/init.d/ ablegen soll, jedoch nicht findet \u2013 weil es tatsächlich \u201emdnsd\u201c genannt wurde. Man kann das reparieren, indem man in der entsprechenden Zeile des makefile ein \u201ed\u201c ans Ende anfügt:

STARTUPSCRIPTNAME?=mdnsd

Browser-Mauser

Bonjour-Browser mit grafischer Benutzeroberfläche gibt es zwar für Mac OS X reichlich, aber auf anderen Betriebssystemen sind sie noch selten. So zeigt Apples Plug-in für den Internet-Explorer nur Webserver an und fragt übrige Bonjour-Services gar nicht erst ab. Ein Bonjour-Plug-in für Firefox gibt es bisher nicht. Immerhin kann man aber für den Windows Explorer ein Plug-in installieren, der Webserver im LAN anzeigt: den Zeroconf Neighborhood Explorer von STG. Klickt man darin einen Webserver an, reicht der Windows Explorer die URL an den voreingestellten Browser weiter – und das kann dann auch Firefox oder Opera sein.

Wer für Windows oder Linux einen Browser sucht, der alle Bonjour-Services in einem grafischen User-Interface anzeigt, kann auf das Python Bonjour Interface zurückgreifen, braucht aber Swig 1.3 zum Einrichten. Auf Linux-Rechnern, die Apples Bonjour-Version an Bord haben, kann man inzwischen Konqueror als Bonjour-Browser nutzen, indem man in der Adresszeile mdns:/ eingibt. Konqueror wie auch die meisten anderen Bonjour-Browser, löst die URLs jedoch nicht auf, sondern führt lediglich Teile der mDNSInformationen zu einem bestimmten Dienst oder Server auf (Protokoll, Port, IP-Adresse und dergleichen).

Anzeige