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
もうこれ、手がつけられない技術なんじゃ…。記事の執筆も頓挫してますしね😅
公式に課金してプラグインの完成を待ちましょう。