Eu tenho o seguinte problema muito peculiar ao usar o Avahi no DreamPlug (que é um computador com o Ubuntu Jaunty).
Depois de passar dias nisso, acho que consegui diminuir o problema.
O DreamPlug atua como o ponto de acesso Wi-Fi, e tem o nome de host plug
e endereço IP 192.168.1.1
(que é definido em ambos /etc/hosts
e /etc/hostname
) e corre lighttpd.
Agora, meu Mac trabalha imediatamente acessando o http://plug.local
Chrome; no entanto, se eu tentar carregar http://plug.local
no iPad, ele não funciona. Ou seja, ele não funciona até carregar a página na área de trabalho.
Por alguma razão, os iPads nunca conseguem resolver o nome do host, até que o nome do host seja resolvido pela primeira vez no Mac ... o que é estranho, porque não há conexão entre os iPads e o Mac além do fato de estarem conectados ao mesmo ponto de acesso (o DreamPlug).
Portanto, para esclarecer novamente: o Safari no iPad travará (até relatar que a navegação falhou) ao acessar, a http://plug.local
menos que eu acesse http://plug.local
no Mac, execute ping plug.local
, faça ssh root@plug.local
ou basicamente faça qualquer outra coisa que resolva o nome do host, quando o iPad resolve instantaneamente o nome do host e ele começa a funcionar corretamente.
Se meu entendimento estiver correto, quando os iPads se conectam, eles transmitem uma solicitação de resolução plug.local
. Por qualquer motivo, essa solicitação é ignorada pelo DreamPlug (ou nunca é recebida). No entanto, o Mac faz conseguem transmitir o seu pedido. Ele transmite uma solicitação de resolução e o DreamPlug fornece o resultado plug.local
-> 192.168.1.1
. Os iPads recebem esse resultado (realmente destinado ao Mac) e podem resolver com êxito.
Ficaria feliz em fornecer meus avahi-daemon.conf
ou outros arquivos de configuração, mediante solicitação.
Atualização: agora eu consegui usar o Wireshark e descobri que os iPads realmente transmitem uma solicitação para a rede.
Eu capturei um pacote que resultou em uma resposta de Avahi e um que NÃO.
Os dois parecem completamente idênticos, a única diferença é que o que falhou especificou um RR adicional do tipo OPT
... Não faço ideia do que é um OPT
registro. Será que o Avahi não gosta de consultas DNS com OPT
RRs anexados por algum motivo?
Aqui estão duas capturas de tela tiradas do Wireshark. O primeiro mostra uma solicitação mDNS "boa" que é enviada do computador de mesa (nesse caso, o dispositivo é chamado runway.local
). Esta consulta funciona bem e o servidor (at 192.168.1.1
) responde imediatamente:
Aqui está um exemplo da resposta retornada de runway.local
:
Enquanto isso, aqui está uma segunda consulta DNS que foi enviada do iPad para o mesmo nome de host runway.local
,. Nesse caso, a solicitação parece ser simplesmente ignorada (em qualquer caso, nenhuma resposta é recebida para esta consulta DNS):
Tentando rastrear o que há na solicitação do iPad que causa o problema, parece que os dois pacotes são quase idênticos, a única diferença entre as consultas mDNS enviadas da área de trabalho (executando o OS X) e o iPad é que o iPad anexa um OPT
registro de recurso na parte inferior da solicitação de DNS.
A questão é: qual é o significado do registro de recurso - e é isso - ou é outra coisa - responsável por essa solicitação de DNS ser ignorada pela Avahi.
ATUALIZAÇÃO Esta poderia ser a inovação que eu estava procurando:
Estou executando o avahi-daemon com o sinalizador --debug e notei muitos "Pacotes de consulta inválidos". mensagens. Isso me levou a esta página: http://avahi.org/ticket/284, que parece ser um problema conhecido (embora deva ser resolvido).
Especificamente:
Um tcpdump me faz acreditar que isso ocorre devido ao Mac OS 10.6 usar o RFC2671 para adicionar informações na seção de dados adicionais das consultas DNS. Especificamente, ele está fornecendo o 'tamanho da carga útil do UDP' (no meu caso, 1440) como dica para o tamanho máximo dos pacotes de resposta. [...] A Avahi considera as consultas com seções de dados adicionais não vazias inválidas, onde verifica se AVAHI_DNS_FIELD_ARCOUNT! = 0 imediatamente antes de gerar a mensagem de pacote de consulta inválida.
plug
SSH, e executar o comandoping 224.0.0.251
que é o endereço multicast mDNS, recebo o resultadoconnect: Network is unreachable
- não tenho certeza se isso deveria estar acontecendo, mas pode ser útil para qualquer pessoa que possa ajudar.