ObsidianのP2P同期を試してみた

Peer to Peer同期爆誕

久しぶりにObsidianをいじったら、Self-hosted live syncプラグインにまだエクスペリメンタルではあるもののP2P接続での同期機能が実装されていました。

Obsidianを無料で同期しようとする際、一番のネックになるのがサーバーの用意ですから、無料同期のハードルが断然下がることでしょう。

と思いましたが、もう鯖を立てる必要は全く無い、ということはなかった。P2Pは未だになかなか安定しない技術なんですかね。

今は亡きSkypeもあらゆる手段でNATを越えることで有名でしたが、結局安定の域に達したかといえば、そうではなかったかもしれない。

Torrentも期待されるほどの速度は出ないし、全然普及しないですよね。適正に使われてるのUbuntuのイメージ配布くらいしかない。

やってみましょう

基本的に設定欄をいくつか埋めるだけで利用できます。

設定方法は作者が日本語で書いていますので、特に難しいことはありません。

https://fancy-syncing.vrtmrz.net/blog/0034-p2p-sync#fnref1

ですが!

解説通りにやっても繋がりません。なぜなら、OSの標準機能としてWebsocketがONになってなかったり、ファイアウォールを越えられなかったりするからです。

Macの場合

ファイアウォールが邪魔します。Windowsのように、怪しい通信をブロックしたときは通知があればいいのですが、Macはだんまりです。Obsidianの通信を通してあげましょう。

Windows 11の場合

Websocketは標準で無効です。ルートサーバーに接続するためには、機能を有効化してやる必要が多分あります。

しかし有効化しても一向に繋がらず、最終的にファイアウォールを全部切って見ましたが、上手く行きません。

AdGuard のアンインストールもしたけれど、犯人はAdGuardではなかった。

Surfaceと自作PCをどちらも最新の状態にした上で、どちらも他のピアと通信できませんでした。

Ubuntuの場合

Linuxのファイアウォールは標準で無効です。なのでなんの問題もなく繋がります。流石、なんでもありで恐ろしい奴だ。

iPadOSの場合

特別な設定はありません。理由は私にはわかりませんが、iPadは爆速でピアとして他の機器に認識されますし、iPadからも他のピアがよく見えます。

Androidの場合

どこを設定すればいいのかよく分かりませんでした。ピアとして認識されませんし、他の機器も見えません。使えません。

いずれにしても

よく切断されてお互いに見失ってしまいます。プラグインをリセットすると直ったりしますが、安定しません。

結論、できたのはiPad↔Ubuntu↔Macの3つの一時的な相互接続でした。

現時点ではCourchDBで運用した方が良いでしょう。

Dockerで自鯖を立てる

テストサーバーが良くない可能性を考えて自分でNostrのリレーサーバーを立ててみましょう。

Dockerが動けばイメージをダウンロードして、コンテナを起動するだけです。特別な設定は必要ありません。

https://hub.docker.com/r/scsibug/nostr-rs-relay

いつものごとくリソースを持て余しているSynologyのNASに立てます。

結果的には、テストサーバーと同じで、状況は改善しませんでした。

別の目的で作られた物を目的外使用しているので、なにかがおかしいんじゃないだろうか。

Nostrのリレーは主に3種類あるらしいが、Dockerで公開されているのはそのうち1つだけだ。他の2つは試せていない。

ネットワークの構成を見直してみる

まず自宅のLAN内にサーバーとピアをおさめて、ローカルIPで設定してみます。NATの問題をおさえるためです。しかしこれは改善が見られませんでした。

次にVPNでネットワークを作って接続してみます。しかしこれも結果に影響しませんでした。

live-syncの設定を見直してみる

最後に部屋名とデバイス名を極力短くします。デバイス名については短くすることが推奨されています。なので2文字に統一。接続がちょっと早くなりましたが、繋がる機器は同じでした。

そうなってくるとやはり個々のピアに問題がありそうですね。

WebRTCは複雑怪奇なり

Web RTCについて調べていたら、こんな図を見つけました。

https://zenn.dev/yuki_uchida/books/c0946d19352af5/viewer/94925c

もうこれ、手がつけられない技術なんじゃ…。記事の執筆も頓挫してますしね😅

公式に課金してプラグインの完成を待ちましょう。