在 iPad 上使用 DreamPlug Ubuntu 上的 Avahi

在 iPad 上使用 DreamPlug Ubuntu 上的 Avahi

我在 DreamPlug(运行 Ubuntu Jaunty 的插件计算机)上使用 Avahi 时遇到了以下非常奇怪的问题。

经过几天的努力,我思考我已设法缩小问题范围。

DreamPlug 充当 WiFi 接入点,具有主机名plug和 IP 地址(在和192.168.1.1中设置)并运行 lighttpd。/etc/hosts/etc/hostname

现在我的 Mac 可以直接http://plug.local在 Chrome 中访问,但如果我尝试在 iPad 上加载http://plug.local,它就不起作用。也就是说,它不起作用直到我在桌面上加载该页面。

由于某种原因,iPad 永远无法解析主机名,直到主机名首先在 Mac 上解析...这很奇怪,因为除了连接到同一个接入点(DreamPlug)之外,iPad 和 Mac 之间没有任何连接。

因此,再次澄清一下:iPad 上的 Safari 在访问时会挂起(直到它报告浏览失败),http://plug.local除非我http://plug.local在 Mac 上访问、运行ping plug.local、执行或基本上执行ssh [email protected]任何事物否则,将解析主机名,此时 iPad 会立即解析主机名并开始正常工作。

如果我的理解正确,当 iPad 连接时,它们会广播分辨率请求plug.local。无论出于何种原因,DreamPlug 都会忽略此请求(或永远不会收到)。但是,Mac设法广播其请求。它广播解析请求,DreamPlug 广播回结果plug.local-> 192.168.1.1。然后 iPad 接收结果(实际上是为 Mac 准备的)然后能够成功解析。

我很乐意avahi-daemon.conf根据要求提供我的或其他的配置文件。

更新:我现在已经设法使用 Wireshark 并发现 iPad 确实向网络广播了请求。

我捕获了导致 Avahi 响应的数据包和没有导致 Avahi 响应的数据包。

它们看起来完全相同,唯一的区别是失败的那个指定了额外的 RR 类型OPT...我不知道OPT记录是什么。可能是因为某种原因 Avahi 不喜欢OPT附加 RR 的 DNS 查询?

以下是从 Wireshark 截取的两张截图。第一张显示了从台式计算机(在本例中,设备名为runway.local)发送的“良好”mDNS 请求。此查询运行正常,服务器(位于192.168.1.1)立即响应:

有效的 mDNS 查询

以下是从 返回的响应示例runway.local

在此处输入图片描述

同时,这是从 iPad 发送的针对同一主机名的第二个 DNS 查询。runway.local在这种情况下,请求似乎被忽略了(无论如何,此 DNS 查询从未收到任何响应):

在此处输入图片描述

尝试追踪 iPad 请求中导致问题的原因,看起来两个数据包几乎相同,从桌面(运行 OS X)和 iPad 发送的 mDNS 查询之间的唯一区别是 iPad 在OPTDNS 请求的底部附加了一条资源记录。

问题是:资源记录的意义是什么——是这个——还是其他什么——导致该 DNS 请求被 Avahi 忽略。

更新这可能是我一直在寻找的突破:

我一直在使用 --debug 标志运行 avahi-daemon,并且注意到很多“无效查询包。”消息。这让我找到了这个页面:http://avahi.org/ticket/284这似乎是一个已知问题(尽管应该得到解决)。

具体来说:

tcpdump 让我相信这是由于 Mac OS 10.6 使用 RFC2671 在 DNS 查询的附加数据部分中添加信息造成的。具体来说,它提供“UDP 有效负载大小”(在我的情况下为 1440)作为响应数据包最大大小的提示。[...] Avahi 认为具有非空附加数据部分的查询无效,它会在生成无效查询数据包消息之前检查 AVAHI_DNS_FIELD_ARCOUNT != 0。

答案1

我并不经常访问 SF,但我可以看到这个问题已经引起了相当多的关注,所以让我在这里总结一下我的发现,并希望能为遇到同样问题的人提供一些解决方案:-

这似乎是 Ubuntu Jaunty 附带的 Avahi 版本的一个错误(http://avahi.org/ticket/284) 与提供 UDP 有效负载大小有关,可能是 mDNS 规范最近更改的结果(尽管我自己还没有读过)。正如我在原始问题的评论中所解释的那样,我确实尝试升级我的 Avahi 版本,但我的 Linux 技能还不够好,我没能让它工作。(无论如何,运行 3 年前不受支持的操作系统真的不推荐……)

最后,我决定冒险一试,清除了 DreamPlug 的 SD 卡,并在其上安装了 Debian Squeeze,运行良好(尽管仅适用于 iOS 5.0+)。关于如何更改 DreamPlug 操作系统的讨论超出了本问题的范围,但归根结底,问题在于 Avahi 版本过时了。使用较新的版本,您应该没问题!

祝你好运!

相关内容