9

私は、「ローカル」ドメインでの広告サービスに Bonjour を使用することに精通しています。私はいくつかの例に取り組み、そのために使用する対応する Cocoa クラスを知っています。

シンプルな Bonjour サービスを別のサブネットにアドバタイズする方法に興味があります。具体的には、イーサネット経由で接続されているデスクトップで実行されるネットワーク サービスを作成しようとしています。クライアントは、Wifi 経由で接続されたモバイル デバイス (iPhone/iPad) で実行されます。私のネットワーク設定では、Wifi はイーサネットとは異なるサブネット上にあります。ただし、どちらもファイアウォールの背後にあります。ファイアウォールの外側にアドバタイズする必要はありません。wifi クライアントが、イーサネットに接続されたサーバーによってアドバタイズされたサービスを表示できるようにしたいだけです。

これは可能ですか?Bonjour がサブネット間の通信をサポートすることになっていることは知っていますが、この機能について読み込もうとすると、DNS レコードなどに深く掘り下げられます。私はアプリケーション開発者です...私はそのことについて何も知りませんし、ユーザーに心配させたくありません。簡単なものがありませんか?

4

1 に答える 1

15

これは典型的なプログラミングの質問ではありませんが、Bonjour ベースのコードをテストする上で大きな障害になっていることがわかります。

Bonjour は、サーバーがクライアントにその存在を通知するための 2 つのメカニズムをサポートしています。最初にローカル ネットワークでマルチキャストし、次に DNS でマルチキャストします。

マルチキャストは設定がいらないので使いやすいですが、残念ながら同一ネットワーク内でしか使えません。

DNS は、ルーター (インターネット) を介して機能するという贅沢を持っていますが、適切に構成されたネームサーバーと、そのネームサーバーを使用するクライアントが必要です。

あなたには2つの選択肢しかないと思います。

  1. WiFi ネットワークで bonjour サービスを宣伝する
  2. 独自の DNS を構成する

最初のケースでは、サービスが必ずしも Mac 上で動作する独自のアプリケーションによってアドバタイズされる必要がないことを理解することが重要です。ユーティリティdns-sdを使用して、ネットワーク上の任意の IP アドレス/ポートを Bonjour サービスとして登録できます。これが機能するには、WiFi に接続されたマシン (Mac、Linux) が必要であり、dns-sdそこで次のように実行します。

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211

これにより、「http」サービスが「Stack Overflow」という名前で Bonjour サービスとして登録されます。チェックアウト - ターミナルで実行し、Bonjour の下の Safari のブックマークでチェックしてください。同じ方法でアプリケーションを登録できます。

残念ながら、これは WiFi ネットワークに接続されたマシンで実行する必要があります。つまり、Mac アプリケーションは独自のイーサネット ネットワークでdns-sdアドバタイズし、WiFi でアドバタイズします。

2 番目のオプションは少し恐ろしいですが、何らかの管理に手がかかることを厭わないのであれば、大した問題ではありません。

繰り返しますが、サービスを動的に DNS に登録する必要はありません。DNS 構成で Mac の名前とアプリのポートをハードコーディングするだけです。これらは、ゾーン ファイル (DNS 構成ファイル) に追加する必要がある 4 行だけです。

b._dns-sd._udp  IN PTR @   ;  b = browse domain
lb._dns-sd._udp IN PTR @   ; lb = legacy browse domain
_icool._tcp  PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp     SRV 0 0 8888 macpro.domain.com.

最初の 2 行は、このドメインで Bonjour が有効になっていることをクライアント (この場合は iOS デバイス) に伝えます。3 行目は、利用可能なタイプのサービス「iCool App Service」があることをクライアントに伝えますicool。4 行目は、サービスの現在のアドレスとポートをクライアントに通知します。

クライアントは、構成された (または DHCP 経由で取得された) 「検索ドメイン」の DNS エントリを探します。ネットワーク設定を確認してください。

Mac や一部の Linux ボックスでネームサーバーを実行したり、dyndns.com などのサービスを使用したりできます。

お役に立てれば。

于 2010-09-23T21:18:50.540 に答える