Ho il seguente problema molto particolare con l'uso di Avahi su DreamPlug (che è un computer plug-in con Ubuntu Jaunty).
Dopo aver trascorso giorni su questo, penso di essere riuscito a restringere il problema.
DreamPlug funge da punto di accesso WiFi e ha il nome host plug
e l'indirizzo IP 192.168.1.1
(che è impostato in entrambi /etc/hosts
e /etc/hostname
) ed esegue lighttpd.
Ora il mio Mac funziona immediatamente con l'accesso http://plug.local
a Chrome, tuttavia se provo a caricare http://plug.local
l'iPad, non funziona. Cioè, non funziona fino a quando non carico la pagina sul desktop.
Per qualche motivo, gli iPad non sono mai in grado di risolvere il nome host, fino a quando il nome host non viene risolto per la prima volta sul Mac ... il che è strano perché non esiste una connessione tra iPad e Mac oltre al fatto che sono collegati al stesso punto di accesso (il DreamPlug).
Quindi, solo per chiarire di nuovo: Safari su iPad si bloccherà (fino a quando non segnala che la navigazione non è riuscita) quando si accede a http://plug.local
meno che non acceda http://plug.local
su Mac, eseguo ping plug.local
, faccia ssh root@plug.local
o sostanzialmente faccia qualsiasi altra cosa che risolva il nome host, a quel punto l'iPad risolve immediatamente il nome host e inizia a funzionare correttamente.
Se la mia comprensione è corretta, quando gli iPad si connettono trasmettono una richiesta di risoluzione per plug.local
. Per qualsiasi motivo, questa richiesta viene ignorata da DreamPlug (o non viene mai ricevuta). Tuttavia, il Mac non riesce a trasmettere la sua richiesta. Trasmette una richiesta di risoluzione e DreamPlug trasmette il risultato plug.local
-> 192.168.1.1
. Gli iPad ricevono quindi questo risultato (che era davvero destinato al Mac) e sono quindi in grado di risolversi con successo.
Sarei felice di fornire il mio avahi-daemon.conf
o altri file di configurazione su richiesta.
Aggiornamento: ora sono riuscito a utilizzare Wireshark e ho scoperto che gli iPad trasmettono effettivamente una richiesta alla rete.
Ho catturato sia un pacchetto che ha provocato una risposta da Avahi, sia uno che NON lo ha fatto.
Entrambi sembrano completamente identici, l'unica differenza è che quello che ha fallito ha specificato un RR aggiuntivo di tipo OPT
... Non ho idea di cosa sia un OPT
record. Potrebbe essere che ad Avahi non piacciano le query DNS con OPT
RR collegati per qualche motivo?
Ecco due schermate tratte da Wireshark. Il primo mostra una "buona" richiesta mDNS che viene inviata dal computer desktop (in questo caso, il dispositivo viene chiamato runway.local
). Questa query funziona correttamente e il server (at 192.168.1.1
) risponde immediatamente:
Ecco un esempio della risposta che viene restituita da runway.local
:
Nel frattempo, ecco un seconda query DNS che è stato inviato da iPad per lo stesso nome host, runway.local
. In questo caso, la richiesta sembra essere semplicemente ignorata (in ogni caso, non viene mai ricevuta alcuna risposta per questa query DNS):
Cercando di rintracciare ciò che è nella richiesta iPad che causa il problema, sembra che i due pacchetti siano quasi identici, l'unica differenza tra le query mDNS inviate dal desktop (con OS X) e l'iPad è che l'iPad aggiunge un OPT
record di risorse nella parte inferiore della richiesta DNS.
La domanda è: qual è il significato del record di risorse - ed è questo - o è qualcos'altro - che è responsabile per questa richiesta DNS che viene ignorata da Avahi.
AGGIORNAMENTO Questa potrebbe essere la svolta che stavo cercando:
Ho eseguito avahi-daemon con --debug flag e ho notato un sacco di "pacchetto di query non valido". messaggi. Questo mi ha portato a questa pagina: http://avahi.org/ticket/284 che sembra che si tratti di un problema noto (anche se dovrebbe essere risolto).
In particolare:
Un tcpdump mi fa credere che ciò sia dovuto a Mac OS 10.6 che utilizza RFC2671 per aggiungere informazioni nella sezione dati aggiuntivi delle query DNS. In particolare, sta fornendo la "dimensione del payload UDP" (nel mio caso 1440) come suggerimento per la dimensione massima dei pacchetti di risposta. [...] Avahi considera non valide le query con sezioni di dati aggiuntivi non vuoti, in cui verifica che AVAHI_DNS_FIELD_ARCOUNT! = 0 appena prima di generare il messaggio Pacchetto di query non valido.
plug
su SSH ed eseguo il comandoping 224.0.0.251
che è l'indirizzo multicast mDNS, ottengo il risultatoconnect: Network is unreachable
- non sono sicuro che ciò accada, ma può essere utile per chiunque possa aiutare.