在 iPad 上使用 DreamPlug Ubuntu 上的 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
)。此查詢工作正常,伺服器 (at192.168.1.1
) 立即響應:以下是從返回的響應範例
runway.local
:同時,這是從 iPad 發送的第二個 DNS 查詢,用於相同的主機名,
runway.local
. 在這種情況下,該請求似乎被簡單地忽略了(在任何情況下,都沒有收到此 DNS 查詢的響應):試圖追踪導致問題的 iPad 請求中的內容,這兩個數據包似乎幾乎相同,從桌面(執行 OS X)和 iPad 發送的 mDNS 查詢之間的唯一區別是 iPad 附加
OPT
DNS 請求底部的資源記錄。問題是:資源記錄的意義是什麼——是這個——還是其他什麼——導致這個 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 的過時版本。使用更新的版本,你應該沒問題!
祝你好運!