web-dev-qa-db-ja.com

iPadを搭載したDreamPlugUbuntuでAvahiを使用する

DreamPlug(Ubuntu Jauntyを実行しているプラ​​グコンピューター)でAvahiを使用すると、次のような非常に特殊な問題が発生します。

これに何日も費やした後、私はthink問題を絞り込むことができました。

DreamPlugはWiFiアクセスポイントとして機能し、ホスト名plugとIPアドレス192.168.1.1/etc/hosts/etc/hostnameの両方で設定)を持ち、lighttpdを実行します。

MacはChromeでhttp://plug.localにアクセスするとすぐに動作しますが、iPadでhttp://plug.localをロードしようとすると動作しません。つまり、デスクトップにページをロードするまで機能しません。

何らかの理由で、Macでホスト名が最初に解決されるまで、iPadはホスト名を解決できません...これは、iPadとMacの間に接続されているという事実以外に接続がないため、奇妙です。同じアクセスポイント(DreamPlug)。

もう一度明確にするために:Macでhttp://plug.localにアクセスしない限り、http://plug.localにアクセスするとiPadのSafariがハングします(ブラウジングが失敗したと報告されるまで)、ping plug.local、do ssh [email protected]または基本的にdoanythingその他、ホスト名を解決します。その時点で、iPadは即座にホスト名を解決し、動作を開始します。正しく。

私の理解が正しければ、iPadが接続すると、plug.localの解決要求がブロードキャストされます。何らかの理由で、この要求はDreamPlugによって無視されます(または受信されません)。ただし、Macその要求をブロードキャストすることができます。解決要求をブロードキャストし、DreamPlugは結果をplug.local-> 192.168.1.1にブロードキャストします。その後、iPadはthis結果(実際にはMac向け)を受け取り、正常に解決できるようになります。

リクエストに応じて、avahi-daemon.confまたはその他の構成ファイルを提供させていただきます。

更新:Wiresharkを使用できるようになり、iPadが実際にネットワークにリクエストをブロードキャストしていることがわかりました。

DIDがAvahiからの応答をもたらすパケットと、そうでないパケットの両方をキャプチャしました。

どちらも完全に同じように見えますが、唯一の違いは、失敗したものがタイプOPT...の追加のRRを指定したことです。OPTレコードが何であるかわかりません。 Avahiが何らかの理由でOPT RRが添付されたDNSクエリを好まない可能性がありますか?

これがWiresharkから取られた2つのスクリーンショットです。 1つ目は、デスクトップコンピューターから送信される「適切な」mDNS要求を示しています(この場合、デバイスはrunway.localと呼ばれます)。このクエリは正常に機能し、サーバー(192.168.1.1)はすぐに応答します。

An mDNS query that works

runway.localから返される応答の例を次に示します。

enter image description here

一方、同じホスト名runway.localに対してiPadから送信された2番目のDNSクエリがあります。この場合、要求は単に無視されているように見えます(いずれにしても、このDNSクエリに対する応答は受信されません)。

enter image description here

問題の原因となっているiPadリクエストの内容を追跡しようとすると、2つのパケットはほぼ同じであるように見えます。デスクトップ(OS Xを実行している)とiPadから送信されるmDNSクエリの唯一の違いは、iPadが追加することです。 DNSリクエストの最後にあるOPTリソースレコード。

問題は、このDNS要求がAvahiによって無視される原因となっているのは、リソースレコードの重要性とは何か(そしてこれなのか、それとも他の何かなのか)です。

[〜#〜] update [〜#〜]これは私が探していたブレークスルーかもしれません:

--debugフラグを指定してavahi-daemonを実行していて、「無効なクエリパケット」がたくさんあることに気づきました。メッセージ。これは私をこのページに導きました: http://avahi.org/ticket/284 これは既知の問題のようです(解決されるはずですが)。

具体的には:

Tcpdumpを使用すると、これはMac OS10.6がRFC2671を使用してDNSクエリの追加データセクションに情報を追加したことが原因であると思われます。具体的には、応答パケットの最大サイズのヒントとして「UDPペイロードサイズ」(私の場合は1440)を提供しています。 [...] Avahiは、空でない追加データセクションを持つクエリを無効と見なし、無効なクエリパケットメッセージを生成する直前にAVAHI_DNS_FIELD_ARCOUNT!= 0をチェックします。

17
jon

私はSFをあまり頻繁に使用しませんが、この質問がかなりの注目を集めていることがわかります。そこで、ここで私の調査結果を要約し、同じ問題を経験している人に何らかの解決策を提供できることを願っています。

これは、Ubuntu Jaunty( http://avahi.org/ticket/284 )に同梱されているAvahiのバージョンのバグであり、UDPペイロードサイズの提供に関係しているようです。 mDNS仕様へのより最近の変更で(私はそれを自分で読んでいませんが)。元の質問へのコメントで説明したように、Avahiのバージョンをアップグレードしようとしましたが、Linuxのスキルが本来あるべきものではなく、それを機能させることができませんでした。 (いずれにせよ、3年前のサポートされていないOSを実行することは、とにかくお勧めできません...)

結局、私は思い切って、DreamPlugのSDカードをワイプし、Debian Squeezeをインストールしました。これは正常に機能しました(iOS 5.0以降でのみ)。 DreamPlug OSを変更する方法の説明はこの質問の範囲外ですが、結局のところ、結局のところ、Avahiの古いバージョンです。新しいバージョンを使用すれば大丈夫です!

幸運を!

1
jon