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 [email protected]
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.Respostas:
Eu não frequento o SF com tanta frequência, mas percebo que essa pergunta atraiu bastante atenção; deixe-me resumir minhas descobertas aqui e, esperançosamente, fornecer uma solução para aqueles que enfrentam o mesmo problema:
Parece que esse é um erro da versão do Avahi que acompanha o Ubuntu Jaunty ( http://avahi.org/ticket/284 ) relacionado ao fornecimento do tamanho da carga útil do UDP, provavelmente como resultado de uma mudança mais recente no especificação mDNS (embora eu não tenha lido). Como expliquei nos comentários da pergunta original, tentei atualizar minha versão do Avahi, mas minhas habilidades em Linux não são o que deveriam ser e não consegui fazê-la funcionar. (De qualquer forma, a execução de um sistema operacional não compatível com 3 anos de idade não é realmente recomendada ...)
No final, eu mergulhei, limpei o cartão SD do DreamPlug e instalei o Debian Squeeze nele, que funcionou bem (embora apenas com o iOS 5.0 ou superior). Uma discussão sobre como alterar o sistema operacional DreamPlug está fora do escopo desta questão, mas no final das contas tudo se resume a uma versão desatualizada do Avahi. Use uma versão mais recente e você deve ficar bem!
Boa sorte!
fonte