Mdns-bridge
Brücke zwischen MDNS und DNS
Das Problem
mDNS ist eine Technologie, mit der Teilnehmer eines Netzes Dienste im Netzwerk bekannt machen können. Das funktioniert häufig ganz gut - aber spezielle Software muss bei jedem Teilnehmer installiert sein, damit Dienste auch gefunden werden.
Für einen so zentralen Dienst wie es die Namensauflösung ist, ist das natürlich problematisch - Clients können zunächst einmal nur per DNS Netzwerknamen auflösen und finden damit mDNS-Workstations nicht.
Die Lösung
Eine mDNS-DNS Brücke löst dieses Problem. In kurzen Intervallen werden per alle mDNS Ankündigungen im Netzwerk abgehört und dabei gefundene Netzteilnehmer dem DNS-Server bereitgestellt.
Das Setup sieht wie folgt aus:
- Eintragen der Brücke in einen häufigen (minütlich?) Cron-Job
- Die Brücke schreibt eine Datei im Stil von /etc/hosts. Diese Datei wird dem DNS-Server als zusätzliche Datenquelle für Namensauflösung bekannt gemacht.
Setup
Eine aktuelle Version dieses Programms kann unter https://kdserv.dyndns.org/svn/freifunk-icvpn/scripts/mdnstohosts heruntergeladen werden. Nutzername und Passwort sind jeweils "freifunk" ohne die ""
Neben dem script muss das Paket avahi-utils installiert sein.
Einrichtung:
- speichern des scripts in /usr/bin/mdnsbridge
- Einrichten eines Cron-Eintrags in /etc/crontab
* * * * * root /usr/bin/mdnsbridge
- Eintragen der folgenden Zeile in /etc/dnsmasq/dnsmasq.conf
addn-hosts=/tmp/mdns_hosts
Alternative Lösung
Eine Alternative stellt ein minimaler DNS-Server dar, der alle Namen unter eine Subdomain auf .local mappt und auflöst.
Ein solcher Server findet sich unter http://git.universe-factory.net/mdns-resolver/plain/mdns-resolver ; er ist in Ruby geschrieben und benötigt Ruby 1.9 und eine spezielle net-dns-Version mit einigen Bugfixes (die hoffentlich bald auch upstream sind), die man unter https://github.com/NeoRaider/net-dns finden kann. Die Konfiguration erfolgt im Kopf des Scriptes und sollte selbsterklärend sein, wenn man schon mal irgendwas mit DNS gemacht hat.
Da das Script zur Auflösung von .local-Domains auf die getaddrinfo-Funktion des Systems zurückgreift, muss das System, auf dem das Script läuft, in der Lage sein, diese Domains aufzulösen (mdns-Eintrag in nsswitch.conf).
Fragen zum Script können im Freifunk-IRC-Channel an neoraider gerichtet werden.