序章

サーバーとローカルマシン間でファイルとディレクトリを同期することは、ネットワーク化されたコンピューターを扱う場合の非常に一般的な要件です。 ディレクトリの内容を自動的に同期する1つの方法は、 BitTorrentSyncと呼ばれるテクノロジーを使用することです。 このソフトウェアは、同期ツールとしてファイル共有に一般的に使用されるBitTorrentプロトコルを利用します。

BitTorrent Syncを介した通信は、自動生成される一意の共有シークレットに基づいてエンドツーエンドで暗号化されます。 ファイル共有メカニズムとしてのBitTorrentはパブリックサービスですが、BitTorrent Syncがプロトコルを使用する方法はプライベートです。つまり、ファイルを安全に転送できます。

このガイドでは、2台のUbuntu14.04サーバーにBitTorrentSyncをインストールして使用する方法を示します。 共有ディレクトリを設定する方法と、サーバーを安全に管理するためにWebインターフェイスにSSL暗号化を設定する方法を示します。

BitTorrentSyncをインストールする

始めるために必要な最初のステップは、両方のサーバーインスタンスにBitTorrentSyncソフトウェアをインストールすることです。 このガイドの手順の多くは両方のマシンに反映されるため、マシンごとにコマンドを複製するようにしてください。

Ubuntuのデフォルトリポジトリで利用できる公式のBitTorrentSyncパッケージはありません。 ただし、Leo Moll(tuxpoldoとして知られている)によって作成された、よく管理されたPPA(パーソナルパッケージアーカイブ)があり、これを使用して最新のパッケージを取得できます。

両方のサーバーで、このPPAを追加して、システムがパッケージをプルダウンできるようにします。

sudo add-apt-repository ppa:tuxpoldo/btsync

次に、ローカルパッケージインデックスを更新して、システムが新しく利用可能なソフトウェアを認識できるようにする必要があります。 次に、BitTorrent Syncとnginxをインストールして、後でWebインターフェイスにSSL暗号化を追加します。

sudo apt-get update
sudo apt-get install btsync nginx

インストールしようとすると、プロンプトでかなりの数の質問が表示されます。 今のところ、すべてのプロンプトでEnterキーを押します。 より詳細な方法で、サービスを一時的に再構成します。

BitTorrentSyncを設定する

ソフトウェアがインストールされたので、実際に構成スクリプトを実行して、値の入力をもう一度求めます。 ただし、今回は、目的に必要な追加のオプションにアクセスできます。

スクリプトを再度実行するには、今回は設定を選択して、各サーバーで次のように入力します。

sudo dpkg-reconfigure btsync

これにより、初期インストール時よりもより多くのプロンプトが表示されます。 ほとんどの場合、デフォルト値を使用し、Enterキーを押すだけです。

以下に、必要な構成する値の概要を示します。

  • WebインターフェイスバインドIPアドレス127.0.0.1
  • Webインターフェイスにアクセスするためのユーザー名:[好きなものを選択してください。 この例では、adminアカウントを保持します。]
  • Webインターフェイスにアクセスするためのパスワード:[お好きなものを選択してください。 デモ用にpasswordを使用します。]
  • デーモンに設定するUmask値002

ご覧のとおり、ほとんどの設定では、デフォルトを受け入れることができます。 ただし、上記の選択は非常に重要です。 これらを誤って設定した場合は、コマンドを再度実行して選択を修正してください。

BitTorrentSyncWebインターフェイスへのSSLフロントエンドの構成

これで、ほとんどの部分でBitTorrentSyncがセットアップされました。 同期ディレクトリを少し設定します。 ただし、今のところ、SSLを使用してnginxWebサーバーをセットアップする必要があります。

ローカルループバックインターフェイス(127.0.0.1)でのみ使用できるようにWebインターフェイスを構成したことに気付いたかもしれません。 これは通常、リモートサーバーでBitTorrent Syncを実行しているときに、これにアクセスできないことを意味します。

BitTorrent Syncトラフィック自体は暗号化されていますが、Webインターフェイスへのトラフィックはプレーンテキストで送信されるため、このようなアクセスを制限しました。 これにより、サーバーとローカルコンピューター間のトラフィックを監視しているすべてのユーザーが、マシン間で送信された通信を確認できるようになります。

SSLを使用してnginxをセットアップし、SSLを介してBitTorrentWebインターフェイスへの接続をプロキシします。 これにより、BitTorrentSyncインスタンスをリモートで安全に管理できるようになります。

繰り返しますが、両方のホストでこれらすべての手順を実行する必要があります。

SSL証明書とキーを生成する

この設定を行うための最初のステップは、SSL証明書とキーを保持するディレクトリを作成することです。 これは、nginx構成ディレクトリ階層の下で行います。

sudo mkdir /etc/nginx/ssl

これで、次のコマンドを発行することで、SSL証明書とキーを1回の操作で作成できます。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

証明書の情報を入力するように求められます。 できるだけ多くのフィールドに入力してください。 本当にが重要なのはこれだけです:

Common Name (e.g. server FQDN or YOUR name) []:

このフィールドには、サーバーのドメイン名またはパブリックIPアドレスを入力します。

SSLでトラフィックを暗号化し、BitTorrentSyncに渡すようにNginxを構成する

これで、リモートクライアントと通信するときにSSL証明書を使用するようにnginxサーバーブロックを構成できます。 次に、ローカルインターフェイスでリッスンしているBitTorrentSyncWebインターフェイスに情報を送信します。

将来これを使用する必要がある場合に備えて、デフォルトのnginxサーバーブロックファイルはそのままにしておきます。 BitTorrent Syncはデフォルトでポート「8888」で動作するため、これをフロントエンドSSLポートとしても使用します。

エディターでsudo権限を持つ新しいファイルを開いて、新しいサーバーブロックファイルを作成します。

sudo nano /etc/nginx/sites-available/btsync

内部に、次の行を追加する必要があります。

サーバー{ listenserver_domain_or_IP :8888 ssl;  server_name server_domain_or_IP ;
access_log /var/log/nginx/access.log;

ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;

location / {
    proxy_pass http://127.0.0.1:8888;
}

}

赤いテキストをサーバーのドメイン名またはパブリックIPアドレスに変更してください。 これにより、nginxは、BitTorrentSyncWebインターフェイスがローカルインターフェイスで使用しているのと同じポートにバインドするように指示されます。 違いは、nginxがパブリックアドレスを使用し、SSLを必要とすることです。

クライアントへのトラフィックを暗号化するために作成したSSL証明書を使用します。 次に、それをBitTorrentSyncインターフェースに渡します。 このようにして、サーバーとクライアント間のトラフィックは暗号化されますが、BitTorrent Syncインターフェイスは、サーバー自体からアクセスしているかのように動作します。

終了したら、ファイルを保存して閉じます。

ここで、ファイルをリンクして有効にする必要があります。

sudo ln -s /etc/nginx/sites-available/btsync /etc/nginx/sites-enabled/

これで、サービスを再起動して変更を実装できます。

sudo service nginx restart

2台のサーバーのそれぞれでこれらの手順を実行してください。

共有ディレクトリを作成する

これでBitTorrentSyncが構成され、Webインターフェイスとのセッションを暗号化するためにSSLとnginxが設定されました。

Webインターフェイスの使用を開始する前に、同期するディレクトリを設定する必要があります。 BitTorrent Syncがリモートホストからミラーリングしたファイルを作成する方法のため、この部分の構成は非常に重要です。

まず、このガイドでは、両方のサーバーの/sharedにあるディレクトリを同期します。 これらのディレクトリを今すぐ作成しましょう。

sudo mkdir /shared

ディレクトリを取得したら、rootアカウントにディレクトリの所有権を付与します。 同時に、「btsync」グループ(これはインストール中に作成されました)グループにディレクトリの所有権を与えます。

sudo chown root:btsync /shared

このアクセスを構成するにはさまざまな方法があり、それぞれに影響があります。 ここでは、権限と所有権の競合を最小限に抑える、かなり柔軟なシステムを示しています。 他の選択肢とそのトレードオフについては、この記事の共有フォルダー構成を確認してください。

所有権を割り当てたら、権限を調整する必要があります。 ディレクトリのsetgidビットを設定して、btsyncグループがディレクトリに作成されたすべてのファイルのグループ所有権を付与されるようにします。 これを正しく機能させるには、グループに書き込み権限を与える必要もあります。

sudo chmod 2775 /shared

最後に、通常のシステムアカウントはディレクトリのユーザー所有者またはグループ所有者ではないため、通常のアカウントをbtsyncグループに追加する必要があります。 これにより、通常のユーザーとしてこのディレクトリのコンテンツにアクセスして操作できるようになります。

sudo usermod -a -G btsync your_user

:この時点で、これらの変更を現在の環境に登録するには、ログアウトしてから再度ログインする必要があります。 次のように入力して終了します。

exit

ここで再度ログインします。

BitTorrentSyncWebインターフェイスにアクセスします

すべての設定が完了したので、管理Webインターフェイスを調べて各部分をまとめることができます。

まず、「https」プロトコルを使用して、ポート「8888」のWebブラウザで両方のサーバーにアクセスする必要があります。 これは次のようになります。

https:// server_domain_or_IP :8888

ほとんどの場合、次のような警告が表示されます。

これは、ブラウザがSSL証明書に署名した当事者を認識しないことを通知する警告にすぎません。 自己署名SSL証明書を生成したので、これは完全に理にかなっており、予想されます。「とにかく続行」またはブラウザに表示される同様のボタンをクリックしても安全です。

BitTorrentSyncの設定中に選択したユーザー名とパスワードの入力を求められます。 この例では、資格情報はadminpasswordでしたが、あなたの資格情報(特にパスワード)は異なる場合があります。

認証すると、メインのBitTorrentSyncWebインターフェイスが表示されます。

共有ディレクトリを最初のサーバーに追加します

構成したディレクトリをWebインターフェイスに追加し始めることができません。

右上隅にある[フォルダの追加]ボタンをクリックします。 BitTorrentSyncインターフェイスにディレクトリを追加するためのダイアログボックスが表示されます。

作成した/sharedディレクトリまでスクロールしてクリックします。 「パス」フィールドに正しい値を入力する必要があります。

[シークレット]フィールドの横にある[生成]ボタンをクリックして、ディレクトリのシークレットキーを作成します。

右下の「追加」ボタンをクリックします。 ディレクトリがBitTorrentSyncWebUIに追加されます。

これで、新しいボタンが利用可能になりました。 追加した/sharedディレクトリに関連付けられている[Secret/QR]ボタンをクリックします。

このディレクトリの秘密を示すダイアログボックスが表示されます。 これは、このディレクトリをBitTorrentSyncの別のインスタンスと同期する方法です。

このソフトウェアを使用すると、ディレクトリへのフルアクセス(読み取りおよび書き込みアクセス)または読み取り専用アクセスを設定できます。 このガイドでは、双方向同期を許可するようにフルアクセスを構成しますが、これは単なる設定です。

2番目のサーバーとの同期を設定するには、このインターフェイスから「フルアクセス」シークレットをコピーする必要があります。

共有ディレクトリとシークレットを2番目のサーバーに追加します

ディレクトリを共有するように最初のサーバーを構成したので、2番目のサーバーをセットアップする必要があります。

若干の違いはありますが、ほとんど同じ手順を実行します。

もう一度、2番目のサーバーのドメイン名またはIPアドレスを使用して、Webインターフェイスにサインインします。 「https」とポート「8888」を使用することを忘れないでください。

https:// second_server_domain_or_IP :8888

再びSSL警告が表示され、認証する必要があります。 前に見たのと同じ空のインターフェースが表示されます。

以前と同じように、[フォルダの追加]ボタンをクリックします。 作成した/sharedディレクトリを選択します。

この時点で、新しいシークレットを生成する代わりに、最初のサーバーで生成されたシークレットを使用します。 これにより、各シークレットは一意でランダムに生成されるため、これら2つのインスタンスが通信できるようになります。 最初のサーバーからの秘密を入力します。

終了したら、右下隅にある[追加]ボタンをクリックします。

しばらくすると、メインインターフェイスの[接続されたデバイスとステータス]列に、コンパニオンサーバーに関する情報が表示されます。

これは、サーバーが相互に通信しており、コンテンツを同期できることを意味します。

BitTorrent同期をテストする

現在の設定をテストしてみましょう。

どちらのサーバーでも(フルアクセスを構成したかどうかは関係ありません)、/sharedディレクトリに移動します。

cd /shared

次のように入力して、10個のサンプルファイルを作成できます。

touch file{1..10}

しばらくすると、他のサーバーで、作成したファイルが表示されるはずです。

# On the second server
cd /shared
ls -l

total 0
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file1
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file10
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file2
-rw-rw-r-- 1 btsync btsync 0 May 19 17:07 file3
. . .

ご覧のとおり、ファイルは同期されています。 ただし、Webインターフェイスを見ると、この同期は登録されていません。 これは、これらのファイルに実際のデータが含まれていないためです。

2番目のサーバーからそれらのファイルにデータを書き込むことにより、コンテンツを含むファイルをいつ転送できるかをテストします。 これにより、変更を最初のサーバーに同期できることをテストすることもできます。

2番目のサーバーでは、次のように入力して、作成した各ファイルに「一部のコンテンツ」というフレーズを書き込むことができます。

for item in /shared/file{1..10}; do echo "some content" > $item; done

数秒後、最初のサーバー上のファイルに、追加したコンテンツが表示されます。

# On first server
cat /shared/file1

some content

また、サーバー間で同期されたファイルの数とスペースの量を反映するようにWebインターフェイスも更新されていることを確認する必要があります。

これが機能している場合は、サーバー間の変更をミラーリングするようにBitTorrentSyncを正常に構成しています。

結論

これで、リモートサーバー間でファイルを安全に転送できる柔軟な設定ができました。 さらに、この構成では、SSLを利用して、安全な接続を介してサービスを管理できます。

アプリケーション自体は非常に柔軟性があり、さまざまな方法で使用できます。 いくつかの便利な機能は、モバイルデバイスでシークレットをQRコードとしてスキャンする機能、コンテンツへの読み取り専用アクセスを構成する機能、およびクライアントに1回限りのシークレットを提供する機能です。 特定のホストとのみ通信するようにサーバーを構成することもできます。

BitTorrent Syncサービスは、共有ディレクトリ内の非表示の./SyncArchiveディレクトリを利用して古いバージョンのファイルを保持する、シンプルなバージョン管理システムも提供します。 他のサービスに影響を与えずにファイルが同期されていることを確認したい場合は、レート制限などの制限を実装することもできます。

ジャスティン・エリングウッド