Zeroconf
Zeroconf oder Zero Configuration Networking ist ein Vorhaben für die selbständige Konfiguration von Rechnernetzen ohne Eingriffe durch Menschen. Es wird hauptsächlich in Netzwerken genutzt, in denen eine Administration des Netzwerkes unpraktisch ist, wie bei Heimnetzwerken oder kleinen Firmennetzwerken.[1]
Hintergrund
Die entsprechende Arbeitsgruppe der Internet Engineering Task Force schloss mangels Konsens ohne Ergebnis.[1] Sie arbeitete von 1999 bis 2004. Ihre Ziele waren:
- automatische Zuordnung einer eigenen IP-Adresse, der Netzmaske und einer IP-Adresse eines Routers
- Namensauflösung
- Suchfunktion nach Diensten
- Zuordnung von Multicast-Adressen
- unbeeinträchtigte Sicherheit.
Die Arbeitsgruppe relativierte Zero (Null) dahingehend, dass „wenig Konfiguration“ besser als „ohne Sicherheit“ sei.[1]
2005 wurde nachträglich RFC 3927 über die automatische Konfiguration von IPv4 in Local Area Networks ohne das Dynamic Host Configuration Protocol veröffentlicht. Dieser Text wurde von Mitarbeitern der Unternehmen Apple, Microsoft und Sun Microsystems verfasst und dokumentiert auch verwandte frühere Implementierungen von AutoIP oder Automatic Private IP Addressing (APIPA). Verbindungen in andere Netze als das Internet sind bei all dem ausgeschlossen. Die IPv6 Stateless Address Autoconfiguration nach RFC 4862 ist darin flexibler.
Das einfachste Einsatzszenario ist es, zwei Computer mit einem Crossover-Kabel zu verbinden. Jedes Gerät sucht sich dann automatisch eine freie IP-Adresse und kann anschließend mittels Internet Protocol (IP) unter dieser Adresse angesprochen werden. Diese Aufgabenstellung ist nicht neu und wurde mit AppleTalk unter Mac OS und NetBIOS unter Windows schon weitgehend gelöst. Zur Nutzung muss man allerdings die IP-Adresse der Gegenstelle kennen, weshalb Zeroconf weiter zielt.
Automatische IP-Zuweisung
Dabei handelt es sich um einen auf dem Address Resolution Protocol (ARP) aufbauenden Mechanismus, um für eine Netzwerkschnittstelle automatisch eine freie IP-Adresse auszuwählen. Für diesen Zweck ist von der IANA der Adressbereich 169.254.0.0/16 vorgesehen, wobei die ersten und die letzten 256 Adressen in diesem Bereich für zukünftige Anwendungen reserviert sind. Der Dienst für die automatische IP-Adressierung heißt Internet Protocol Automatic Configuration (IPAC).
Wenn ein Rechner eine Link-Local-IP-Adresse konfigurieren will, wählt er eine zufällige IP-Adresse zwischen 169.254.1.0 und 169.254.254.255 aus. Bei der Erzeugung der IP-Adresse sollte eine rechnerspezifische Information einfließen, wie etwa die MAC-Adresse der Netzwerkschnittstelle, damit möglichst jedes Mal dieselbe IP-Adresse generiert wird (sie wird also nur pseudozufällig gewählt).
Nach der Auswahl seiner IP-Adresse muss der Rechner diese für sich beanspruchen und testen, ob diese nicht bereits von einem anderen Rechner verwendet wird. Dieser Test muss durchgeführt werden, bevor die IP-Adresse als Senderadresse in IP- oder ARP-Paketen verwendet wird, und genau dann, wenn eine Netzwerkschnittstelle aktiviert wird. Das kann etwa das Einschalten oder Rebooten des Rechners, das Aufwachen aus einem Sleep-Modus, das Einstecken eines Ethernet-Kabels oder das automatische Einhängen eines Rechners in ein WLAN sein.
Explizit verboten ist, diese Überprüfung periodisch durchzuführen, da das eine Verschwendung von Netzwerkressourcen darstellen würde und im eigentlichen Test auf Adresskonflikte schon eine Möglichkeit vorgesehen ist, eventuelle Konflikte auch passiv zu erkennen und darauf zu reagieren.
Die Überprüfung von Adressen auf Konflikte erfolgt mit Hilfe von ARP-probes. Ein ARP-probe ist ein ARP-Paket, bei dem die Absender-IP-Adresse auf 0.0.0.0 gesetzt wird und als Empfänger-IP-Adresse die zu überprüfende Adresse verwendet wird.
Sobald der Rechner bereit ist, mit der Konfliktüberprüfung zu beginnen, wartet er eine zufällig lange Zeit zwischen 1 und 2 Sekunden, und sendet dann drei ARP-probes mit einem zufälligen Zeitabstand von 1 bis 2 Sekunden aus. Empfängt der Rechner zwischen dem Testanfang und 2 Sekunden nach Versenden der letzten ARP-probe ein ARP-Paket, bei dem die Absender-IP-Adresse der zu überprüfenden IP-Adresse entspricht, so wurde ein Konflikt gefunden. Der Rechner muss diese Prozedur dann mit einer anderen generierten IP-Adresse wiederholen.
Wird in diesem Zeitraum ein anderes ARP-probe empfangen, das als Empfänger-IP-Adresse die zu testende IP-Adresse enthält, und deren Absender-MAC-Adresse keiner der MAC-Adressen der Netzwerkschnittstelle des Rechners entspricht, so muss vom Rechner ebenfalls eine neue IP-Adresse generiert und überprüft werden. Das kann beispielsweise passieren, wenn zwei oder mehrere Rechner gleichzeitig versuchen, dieselbe Link-Local-Adresse zu konfigurieren.
Um ARP-Stürme und damit eine Überlastung des lokalen Netzwerkes zu vermeiden, wenn es zu mehreren Konflikten kurz hintereinander kommt, muss jeder Rechner nach zehn Fehlversuchen die Geschwindigkeit, mit der er neue Adressen auswählt und überprüft, auf maximal eine Überprüfung pro Minute reduzieren.
Konnte der Rechner keinen Konflikt feststellen, so hat er erfolgreich die generierte IP-Adresse für sich beansprucht. Er muss diese dann bekannt machen, indem er zwei ARP-announcements mit einem Abstand von 2 Sekunden versendet. Ein ARP-announcement unterscheidet sich von einem ARP-probe nur dadurch, dass als Absender- und Empfänger-IP-Adresse die neu ausgewählte Link-Local-IP-Adresse eingesetzt wird.
Die Erkennung von Konflikten muss dauerhaft auch nach dem Auswählen einer verwendbaren IP-Adresse stattfinden. Empfängt der Rechner ein ARP-Paket, das von einem anderen Rechner versendet wurde, und als Sender-IP-Adresse die eigene IP-Adresse enthält, so handelt es sich um einen Adressenkonflikt.
Der Rechner hat nun zwei Möglichkeiten, nämlich eine neue IP-Adresse auszuwählen oder seine IP-Adresse zu verteidigen. Letzteres ist zu bevorzugen, wenn der Rechner noch TCP-Verbindungen offen hat. Wurden noch keine kollidierenden ARP-Pakete empfangen, erfolgt die Verteidigung der Adresse durch den Rechner dadurch, dass dieser ein ARP-announcement aussendet. Konnte der Rechner jedoch in den letzten Sekunden schon einen Adresskonflikt feststellen, so muss er eine neue IP-Adresse auswählen, um eine Endlosschleife zu vermeiden, wenn zwei Rechner mit gleicher IP-Adresse versuchen, diese gegenüber dem anderen zu verteidigen.
Multicast DNS
Anwendung | Multicast DNS | |||
Transport | UDP | |||
Netzwerk | IP (IPv6, IPv4) | |||
Netzzugang | Ethernet | Token Ring | FDDI | … |
Die Probleme, Namen und IP-Adressen ohne DNS-Server zu übersetzen sowie einen Mechanismus zum automatischen Veröffentlichen und Finden von Netzdiensten verfügbar zu haben, wurden von der Zeroconf Working Group praktischerweise zusammengefasst und in Form der zwei grundsätzlich unabhängigen, jedoch einander gut ergänzenden Protokolle Multicast DNS (mDNS) und DNS-Based Service Discovery (DNS-SD) zu Papier gebracht.
mDNS ist dabei nichts anderes als eine Beschreibung, wie Clients verfahren müssen, wenn sie DNS-Anfragen an Multicast-Adressen senden, und wie eine Gruppe von Rechnern damit umgeht, sodass die Anfrage richtig und ohne erhöhte Last auf dem Netzwerk beantwortet wird. DNS-SD dagegen spezifiziert eine Konvention für die Verwendung von existierenden DNS-Record-Typen, die das Browsen und Veröffentlichen von Netzwerkdiensten mit DNS ermöglicht.[2]
mDNS legt fest, dass die DNS-Top-Level-Domain „.local.“ link-lokal ist. Anfragen und Antworten, die mit „.local.“ zu tun haben, ergeben ähnlich IP-Adressen aus dem 169.254.0.0/16- bzw. fe80::/10-Bereich nur im lokalen Netz Sinn. Alle DNS-Abfragen für Namen, die auf „.local.“ enden, müssen mit UDP und IP Multicast an die mDNS-Multicast-Adresse (IPv4: 224.0.0.251, IPv6: ff02::fb, UDP-Port 5353) gesendet werden. Ist kein anderer DNS-Server verfügbar, können auch Anfragen, die nicht auf „.local.“ enden, an diese Adresse gesendet werden.
Jedem Rechner steht es übrigens frei, sich einen eigenen Rechnernamen aus der „.local.“-Domain auszuwählen. Im Gegensatz zu anderen, öffentlichen Top-Level-Domains gibt es keinerlei Formalitäten, außer dass bereits vergebene Rechnernamen nicht mehr verwendet werden sollten. Natürlich kann es in der Praxis zu Konflikten kommen, von den Erfindern von mDNS wurde das aber als sehr unwahrscheinlich angenommen. Eine Konfliktlösung wird sogar bewusst nicht diskutiert, da es sinnvolle Anwendungen für den Fall geben kann, dass mehrere Rechner den gleichen Namen tragen – etwa für Lastverteilungs- oder Hochverfügbarkeits-Lösungen.
Soll über eine Reverse-Mapping-DNS-Abfrage der Hostname zu einer link-lokalen IP-Adresse ermittelt werden, so muss auch diese an die mDNS-Multicast-Adresse (siehe oben) gesendet werden.
Vermeidung redundanten Netzwerkverkehrs
Um den Netzwerkverkehr möglichst gering zu halten, haben sich die Erfinder von mDNS ein paar Verhaltensregeln einfallen lassen, die doppelte oder gar mehrfache mDNS-Abfragen und -Antworten verhindern sollen.
Known Answer Suppression
Eine Möglichkeit zur Unterdrückung von bereits bekannten Antworten besteht darin, dass der Client, der eine mDNS-Abfrage versendet, schon bekannte Antworten, die noch in seinem Cache zu finden sind, als Answer Records an seine Abfrage anhängt. Sieht nun ein anderer Client, der die Abfrage beantworten könnte, seine vorgeschlagene Antwort in der Liste der bereits gegebenen Antworten und ist die TTL (Time to live) noch mehr als die Hälfte der üblichen TTL, muss er diese nicht mehr versenden. Ist die TTL zu gering, muss der andere Client eine Antwort versenden, um die im Cache des ersten Clients gespeicherte TTL zu aktualisieren.
Duplicate Question Suppression
Wenn mehrere Clients in etwa zur selben Zeit dieselbe Abfrage versenden würden, käme es zu redundantem Netzwerkverkehr. Plant ein Client eine Anfrage zu versenden und sieht eine Abfrage eines anderen Clients desselben Inhalts, sollte er die fremde Abfrage als seine eigene betrachten und die Antwort darauf verwenden, anstatt eine eigene Abfrage zu versenden.
Duplicate Answer Suppression
Wenn ein Server, während er die Versendung einer Antwort vorbereitet, eine Antwort eines anderen Servers desselben Inhalts sieht und die TTL (Time to live) der fremden Antwort nicht kleiner als die der eigenen geplanten ist, dann sollte er seine Antwort als gesendet betrachten (also keine eigene Antwort senden).
Implementierungen
Die erste Implementierung von Zeroconf wurde von Apple durchgeführt und heißt Bonjour (früher Rendezvous). Es ist seit der Version 10.2 („Jaguar,“ 2002) in Mac OS X – 2016 umbenannt in macOS – integriert, und Apple liefert die meisten Programme, soweit es sinnvoll ist, mit Bonjour-Funktionalitäten aus.
Eine Komponente von Bonjour ist das mDNSResponder-Projekt, das von Apple im Sourcecode unter der Apache-Lizenz veröffentlicht wurde. mDNSResponder implementiert dabei mDNS und DNS-SD. Es wurde von Apple portierbar entworfen und implementiert, so dass der Quelltext nicht nur unter Mac OS X ab 10.2, sondern auch unter Linux, FreeBSD, NetBSD, OpenBSD, Solaris, VxWorks, Mac OS 9 und Windows ohne Anpassungen übersetzt werden kann.
Ein bekannter Fehler in der mDNS-Implementierung von Apple führt unter Windows 7 häufig zu dem Problem, dass ein Default-Gateway von 0.0.0.0 eingetragen wird, der zeitlich vor dem per DHCP bezogenen Gateway herangezogen wird und damit die Internet-Verbindung des Rechners effektiv lahmlegt.[3] Eine einfache Lösung ist hier die Deaktivierung des Bonjour-Dienstes per Service-Manager.[4]
Mit Avahi existiert weiterhin eine freie (LGPL) und portierfähige Implementierung von mDNS/DNS-SD, die heutzutage in allen Linux-Distributionen Standard ist.
Damit unter Linux die Namensauflösung bei der Top-Level-Domain .local wie gewohnt über den DNS-Server (z. B. BIND) abgewickelt wird, ist bei älteren Implementierungen der Eintrag mDNS off
in der Datei /etc/host.conf
erforderlich.[5]
Microsoft
Microsoft APIPA
Microsofts APIPA soll es Heimanwendern ermöglichen, ein TCP/IP-Netzwerk betreiben zu können, ohne sich mit der IP-Adressierung und deren IP-Parametern auseinandersetzen zu müssen. Das Betriebssystem versucht zuerst einen DHCP-Server zu erreichen. Ist ein solcher nicht erreichbar, so wird automatisch eine zufällige Adresse aus dem Bereich 169.254.x.x vergeben.[6]
In Windows ist die automatische IP-Adressen-Vergabe APIPA seit Windows 98 implementiert. Sie entspricht jedoch nicht vollständig dem RFC der IETF.[7] Microsoft nennt dieses Verfahren Automatic Private IP Addressing oder kurz APIPA.[8]
DNS-SD
- Microsoft unterstützt teilweise DNS-SD in Windows 10. Die Unterstützung wurde schrittweise eingebaut und diente ursprünglich nur innerhalb Windows dazu, dass ein Windows-10-Client IPP-Drucker im lokalen Netz finden kann. Mittlerweile wird DNS-SD auch für das Ankündigen und Finden von drahtlosen Anzeigegeräten in einem lokalen Netzwerk verwendet.
- Für Programmierer ist DNS-SD über das Windows.Networking.ServiceDiscovery.Dnssd API verfügbar.[9]
- Ein Windows-10-Kommandozeilen-Werkzeug für DNS-SD ist nur von Fremdfirmen, zum Beispiel als Teil von Apples Bonjour für Windows, verfügbar.
- Im Windows-Subsystem für Linux (WSL) ist DNS-SD durch Avahi verfügbar.
mDNS
- In Windows 10 kann im Entwickler-Modus Device-Discovery aktiviert werden.[10] Dies aktiviert Multicast-Unterstützung im DNS-Client.
- Für Windows IoT ist ein mDNS-Antwortdienst von Microsoft im Quelltext verfügbar.[11]
- In WSL ist mDNS über Avahi verfügbar.
Weitere Protokolle
Je nach Windows-Version und -Konfiguration sind weitere proprietäre Microsoft-Protokolle wie LLMNR, NBNS und SSDP verfügbar. Microsoft rät von der Verwendung von NBNS ab.
Normen und Standards
- S. Cheshire, B. Aboba, E. Guttman: RFC – Dynamic Configuration of IPv4 Link-Local Addresses. Mai 2005 (englisch).
- S. Cheshire, M. Krochmal: RFC – Multicast DNS. Februar 2013 (englisch).
- S. Cheshire, M. Krochmal: RFC – DNS-Based Service Discovery. Februar 2013 (englisch).
Weblinks
- Avahi
- mDNSResponder
- zeroconf.org – Offizielle Webseite der IETF Zeroconf Working Group
- wxServDisc (wxWidgets)
- JmDNS (Java)
Einzelnachweise
- ↑ a b c Zero Configuration Networking (zeroconf). Internet Engineering Task Force, abgerufen am 29. April 2012.
- ↑ S. Cheshire, M. Krochmal: RFC – DNS-Based Service Discovery. Februar 2013 (englisch).
- ↑ Windows 7 network system tray icon displays "Internet access" when there is none. Abgerufen am 13. Oktober 2019 (amerikanisches Englisch).
- ↑ Microsoft Knowledge Base: The Default Gateway may have been set to 0.0.0.0 on a Windows Vista-based or later OS running Apple’s Bonjour service
- ↑ Support | Name Resolution Problems with ".local" Domains. Abgerufen am 14. April 2017.
- ↑ APIPA - Computer Lexikon - Fachbegriffe verständlich erklärt | PC, EDV Glossar. Abgerufen am 12. Juni 2020.
- ↑ APIPA. (Nicht mehr online verfügbar.) Archiviert vom am 20. November 2010; abgerufen am 25. Oktober 2010 (englisch).
- ↑ Automatische TCP/IP-Adressierung ohne einen DHCP-Server. Abgerufen am 25. Oktober 2010.
- ↑ Windows.Networking.ServiceDiscovery.Dnssd Namespace. Abgerufen am 31. August 2020 (englisch).
- ↑ Weitere Features im Entwicklermodus. Abgerufen am 31. August 2020.
- ↑ Erste Schritte mit der Beispielquelle des mDNS-Antwortdiensts. Abgerufen am 31. August 2020.