У меня есть следующая очень специфическая проблема с использованием Avahi на DreamPlug (это компьютер с подключаемым модулем, работающий под управлением Ubuntu Jaunty).
Потратив на это несколько дней, я считать Мне удалось сузить вопрос.
DreamPlug действует как точка доступа Wi-Fi и имеет имя хоста. plug
и IP-адрес 192.168.1.1
(который установлен в обоих /etc/hosts
и /etc/hostname
) и запускает lighttpd.
Теперь мой Mac сразу работает с доступом http://plug.local
в Chrome, однако, если я попытаюсь загрузить http://plug.local
на iPad это не работает. То есть не работает пока не загрузу страницу на рабочий стол.
По какой-то причине iPad никогда не может разрешить имя хоста до тех пор, пока имя хоста не будет сначала разрешено на Mac ... что странно, потому что между iPad и Mac нет связи, кроме того факта, что они подключены к та же точка доступа (DreamPlug).
Итак, просто чтобы уточнить еще раз: Safari на iPad будет зависать (пока не сообщит, что просмотр не удалось) при доступе http://plug.local
если я не получу доступ http://plug.local
на Mac запустите ping plug.local
, делать ssh root@plug.local
или в основном делать что-нибудь else, который разрешает имя хоста, после чего iPad мгновенно разрешает имя хоста, и он начинает работать правильно.
Если я правильно понимаю, когда iPad подключается, они транслируют запрос разрешения для plug.local
. По какой-то причине DreamPlug игнорирует этот запрос (или никогда не получает). Однако Mac делает удалось передать свой запрос. Он передает запрос разрешения, а DreamPlug возвращает результат plug.local
-> 192.168.1.1
. Затем iPad получает этот результат (который действительно был предназначен для Mac), а затем могут успешно разрешиться.
Я был бы рад предоставить свой avahi-daemon.conf
или другие файлы конфигурации по запросу.
Обновить: Теперь мне удалось использовать Wireshark и обнаружил, что iPad действительно транслирует запрос в сеть.
Я захватил как пакет, который ДЕЙСТВИТЕЛЬНО привел к ответу от Avahi, так и тот, который НЕ дал.
Они оба выглядят полностью идентичными, с той лишь разницей, что в том, что не удалось, была указана дополнительная запись типа OPT
... Понятия не имею, что за OPT
запись есть. Может быть, Авахи не любит DNS-запросы с OPT
RR прикреплены по какой-то причине?
Вот два скриншота из Wireshark. Первый показывает "хороший" mDNS-запрос, который отправляется с настольного компьютера (в данном случае устройство называется runway.local
). Этот запрос работает нормально, и сервер (на 192.168.1.1
) отвечает сразу:
Вот пример ответа, который возвращается от runway.local
:
Между тем, вот второй DNS-запрос, который был отправлен с iPad для того же имени хоста, runway.local
. В этом случае кажется, что запрос просто игнорируется (в любом случае на этот DNS-запрос ответа не поступает):
Пытаясь отследить, что именно в запросе iPad вызывает проблему, оказалось, что два пакета почти идентичны, единственная разница между запросами mDNS, отправленными с рабочего стола (под управлением OS X) и iPad, заключается в том, что iPad добавляет ан OPT
запись ресурса внизу DNS-запроса.
Возникает вопрос: каково значение записи ресурса - и именно она - или что-то еще - ответственна за то, что этот DNS-запрос игнорируется Avahi.
ОБНОВИТЬ Это может быть прорыв, который я искал:
Я запускал avahi-daemon с флагом --debug и заметил много сообщений «Недействительный пакет запроса». Сообщения. Это привело меня на эту страницу: http://avahi.org/ticket/284 что кажется, что это известная проблема (хотя и должна быть решена).
В частности:
Tcpdump заставляет меня думать, что это связано с тем, что Mac OS 10.6 использует RFC2671 для добавления информации в раздел дополнительных данных DNS-запросов. В частности, он предоставляет «размер полезной нагрузки UDP» (в моем случае 1440) в качестве подсказки для максимального размера пакетов ответа. [...] Avahi считает запросы с непустыми дополнительными разделами данных недопустимыми, где проверяет, что AVAHI_DNS_FIELD_ARCOUNT! = 0 непосредственно перед генерацией сообщения о недопустимом пакете запроса.
Я не часто посещаю научную фантастику, но я вижу, что этот вопрос привлек изрядное внимание, поэтому позвольте мне просто обобщить мои выводы здесь и, надеюсь, предоставить какое-то решение для тех, кто сталкивается с той же проблемой:
Похоже, это ошибка версии Avahi, которая поставляется с Ubuntu Jaunty (http://avahi.org/ticket/284), связанного с предоставлением размера полезной нагрузки UDP, вероятно, в результате более недавнего изменения спецификации mDNS (хотя я сам ее не читал). Как я объяснил в комментариях к исходному вопросу, я попытался обновить свою версию Avahi, но мои навыки работы с Linux не такие, какими они должны быть, и мне не удалось заставить его работать. (В любом случае, запускать неподдерживаемую ОС 3-летней давности в любом случае не рекомендуется ...)
В конце концов, я сделал решительный шаг, вытер SD-карту DreamPlug и установил на нее Debian Squeeze, который работал нормально (хотя и только с iOS 5.0+). Обсуждение того, как изменить ОС DreamPlug, выходит за рамки этого вопроса, но в конечном итоге все это сводится к устаревшей версии Avahi. Используйте более новую версию, и все будет в порядке!
Удачи!