オープンソースのファイル同期サービスSyncthingを会社でひっそりと使う【自己責任】

オープンソースのファイル同期サービスSyncthingを会社でひっそりと使う【自己責任】

こんにちわ、fkdm(@fkdm88)です。

上の記事で先日ご紹介したSyncthingというサービスですが、プライベートだけでなく会社でも活用できるケースはたくさんありますよね。

  • ラップトップで出先でとった議事録を帰社後デスクトップPCにバックアップ
  • 開発PCでビルドした実行ファイルの受け渡し

ここだけの話、私の職場はOSSやモダンなサービスが受け入れられない風潮にあります。この類のサービスもセキュリティ的に大丈夫なんか?とか、アブナイもの使うな!とか・・。あなた方はSambaでずぼらに共有してるくせに!

クラウドにファイルを保存しない。暗号化されたP2P通信であるので第三者によるファイル傍受は難しい。など、少なくともSambaよりは断然いいと思うわけです。

というわけでこの記事はひっそりとSyncthingを運用する手順を公開します。同じような風潮の会社にお勤めの方、ご参考にしてください。

とはいえ、但し書き。

!本記事を利用した結果発生したいかなる損害も一切責任を負いません。自己責任!

Advertisement

ひっそりと使えない理由

当初ばれんやろ、と思って会社のPCにも導入しましたら、ひっそりと使えない理由がわかってきました。ネットワーク管理者がみたら???となりそうな挙動があります、それは以下。

  • 各所で定期的にブロードキャストパケットを送出している
    • ファイルの同期
    • ペア設定のサジェスト表示
  • クラウドを使わないといいながら、一部外部サーバへアクセスしている(悪意あるものではない)

ブロードキャストと外部サーバへのアクセスを止めれば、同一ネットワークの他マシンへは知られずに運用が可能そうです。セキュリティリスク的にも、もし他人がSyncthingを始めてペア設定する際に、自分のDevice IDが出ても困りますので、社内利用ではこのへんを止めておく必要があります。

ひっそりと使うにはどうすればよいか考えた

調べれば情報がある。これがOSSのいいところですね。調べてみるとフォーラムで見つけました。

Can Syncthing be totally private ?

In normal configuration, Syncthing will always connect to relays, as it cannot know, if other devices need them and will connect through them to it.

To be totally private (to the extreme), disable relay and global/local discovery, set the listening address to something explicit, like tcp://:22000 instead of default and set the addresses of the remote devices to their hostname/ip address and port (like tcp://192.168.01.45:22001) instead of dynamic. And disable usage reporting and auto upgrade (if you really want).

Then the only connections Syncthing will ever make are direct connections to the other syncthing devices.

これによると、完全にスタンドアローンで動かすには以下3つを無効化すればよいようです。

  1. ローカル探索
  2. グローバル探索(リレー機能)
  3. 自動更新

それぞれの説明と、無効化方法を記載します。

ローカル探索とグローバル探索【私見】

正しいかは自信がないのですが、dynamic設定の際にSyncthingが同期する仕組みとして、以下順序でP2P通信が行われます。これをローカル探索と呼びます。

  1. 同期ディレクトリの更新を検知
  2. 同一ネットワークに属するすべてのPCへUDPパケット(udp://:21027)をブロードキャスト
  3. ACKが返ってきたPC(=Syncthingサーバがlistenしている)とセッション確立
  4. 同期処理開始

ローカル探索でデバイスが見つからなかった場合、設定されてある探索サーバに向けてHTTPリクエストを送出して探索を行います。これをグローバル探索と呼びます。

探索サーバは自前で立ち上げることもできますが、デフォルトではhttps://discovery.syncthing.netへ問い合わせを行うようです。暗号化P2Pであるからグローバルでも安全だとは謳われている。

(脱線しますが、会社利用だとリスキーであるものの個人利用でしたらグローバル探索って便利そうですね。いつか自前ディスカバリサーバを立ち上げてみたって記事をポストしたいなぁ)

ローカル/グローバル探索を無効化するぜ

同期しているデバイス数だけ設定を行う必要がありますのでご注意ください。本記事では上図でいうところのAの設定を行っています。IPアドレスなど適宜読み替えてくださいな。

【マシンAで行うこと】listenアドレスの変更

Settings >> Connectionsから以下のように設定変更します。

  • Listen Addressesをtcp://:22000に変更(ポート番号は任意)
  • Global Discoveryを無効化
  • Enable Relayingも無効化

【マシンB、Cで行うこと】デバイス設定の変更

Remote DevicesからマシンAをクリック、開いたアコーディオンメニューのEditを選択して以下のように設定変更します。

  • Addressesをtcp://<マシンAのIPアドレス>:22000に変更

マシンB、Cでも同様の設定を行ったら、最後に適当なファイルを追加削除して同期がされるか確認しておきましょう。

3. 自動更新

説明不要ですね。Syncthingのリリース更新がある場合に通知をしてくれるよう、定期的に最新バージョンの確認をするかどうかの設定です。 私の場合、別のパッケージ管理(pacman, apt, scoop)で最新バージョンへの更新は行えるため無効にしました。

  • Automatic upgradesをNo upgradesに変更

いかがでしたでしょうか?ここまで書いておいてなんですがIP指定の部分、DHCPだと使えない手順ですね。これ😢

賢く使って、よいPCライフを。

Advertisement