gavangavanの日記

書きたいことを書いております。

bonjourフォワーディングまとめ

これも一応転送しておこう。bunruimemoはもうobsoleteになっていて、今はbashomemoというのに変わっているが同じであろう。なんかtcpによるsyncがおかしいんだけどね。

      • -

今日はしょうもないことではまった。ipod touchの設定をいろいろやっていて、データ管理アプリのbunruimemoのデータバックアップをとりたくなった。研究室のmac mini上のbunruimemoアプリと同期すればよいわけだが、VPNがないのでsshでなんとかならないかと考えた。結果まだうまくいってないわけだが、以下そのまとめ。

bunruimemoは由緒正しくmac/iphoneアプリなので、当然サービス連携はbonjour(rendezvous)を使う。

bonjourのサービスはmulticast DNSでqueryされるが、コマンドでやるにはdns-sdコマンドを使う。
dns-sd -B _daap._tcp ->ブラウジングで名前が引ける(daapはiTunes共有の場合)
dns-sd -L 名前 _daap._tcp local -> 名前で閲覧できるサービスのアドレス・ポートがわかる

これでサービス名がわかっているときはフォワードすべきアドレスとポートがわかるが、bunruimemoの場合サービス名がまずわからなかった。anyスキャンするコマンドがありそうなものだが、dns-sdコマンドはその機能がないみたい(不思議)。

しかたないので、研究室のmac miniVNCかけて、mac上のGUIアプリである、Bonjour Browserをとってきて調べてみる。するとbunruimemoのサービス名は、_bunruimemo2._tcpだとわかった。

ここまでくれば、sshで当該ポートをフォワードする(bunnruimemoの同期ポートは同期するごとに毎回変わるので、いちいち調べる必要がある。)。

ssh -L 20000:127.0.0.1: -g

  • g なのはiphoneからフォーワードポートへのアクセスを許可するため。

こうしておいて、ローカルのVaioから、20000/tcpをbonjourで広告する。dns-sdコマンドが使える。こいつはbonjour for windowsをつかえばよい。

dns-sd -R VAIO _bunruimemo2._tcp local 20000 txt=VAIO

これで広告されていることは、ipod touch側のmDNS watchアプリで確認できた。しかし、残念ながらここでbunruimemoアプリを起動して同期かけても、サーバがみつからなかった。touchの中にsshして、そこからフォワードポートにtelnetかけるとVNCでつないでいる研究室Mac mini側のbunruimemoで同期がはじまるので、通信としては成立している。問題はbonjourのサービス広告が何か足りないので、bunruimemoアプリがサービスを見つけられないのだと思う。

dns-sdコマンドの最後の引数はTXTレコードの内容で、ここにはkey=dataの形式でいろいろな情報が入る。AirTunesのサービス(_raop._tcp)なんかをbonjour browserでみてみると興味深い。

しかし、bunruimemoのサービスについてはそういうキーがはっているようにはみえなかった(bonjour browserの表示による)。なにがトリガーになるのかしらん。

ちなみにdns-sdコマンドにはproxyコマンドというのもあって、dns-sd -P でできるが、結局これはIPアドレスとFQDNを既定できるだけで-Rと同じように思われる。こちらでもうまくいかなかった。

同じように広告アプリである、Rendezvous Proxyでもやってみたが結果は同じ。

ここまでくるのにおよそ9時間かけたが、だめであった。ひさびさに粘着的に追求してみた。時間があればこそである。

      • -

続きで、以下のように解決した。

      • -

眠い、しかし決着。同期用のサービス名がかわってた。

_bunruimemo2_5._tcp

になってた(とほほ)。iphoneアプリのバージョンが2.8で、最近だったので、研究室macのbunruimemoは少なくとも入院前のものだから、これはいやな予感、とおもってbunruimemoの公式サイトいって確認したら、macアプリも5月に2.8になっていて、履歴をみると、同期処理の改良、とかいうのがあった。もしやサービス名変えたか?、とおもってふたたびVNC経由でアプリをインストールしなおして、bonjour browserで確認したら、案の定。。。。サービスプロトコルをかえたのね。もともと_bunruimemo2._tcpと、「2」がついてたから変わる可能性は高いとにらんでたが、やっぱこれだったか。

よしよし、これでいくだろうとおもって先の手順でやってみたら、OKOK.実にあっさりと同期完了。考え方は正しかったのだ。うーむ、もっと早く思い至るんだった。勘がにぶってきてるなあ。

ちなみに、rendezvous proxyはローカルPCに対してしかproxyしてくれないので、今回のようにiphoneからのアクセスには役に立たない。

あー、すっきりした。これでbonjour系のサービスのremote accessはだいたいものにした。いい勉強であった。寝よ寝よ。