ファイル同期といえばDropboxですよね。無料プランでも結構な容量が使えますし、LinuxとWindowsでファイル同期することもできます。スマホからファイルにアクセスすることも可能ですね。
でも、Dropboxのような外部のサーバーに預けるのは気が引けるファイルもありますよね。かといって、暗号化したものをDropboxで同期すると扱いが面倒だったりします。復号化する手間がかかったり、スマホから見れなかったりとか。
そこで使えるのが、「Syncthing」というソフトです。Dropboxと同様、LinuxやWindowsなどでファイル同期を行うソフトなのですが、中央サーバーにファイルを預けずに同期が可能です。同期したい複数のPCやスマホにSyncthingをインストールして接続すれば、あとはインターネットにつながっている間にフォルダ単位で同期しつづけてくれます。固定のIPアドレスは不要ですし、ルーターも自動で超えて同期可能です。オープンソースソフトウェアなので中身が公開されていて安心ですし、PC版もスマホ版も無料で利用できます。では、Syncthingについて紹介していきましょう。
Syncthingのイイ所
外部のサーバーにファイルを預けず安全に同期ができる
Syncthingなら「誰にも渡したくないけれども、常に複数のPC・スマホで同期したいファイルがある」という要望にこたえられます。ファイルを他の誰かが管理するサーバーに預けることなく、LANおよびインターネットにつながっているデバイス間で同期することができます。もちろんデータは暗号化して送受信されるので、覗き見される心配もありません。
上限容量を気にしなくてもいい
Dropboxだと、容量を気にして使わないといけないですよね。一方、Syncthingは外部サービスにファイルを預けませんから、各デバイスのストレージ容量いっぱいまで使えます。
WebインタフェースからGUIで設定できる
サーバーソフトというと、設定ファイルを手で編集するのが多いですよね。でもSyncthingは、Webインタフェースで簡単に設定することができます。
Linux、Windows、Mac OS X、Androidなどの間でファイル同期できる
各OS向けのバイナリとソースコードが配布されているので、多様なデバイスでファイル同期が可能です。
ファイルサーバーでの共有と違って各デバイスにファイルがある
これはDropboxも同じですが、Syncthingでもデバイスごとのローカルストレージにファイルが保存されます。ファイルサーバーでの共有だと、とくに多人数で使っている場合はパフォーマンス的な問題が出たりしますよね。ファイル同期だと、ストレスなく使えるのが良い点です。また、複数のデバイスにファイルがコピーされるので、障害時のバックアップにもなるというのもメリットです。
双方がNATを超えて同期できる
自宅や社内のファイルサーバーにアクセスしようとすると、ルーターでポートフォワードを設定するとか、VPNサーバーに接続するとかいったことが必要になりますが、Syncthingは何もしなくてもNATを超えて同期してくれます。双方のルーターがUPnPに対応している必要がありますが、ほとんどのルーターが対応しています。
同期するフォルダをデバイスごとに選べる
Dropboxだと、同期するフォルダは1つですよね。Syncthingの場合、デバイスごとに同期するフォルダを選択することができます。例えば、PCだけで使うファイルを入れたフォルダと、スマホでも使うファイルを入れたフォルダに分ける、といったことができます。こうしておけば、スマホに余計なファイルを同期しなくて済みますね。
中央サーバーがない(常時接続のデバイスを追加することはできる)
Dropboxだと、同期するファイルはDropboxのサーバーにも保存されますよね。また、一般的なファイルサーバーでも、特定のサーバーにファイルが貯められます。一方、Syncthingはpeer-to-peer(P2P)で分散同期するシステムで、こうした「中央サーバー」は存在しません。設定したデバイス同士が接続したら同期がはじまる仕組みです。サーバーがなくても気軽に使えるというのはメリットですね。ただ、中央サーバーが無いため、他のデバイスの電源がすべて落ちていると同期できない、ということになります。たとえば2台だけで同期しているなら、片方の電源が落ちているともう一方は同期しようがないということですね。それだと問題があるという場合は、常にネットワークにつながっているデバイスも同期に参加させるだけで、いつでも同期ができます。既存のLinuxサーバーがあれば入れてもいいですし、Raspberry Piを省電力Syncthingサーバーにするという手もあります。NAS製品でSyncthingが動くものもあります。
デスクトップ環境が入っていないLinuxサーバーでも簡単に動く
VPSなどの環境で動いているLinuxには、デスクトップ環境は入っていないのが普通ですよね。Dropboxの場合、そういう環境へのインストールはデスクトップ版と異なる手順が必要になりますが、Syncthingはデスクトップ版と同じ手順で簡単に導入できます。
Syncthing利用シーン
2台のPCだけで同期
一番簡単な使い方です。たとえば、デスクトップPCとノートPCで同期を設定しておけば、両方の電源が入っている間に同期されます。サーバーの無い環境で写真や動画、オフィスファイルなどを共有するのに便利ですし、一方のストレージが壊れた時のための簡易的なバックアップにもなります。
自宅サーバーにも同期
自宅サーバーがあるなら、そちらにもSyncthingを入れて同期を設定しておくのがおすすめです。そうすれば、デスクトップPCの電源が切れている時でもノートPCに同期できます。また、デスクトップPCの電源を切って出かけても、外出先からルーターを超えて自宅サーバーと同期することもできます。これなら、Dropboxと使い勝手は大きく変わらなくなりますね。PCやRaspberry Piで動く普通のLinuxサーバーを使う方法もありますし、Synology DiskstationやQNAP、ReadyNASといったLinuxベースのNASデバイスにSyncthingを入れる方法もあります。
スマホとも同期
Androidスマートフォンに「Syncthing」を入れておけば、PC-スマホ間でもファイルを同期させることができます。前述の通り、スマホにも同期させるファイルは別フォルダにしておいたほうがいいでしょう。また、AndroidのSyncthingアプリには、デフォルトでカメラ画像フォルダが同期対象として追加されています。これをPCに同期する設定を行うだけで、撮影した画像がバックアップされるというわけです。
なお、Androidには以下の記事で紹介したKDE Connectを設定しておくのもおすすめです。同期の開始を待つことなく、直接スマホにファイルを送ることができます。また、スマホへの着信をLinux PCに通知するなど多彩な機能があります。
VPSにも同期
VPSでLinuxを動かしているなら、Syncthingを入れてPCと同期しておくのも便利でしょう。自宅サーバーに比べたら容量的な制限はありますが、いつでもどこからでも同期できるのは強みです。またVPS上のファイルを手元のPCなどに同期するという使い方もできます。
Linuxサーバー間で同期
Linuxサーバー間での同期というと、rsyncをパスワード無しで実行できるようにしたりとか、面倒なことが多いですよね。その点Syncthingを使えば、簡単にサーバー間のファイル同期を行うことができます。たとえば、cronで重要なファイルを数世代分バックアップしているディレクトリを、障害に備えて他のサーバーに同期しておくといった使い方があります。
Syncthingのインストール
Ubuntu/Debian系なら最新のSyncthingが簡単にインストールできます。以下の通りコマンドを実行するだけです。
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt update
sudo apt -y install syncthing
なお、とくにLinuxサーバーの場合はファイアウォールが設定されているかもしれませんね。その場合、TCPの22000番ポートとUDPの21027番ポートへの接続を許可する設定が必要です。ufwを用いているなら、以下のコマンドで設定することができます。
sudo ufw allow syncthing
Windowsの場合、SyncTrayzorをインストールするのが簡単です。
AndroidのSyncthingアプリは、以下からインストールできます。
[appbox googleplay appid com.nutomic.syncthingandroid]
その他のOS、ディストリビューションについては、https://docs.syncthing.net/users/contrib.htmlを参照してください。
デバイスと同期フォルダの追加
LinuxデスクトップにSyncthingをインストール後、コマンドラインで「syncthing」を実行してください。すると、Syncthingが起動すると共に、ブラウザでhttp://127.0.0.1:8384/が開き、以下のような設定画面が表示されます。
AndroidにSyncthingを入れた場合は、以下のような画面が表示されます。
これらの画面から、相互に「デバイスの追加」を行います。デバイスの追加には「デバイスID」が必要です。PCでWebブラウザを使っている場合は、左上の「メニュー」→「IDを表示」を選択します。同じLANに接続しているなら、もう一方のPCで右下の「接続先デバイスを追加」をクリックし、「デバイスID」を選んで登録できます。IDを直接入力して登録することも、もちろん可能です。
AndroidにIDを追加するなら、Android側で「デバイスの追加」をタップし、デバイスIDの入力欄右側にあるQRコードアイコンをタップすれば、内蔵カメラで別デバイスに表示されたIDのQRコードを読み取ることができます。
デバイスを追加すると、相手側ブラウザに許可してよいかどうかの確認ダイアログが出ます。ここで「デバイスを追加」をクリックし、同じダイアログで追加を行えば、同期が可能となります。
デバイスを追加時、共有(同期)するフォルダを選択することもできます。もちろん、後から別のフォルダを追加することも可能です。PC版の初期状態では「~/Sync」が「Default Folder」として追加されています。
Syncthingでは、接続したデバイス双方で同じ「フォルダーID」がついているフォルダが同期されます。一方でフォルダを追加し、他方に同期するよう設定してみましょう。
このように実行すると、「共有するデバイス」で選択された側には、以下のように表示されます。
双方で同期の設定が完了すると、同期が開始します。
GUIの無いLinuxサーバーでSyncthingを設定する方法
GUIの無いLinuxサーバーの場合、syncthingを起動してもWebブラウザは開けませんし、初期設定では他のPCからWebブラウザでアクセスすることもできません。そこで、他のLinuxデスクトップから、以下のようなSSHコマンドでLinuxサーバーへ接続しましょう。
ssh -L 9999:localhost:8384 ユーザー名@サーバーのホスト名orアドレス
こうすると、localhostの9999番ポートへのアクセスが、接続先サーバーの8384番ポートに転送されます。SSHで接続したまま、Webブラウザで「http://localhost:9999」を開いてください。リモートで動いているSyncthingの設定画面が表示されるはずです。もちろん9999以外のポートを使っても構いません。
Syncthingの自動起動
多くのLinuxでは、systemdに登録することでログイン前からsyncthingを動かすことができます。以下は設定例です。ユーザー名「lintaro」は、ご自身のものに変えて実行してください。
sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/[email protected] || sudo cp /etc/systemd/system/[email protected] /etc/systemd/system/[email protected]
sudo systemctl restart [email protected]
sudo systemctl enable [email protected]
ログイン後、ブラウザで「http://127.0.0.1:8384/」にアクセスすると設定画面が開きます。
Windowsなら、SyncTrayzorを使っていれば、ログイン時に自動で起動してタスクトレイに常駐するはずです。
Androidでは、左上のメニューから「設定」→「実行条件」にある「常にバックグラウンドで実行」にチェックを入れることで再起動後に自動起動します。同期するファイルのサイズや使用回線によっては、「Wi-Fi接続時のみ同期」にもチェックを入れたほうがいいでしょう。
まとめ
Syncthingは、さまざまな活用ができるソフトです。家庭内のPCでファイルを手軽にファイルを共有するためにも使えますし、遠隔地にある何台ものPCやサーバーから手元のサーバーに自動でバックアップを取る、といった使い方もできます。VPSで生成したファイルをスマホに同期して、いつでも見られるようにするなんていう使い方もできそうです。
なお、持ち歩くPCでSyncthingを使うなら、通信回線やストレージへの負担を考えて、日常的に使う各種ファイルや、最近作成したテキストファイルやオフィスファイルだけを同期しておき、大きなファイルや何年も前のファイルはファイルサーバーに置いておいたほうがいいでしょう。
外出先からアクセスできるファイルサーバーが欲しいなら、LinuxサーバーにNextcloudを入れるのが非常に便利です。あらゆる画像や動画、電子書籍、「自炊」したPDF、過去に作成した文書など、あらゆるファイルに外出先からブラウザでアクセスすることができますし、外部からのアップロードも簡単です。このNextcloudについては、いずれ別の記事で紹介したいと思います。
関連サイト
https://syncthing.net/
https://docs.syncthing.net/
https://apt.syncthing.net/
コメント