Apples Rendezvous(TM) in *BSD integrieren, Teil I

Alexco

Well-Known Member
Wer einen *BSD Server und mehrere Apple Clients pflegen muß, sollte sich mal mit Apples Rendezvous oder Zeroconf vertraut machen.

Apples Rendezvous konfiguriet bei OS X 10.2.4 und höher automatisch die Netzwerkkarten, und vergibt IP-Nummern aus einem dafür vorgesehenen IP-Adress-Bereich (wenn mittels DHCP oder manuell keine IP-Nummer vergeben wurde). Weiterhin werden sämtliche Dienste, die ein PC so anbieten kann, mittels "Multicast DNS" und "Service Discovery" zur Verfügung gestellt (Announcement), so daß der Anwender ohne Konfigurationsaufwand sofort diese Dienste nutzen oder gezielt danach suchen (Query) kann. Letzters funktioniert auch unter *BSD und Linux.

1. Installation

Auf obriger Apple Developer Seite gibt es den mDNSResponder als Sourcecode, den man nach kurzer Registrierung runterladen kann. Nach dem auspacken wechselt man ins Unterverzeichnis mDNSResponder-58/mDNSPosix/, und compiliert mittels "make os=freebsd", "make os=linux" oder "make os=openbsd" das Paket (Bei NetBSD sollte man einfach mal openbsd oder freebsd versuchen). Bei meinem FreeBSD 5.2RC klappte dies nur mit "gmake os=freebsd". Nun liegen im Unterverzeichnis "build" die nötigen Dateien für Rendezvous.

2. Einfache Konfiguration

Die für uns wichtige Datei ist "mDNSResponderPosix". Dieser Daemon lauscht auf port 5353 nach "Querys" oder "Announcements", und stellt die konfigurieten Dienste ins Netz. Sehen wir uns mal einen Eintrag aus der beigefügten Beispieldatei "Services.txt" an:

Tweedlebug
_afpovertcp._tcp.
name=val1
548

Als erstes kommt der Dienstname, hier Tweedlebug, gefolgt von der eigentlichen Servicebeschreibung. Diese setzt sich aus dem Dienst (afpovertcp) und dem Transport (tcp) zusammen. Als nächstes folgt ein Attributsstring, der sog. TXT. Hier können Konfigurationsanweisungen eingetragen werden, und zwar nach dem Schema "name=wert". Bis jetzt sind nur für Webserver und für Druckdienste diese offiziell spezifiziert (später). Als letzte Angabe folgt die TCP/IP-Port Nummer, hier 548. Obriges Beispiel würde also einem Apple unter Mac OS X 10.2.4 oder höher sagen, daß dieser Server einen Applefileserverdienst mit dem Namen "Tweedlebug" anbietet.
Die Namensauflösung funktioniert hierbei wie folgt. Die IP-Adresse des Servers, auf dem mDNSResponderPosix gestartet wurde, wird mittels DNS aufgelöst, und die Domain .local hinzugefügt. Alle Anfragen an die Dienste gehen dann über "hostname".local.
Wollen wir nun unsere eigenen Dienste mal konfigurieren. Fangen wir mit einem Web-Server an. Dieser hätte dann folgenden Eintrag:

Warpgate HTTP Service
_http._tcp.
path=/index.html
80

Dieses Beispiel würde einen Webserver "announcen", und würde dem Client sagen, er sollte mit dem Pfad /index.hmtl anfangen. Hier sieht man das für Webdienste einzig gültige TXT-Attribut "path", dem man natürlich eine komplette Pfadangabe angeben kann, oder auch einfach weglassen darf.
Diese Angabe hätte zur Folge, daß bei allen im Netz befindlichen Apple Clients im OS X eigenen Webbrowser Safari ein neuer Eintrag mit dem Namen "Warpgate HTTP Service" unter Lesezeichen/Rendezvous erscheinen würde.

Es gibt noch weitere Möglichkeiten, wie SMB oder FTP. Am Interessantesten ist aber wohl die Möglichkeit, Drucker zur Verfügung zu stellen. Diese werden dann mittels TXT-Attribut kofiguriert (Dies ist dann aber Teil II, wenn gewünscht :-)). Einen weiteren Eintrag mach noch jedes OS X System, und zwar _workstation._tcp. Den genauen Zweck konnte ich noch nicht ergründen, also wenn dort jemand was genaues weiß, immer her mit der Info. Aufgebaut ist dieser Eintrag so:

Warpgate [00:00:00:00:00:00]
_workstation._tcp

9

Als Name wird der Rechnername plus die MAC-Adresse der Ethernetkarte genommen, als Dienst _workstation._tcp, ein leerer TXT Eintrag und Portnummer 9.

So hier nun als abschließendes Beispiel meine Config-Datei:

Warpgate [00:00:00:00:00:00]
_workstation._tcp

9
Warpgate FTP Service
_ftp._tcp.

21

Warpgate SSH Service
_ssh._tcp.

22

Warpgate HTTP Service
_http._tcp.
path=/index.html
80

Warpgate SMB Service
_netbios-ssn._tcp

139

Warpgate NMB Service
_netbios-ns._udp

137

Mein Server "Warpgate" stellt also SSH, FTP, HTTP und SMB mittels Samba zur Verfügung.
Gestartet wird der Spass nun über
"mDNSResponderPosix -f "Konfig-Datei". Wenn Start als Daemon gewünscht, muss man noch ein "-b" hinzufügen (Ein Aufruf ohne Argumente gibt eine kleine Hilfe aus).

3. Die anderen Tools

Neben dem "mDNSResponderPosix" gibt es noch andere Tools im build-Verzeichnis:

mDNSClientPosix:
Wenn gestartet, zeigt er alle im Netz verfügbaren AppleFileServer an, allerdings kann er mittels Parameter auch andere Dienste suchen.

mDNSNetMonitor:
Alle empfangenen mDNS Angfragen werden angezeigt. Schmeisst einem sehr schnell die Konsole zu :-))

mDNSIdentify:
Wandelt eine IP-Adresse in einen .local Namen oder umgekehrt.

mDNSProxyResponderPosix:
Ein Proxyresponder ist nichts anderes als die Möglichkeit, ein nicht Rendezvous fähiges Gerät im Netz anzumelden. Zum Beispiel einen WLAN-Accespoint, der eine Konfiguration mittels Browser ermöglicht:

mDNSProxyResponderPosix 192.168.1.1 router "Router Configuration" _http._tcp. 80 path=/

Erstellt einen Eintrag mit dem Namen router.local, der IP 192.168.1.1 vom Typ _http._tcp, Port 80 unter dem Namen Router Configuration (Erscheint unter diesem Namen als Lesezeichen). Das TXT Attribut kann man hier auch weglassen, "/" ist der Defaultwert für "path".

Leider ist dieses Programm sehr ineffizient, da man pro Programm nur einen Dienst konfigurieren kann. Wenn man also viele Router hat, startet man viele Programme ......

So viel Spass beim rumkonfigurieren. Weitere Hilfen sind auch http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt, dort wird unter anderem der genaue Aufbau eines TXT Attributes beschrieben, oder http://www.tildesoft.com/, dort gibt es einen Browser für Rendezvous Dienste für Mac OS X.
Wenn ich dann wieder Zugang zu einem Postscript-Drucker habe, werde ich Teil II nachschieben, und zeigen, wie man mittels Rendezvous und CUPS Postscript Drucker freigibt.

bis dann,
Alex
 
tolles Howto schonmal vorneweg.

Alexco schrieb:
Leider ist dieses Programm sehr ineffizient, da man pro Programm nur einen Dienst konfigurieren kann. Wenn man also viele Router hat, startet man viele Programme ......

naja, so ganz klappt das (jedenfalls bei mir) noch nicht. Der Listener öffnet ja Port 5353 um auf Anfragen zu antworten, ein weiteres Programm meldet dann nurnoch der Port sei belegt.

Gerade versuche ich mit meinem vielleicht 2-zeiligem-C Wissen die Preference-Datei aus dem normalen Responder zu "portieren".

Wenn ich das in den nächsten Jahren irgendwie schaffen sollte, kann ich relativ leicht auch nicht-Rendezvous-fähige Software in meinem LAN publizieren.


Wann kommt denn Teil 2 deines Führers durch Zeroconf?
 
Zurück
Oben