こんにちは、イシイです。

今まで展示期間中などにおいて、運営の方から受けた報告から状況を把握したり、システムメンテナンスを行うために都度足を運ぶのは大変なので、リモートアクセスできたらいいのに、というシーンが度々ありましたが、清流の国ぎふ芸術祭の展示で、試しに「Cloud Pi(クラウド・パイ)」というリモートアクセスの仕組みを使ってみたので、今回はこの仕組みの導入エントリーです。

Cloud Pi(クラウド・パイ)とは

Cloud Piの製品ページに

『Cloud Pi』は、容易にNAT越えを可能とするP2P(Point to Point)トンネルシステムをRaspberry Pi向けに提供するソフトウェアキットです。

と記載されているとおり、Cloud Piを使うと、プライベートIPアドレスしか持っていないRaspberry Piに直接接続できます。つまり、インターネット環境に接続しているRaspberry Piへリモートアクセスができる、ということになります。

それでは早速使ってみましょう。

事前準備

Cloud Piのダウンロードページより、サーバーモジュールのRaspberry Pi版をダウンロードしておきます。また、今回はRaspberry PiへはWindowsからのアクセスを試してみますので、クライアントモジュールのWindows版もダウンロードしておきます。あわせて、Cloud Pi製品に同梱されているQRコードとUIDが記載されたカードも手元に用意しておきます(QRコードにはモザイクをかけています)。 thumb_0

サーバー側(Raspberry Pi)の準備

事前にダウンロードしておいたファイル「p2ptunnel_v100.tar.gz」をRaspberry Piにアップロードします。特に場所の指定はありませんが、ここではユーザーホームディレクトリ(/home/pi/)にアップロードしました。

続けて、Cloud Pi用のディレクトリを作成し、ダウンロードしたファイルを設置・解凍します。

mkdir cloudpi
mv p2ptunnel_v100.tar cloudpi/
cd cloudpi
tar xvf p2ptunnel_v100.tar

解凍したディレクトリに移動し、Cloud Pi実行ファイルをコピーします。

cd p2ptunnel
sudo cp cloudpi /etc/init.d/cloudpi

コピーしたファイルに実行権限を付与します。

sudo chmod 755 /etc/init.d/cloudpi

Cloud Piの設定ファイルを開き、カードに書かれたUID(20桁)と、自分で決めたパスワード(4桁以上10桁以下)に置き換えます。

emacs cloudpi.conf
-----------------
uid=UID(20char)
password=1234567890
↓
uid=XXXXXXXXXXXXXXXXXXXX
password=XXXXXXXXXX

設定が終わったら、

sudo insserv cloudpi

でサービス登録し、

sudo reboot

で再起動してサービスを開始します。Raspberry Pi側の設定作業はこれだけです。

クライアント側(Windows)の準備

事前にダウンロードしておいたファイル「CloudPi_v100.zip」を解凍し、「P2PTunnel.exe」を起動します。まずは接続情報を設定する必要があるため、「追加」をクリックします。

thumb_1

追加・編集ウィンドウが開いたら、名前には任意の名称を、UIDとパスワードにはRaspberry Pi側で設定した内容をそれぞれ指定します。入力が終わったら、ポートフォワードの設定を行うため、「ポート設定」をクリックします。

thumb_2

ポート設定ウィンドウが開いたら、「追加」をクリックします。

thumb_3

ポートの追加・編集ウィンドウが開いたらポートの指定を行います。今回はSSHを使用してみますので、ローカル:10022、ラズパイ:22で設定しました。ブラウザなどを使用する場合はローカル:8080、ラズパイ:80などで指定します。入力が終わったら、「OK」でウィンドウを閉じます。

thumb_4

接続情報が追加されたので、追加された項目を選択し、「接続」をクリックします。

thumb_5

うまく接続が確立されると、ログに「CONNECTION SUCCESS UID[XXXXXXXXXXXXXXXXXXXX]」が表示されます。

thumb_6

これでRaspberry Piに直接アクセスできる準備ができたので、SSHクライアントとしてPuTTYを使って接続してみます。PuTTYを立ち上げ、ホスト名に「Raspberry Piユーザー名@127.0.0.1」、ポートに10022、コネクションタイプにSSHを指定してOpenします。

thumb_7

パスワードを求められるので、Raspberry Piユーザーのパスワードを入力します。

thumb_8

これで、プライベートIPアドレスしか持っていないRaspberry Piに直接アクセスできました!

thumb_9

諸々作業が終わったら、Cloud Piのアプリケーションから接続を「切断」しておきます。

thumb_10

「DISCONNECT UID[XXXXXXXXXXXXXXXXXXXX]」が表示されたら終了です。

その他のクライアントモジュール

今回使用したWindows版のクライアントモジュールの他に、PLANEXからAndroid版とiOS版も提供されていましたので、こちらも試してみました。

Android版

Androidの場合は、Google PlayからCloud Piのアプリをダウンロードします。また、SSHクライアントアプリも別途必要なため、今回はConnectBotというアプリを使ってみました。試してみた感じ、特に問題なくSSH接続できました。

iOS版

iOSの場合は、App Storeからアプリをダウンロードします。ただ、iOSのバージョンのせいなのか、ポートの指定をしてもうまく反映していないようでSSHの接続はできず、デフォルトの8080->80のポートフォワードは確認できました。そのため、SSH接続目的の場合には、iOS版は使用は控えたほうが良さそうです。

所感

Cloud Piを使用せず、別途中継サーバーを立ててautosshやリモートフォワードなどを使って同様の仕組みを作ることもできますが、環境構築にそこそこ労力がかかってしまいます。また、グローバルIPアドレスを割り当てられるSIMなどを使う場合には、契約等を結んだりするのが少々手間だったりするので、製品を買って上記の簡易な設定だけで済むのはかなり助かります。

清流の国ぎふ芸術祭の展示場にはルーターが設置されていなかったため、インターネットに接続させておくために3Gモデムを組み込む手間も必要でしたが、リモートアクセスしたRaspberry Piを踏み台にして別のネットワークインタフェースで接続しているローカルネットワークの端末へアクセスするような仕組みにして、リモートメンテナンス環境を構築しています。

Raspberry Piにリモートアクセスするような状況に使うサービス、という意味ではわりとニッチではありますが、Cloud Piの商品は1年間の使用料込での値段なこともあり、プライベートIPアドレスしかない環境へのリモートアクセス時には活躍してくれそうです。