Ich habe das folgende, sehr merkwürdige Problem mit der Verwendung von Avahi auf dem DreamPlug (einem Plug-Computer, auf dem Ubuntu Jaunty ausgeführt wird).
Nachdem ich Tage damit verbracht habe, denke ich, habe ich es geschafft, das Problem einzugrenzen.
Der DreamPlug fungiert als WLAN-Zugangspunkt und verfügt über den Hostnamen plug
und die IP-Adresse 192.168.1.1
(die in /etc/hosts
und festgelegt sind /etc/hostname
) und führt lighttpd aus.
Jetzt funktioniert mein Mac sofort mit dem Zugriff http://plug.local
auf Chrome. Wenn ich jedoch versuche, http://plug.local
das iPad zu laden , funktioniert dies nicht. Das heißt, es funktioniert erst, wenn ich die Seite auf den Desktop lade.
Aus irgendeinem Grund können die iPads den Hostnamen erst auflösen, wenn der Hostname zuerst auf dem Mac aufgelöst wurde. Das ist seltsam, weil es keine Verbindung zwischen den iPads und dem Mac gibt, außer der Tatsache, dass sie mit dem verbunden sind gleicher Zugangspunkt (der DreamPlug).
Um es noch einmal zu verdeutlichen: Safari auf dem iPad bleibt beim Zugriff hängen (bis es meldet, dass das Surfen fehlgeschlagen ist), es http://plug.local
sei denn, ich greife http://plug.local
auf den Mac zu, führe aus ping plug.local
, tue ssh root@plug.local
oder tue im Grunde genommen etwas anderes, das den Hostnamen auflöst Hostname und es beginnt ordnungsgemäß zu funktionieren.
Wenn ich das richtig verstehe, senden die iPads beim Verbinden eine Auflösungsanforderung für plug.local
. Aus irgendeinem Grund wird diese Anforderung vom DreamPlug ignoriert (oder sie wird nie empfangen). Der Mac schafft es jedoch, seine Anfrage zu senden. Es sendet eine Auflösungsanforderung und das DreamPlug-Brodcast sendet das Ergebnis zurück plug.local
-> 192.168.1.1
. Die iPads erhalten dann dieses Ergebnis (das eigentlich für den Mac bestimmt war) und können es dann erfolgreich auflösen.
Gerne avahi-daemon.conf
stelle ich meine oder andere Konfigurationsdateien auf Anfrage zur Verfügung.
Update: Ich habe es jetzt geschafft, Wireshark zu verwenden und festgestellt, dass die iPads tatsächlich eine Anfrage an das Netzwerk senden.
Ich habe sowohl ein Paket erfasst, das DID zu einer Antwort von Avahi geführt hat, als auch ein Paket, das NICHT beantwortet wurde.
Sie scheinen beide völlig identisch zu sein, der einzige Unterschied ist, dass derjenige, der versagt hat, eine zusätzliche RR vom Typ spezifiziert hat OPT
... Ich habe keine Ahnung, was ein OPT
Datensatz ist. Könnte es sein, dass Avahi DNS-Abfragen mit OPT
angehängten RRs aus irgendeinem Grund nicht mag ?
Hier sind zwei Screenshots von Wireshark. Die erste zeigt eine "gute" mDNS-Anfrage, die vom Desktop-Computer gesendet wird (in diesem Fall wird das Gerät aufgerufen runway.local
). Diese Abfrage funktioniert einwandfrei und der Server (at 192.168.1.1
) antwortet sofort:
Hier ist ein Beispiel für die Antwort, die zurückgegeben wird runway.local
:
In der Zwischenzeit ist hier eine zweite DNS-Abfrage, die vom iPad für denselben Hostnamen gesendet wurde runway.local
. In diesem Fall scheint die Anforderung einfach ignoriert zu werden (auf keinen Fall wird jemals eine Antwort auf diese DNS-Abfrage empfangen):
Beim Versuch, herauszufinden, was in der iPad-Anfrage enthalten ist, die das Problem verursacht, scheinen die beiden Pakete fast identisch zu sein. Der einzige Unterschied zwischen mDNS-Abfragen, die vom Desktop (unter OS X) und dem iPad gesendet werden, besteht darin, dass das iPad angehängt wird einen OPT
Ressourceneintrag am Ende der DNS-Anfrage.
Die Frage ist: Welche Bedeutung hat der Ressourcendatensatz - und ist es dieser - oder ist es etwas anderes - der dafür verantwortlich ist, dass diese DNS-Anfrage von Avahi ignoriert wird?
UPDATE Dies könnte der Durchbruch sein, nach dem ich gesucht habe:
Ich habe einen Avahi-Daemon mit dem Flag --debug ausgeführt und eine Menge "Ungültiges Abfragepaket" festgestellt. Mitteilungen. Dies führte mich zu dieser Seite: http://avahi.org/ticket/284, die anscheinend ein bekanntes Problem ist (obwohl eines, das gelöst werden soll).
Speziell:
Ein tcpdump lässt mich vermuten, dass dies auf Mac OS 10.6 zurückzuführen ist, das RFC2671 verwendet, um Informationen im Abschnitt "Zusätzliche Daten" von DNS-Abfragen hinzuzufügen. Insbesondere liefert es die 'UDP Payload Size' (in meinem Fall 1440) als Hinweis für die maximale Größe der Antwortpakete. [...] Avahi betrachtet Abfragen mit nicht leeren zusätzlichen Datenabschnitten als ungültig, wobei überprüft wird, ob AVAHI_DNS_FIELD_ARCOUNT! = 0 ist, bevor die Meldung Ungültiges Abfragepaket generiert wird.
plug
über SSH bei DreamPlug aka anmelde und den Befehl ausführe, derping 224.0.0.251
die mDNS-Multicast-Adresse ist, ich das Ergebnis erhalteconnect: Network is unreachable
- nicht sicher, ob dies geschehen soll, aber für jeden nützlich sein kann, der helfen kann.