jon*_*jon 17 domain-name-system ubuntu mdns avahi
在 DreamPlug(这是一台运行 Ubuntu Jaunty 的插件计算机)上使用 Avahi 时,我遇到了以下非常奇怪的问题。
在花了几天的时间之后,我想我已经设法缩小了问题的范围。
DreamPlug 充当 WiFi 接入点,具有主机名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)。
所以再次澄清一下:访问时 iPad 上的 Safari 将挂起(直到它报告浏览失败),http://plug.local除非我http://plug.local在 Mac 上访问、运行ping plug.local、执行ssh root@plug.local或基本上执行任何其他解析主机名的操作,此时 iPad 会立即解析主机名,它开始正常工作。
如果我的理解是正确的,当 iPad 连接时,它们会广播plug.local. 无论出于何种原因,该请求都会被 DreamPlug 忽略(或者它永远不会被接收到)。但是,Mac确实设法广播了它的请求。它广播一个解析请求,DreamPlug 广播返回结果plug.local-> 192.168.1.1。iPad 会收到此结果(这实际上是为 Mac 发送的),然后就可以成功解析。
我很乐意应要求提供我的avahi-daemon.conf或其他配置文件。
更新:我现在设法使用 Wireshark 并发现 iPad 确实向网络广播了一个请求。
我捕获了一个 DID 导致 Avahi 响应的数据包,以及一个没有响应的数据包。
它们看起来完全相同,唯一的区别是失败的那个指定了一个额外的 RR 类型OPT......我不知道OPT记录是什么。是不是 AvahiOPT出于某种原因不喜欢附加了 RR 的DNS 查询?
这是从 Wireshark 截取的两个屏幕截图。第一个显示从台式计算机发送的“良好”mDNS 请求(在本例中,该设备称为runway.local)。此查询工作正常,服务器 (at 192.168.1.1) 立即响应:

以下是从 返回的响应示例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。
我不经常去SF,但我可以看到这个问题引起了相当多的关注,所以让我在这里总结一下我的发现,并希望为遇到同样问题的人提供一些解决方案:-
这似乎是 Ubuntu Jaunty ( http://avahi.org/ticket/284 )附带的 Avahi 版本的一个错误,与提供 UDP 有效负载大小有关,可能是由于最近对mDNS 规范(虽然我自己还没有读过)。正如我在对原始问题的评论中所解释的那样,我确实尝试升级我的 Avahi 版本,但我的 Linux 技能达不到应有的水平,而且我没能让它发挥作用。(无论怎样,运行一个 3 年前的不受支持的操作系统确实是不推荐的......)
最后,我冒险一试,擦除了 DreamPlug 的 SD 卡并在其上安装了 Debian Squeeze,效果很好(尽管仅适用于 iOS 5.0+)。关于如何更改 DreamPlug 操作系统的讨论超出了本问题的范围,但最终归根结底是 Avahi 版本过时。使用较新的版本应该没问题!
祝你好运!