ラズパイで見守りシステムの開発その3：remote.itで外からも家のカメラにアクセスできるようにする

こんにちは。

別の部屋で寝ている子どもが夜泣きで起きていないかを、ラズベリーパイを使って動体検知するシステムを[1回目の記事](https://qiita.com/quotto/items/73eb17f24c47469a1986)、[2回目の記事](https://qiita.com/quotto/items/0f7d6847d87cd0432260)で作ってきました。

前回で要件を満たすものは作れたのですが、もう1歩進めてみます。

動体検知と見守りは超便利ソフトウェアであるmotionを使ったわけですが、ラズパイ自体は家のネットワークにつながっているだけなので、ストリーム配信は当然家にいる時にしか見られません。

今回は**[remote.it](https://remote.it/)**を使って家のセキュリティ設定を変えずに、セキュアにリモートからも家のラズパイカメラを見れるようにしてみます。

## 『remote.it』って？
**[remote.it](https://remote.it/)**は非常に簡単にリモートネットワークから、家などのプライベートネットワーク内の機器にアクセスできるサービスです。

事前にremote.it上にアクセスしたいデバイスと利用するサービス（ポート）を登録しておくだけで、**家のルーターやデバイスには通常必要となるグローバルIPの設定やFWの穴あけといった作業を行う必要がありません。**信じられないほど簡単です。

SSHフォワーディングで構築されているものと思われます。

## remote.itの導入
では早速remote.itを導入してみます。

### アカウントの作成
remote.itの利用にはアカウントが必要です。

[トップページ](https://remote.it/)右上の「Sign Up」から登録します。
![2020-11-26_01h00_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/4fe36d9d-b4b2-bac7-ec18-befafc91307d.png)

メールアドレスとパスワードを入力します。
![2020-11-26_01h01_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/2d246047-4b7d-f3e1-481e-9ded640ca2e4.png)

入力したメールアドレスに認証用メールが届くので認証します。
![2020-11-26_01h01_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/0033cf72-d676-6e54-6336-3ddbab91dda4.png)

サインインするとこのようなページが確認できます。まだデバイスは登録されていません。
![2020-11-26_01h02_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/0cf1e2f9-c945-145c-06ba-074416e8fa68.png)


### ラズパイの設定
#### remote.itのインストールとデバイス登録
それではremote.itで接続したいラズパイの設定を行います。

ラズパイへログインしてパッケージ`connectd`をインストールします。

```shell
sudo apt install connectd
```

インストールが終わったらラズパイの登録を行うためにコマンド`connectd_installer`を実行します。

```shell
sudo connectd_installer
```

するとこのようなSign Inメニューが表示されるので「1」を選択します。

```console
********************* Sign In Menu *********************

     1) Sign in to your remote.it account
     2) Exit

********************************************************

Choose a menu selection (1 - 2):
1
```

メールアドレスとパスワードを入力してEnter。

```console
Please enter your remote.it Username (e-mail address):
mail@example.com

Please enter your remote.it password:
```

初回起動時はこのデバイスをremote.itに登録するため、remote.it上でのデバイスの識別名を入力します。

```console
Enter a name for your device (e.g. my_Pi_001).

The Device Name identifies your device in the remote.it portal.
Your services will be grouped under the Device Name.

Only letters, numbers, underscore, space and dash are allowed.

raspberrypi
```

メインメニューが表示されるので**「1」**を選択します。

```console
============================ Main Menu ============================

    1) Attach/reinstall a remote.it Service to an application
    2) Attach/reinstall a remote.it Service to a LAN application
    3) Remove a remote.it Service from an application
    4) Remove all remote.it Services, then exit
    5) Exit

===================================================================
    'application' is any TCP service (e.g. SSH, VNC, HTTP, etc.)
    running on this device.  'LAN application' is a TCP service
    running on another device on this LAN.
===================================================================
Choose a menu selection (1 - 5):
1
```

ラズパイ上で使うサービスのプロトコル（ポート）を選択します。ストリーム配信はHTTPなので**「2) Web(HTTP) on port 80」**を選びます。

```
*********** Protocol Selection Menu ***********

     1) SSH on port 22
     2) Web (HTTP) on port 80
     3) Secure Web (HTTPS) on port 443
     4) VNC on port 5900
     5) nxWitness on port 7001
     6) Samba (SMB) on port 445
     7) Remote Desktop (RDP) on port 3389
     8) NextCloud on port 443
     9) OpenVPN on port 1194
     10) Custom (TCP)
     11) Return to previous menu

***********************************************

 You can change the port value during install

***********************************************

Choose a menu selection (1 - 11):
2
```

HTTPなのでデフォルトポートは80ですがmotionのストリーム配信はポート**8081**なので、デフォルトから変更したポートを入力します。

```console
The default port for Web (http) is 80.

Would you like to continue with the default port assignment? [y/n]
n
Enter the port value to use (1 - 65535):
8081
```

登録するサービスを識別するための名前を入力します。何でも良いです。

```console
Enter a name for this remote.it service (e.g. ssh-Pi).
This name will be shown in your remote.it Service List.

Only letters, numbers, underscore, space and dash are allowed.

raspberrypi-motion
```

登録されるとメインメニューに戻り、上部に登録したサービスの一覧が表示されます。（私は試しにSSHも登録してみたのでその分も表示されています）

```console
=========================  Installed remote.it Services  ======================
 Service Name       | Protocol   | LAN Address        | Port | Application
-------------------------------------------------------------------------------
 raspberrypi-motion | HTTP       | localhost          | 8081 | OK: motion
 raspberrypi-ssh    | SSH        | localhost          | 22   | OK: sshd
-------------------------------------------------------------------------------
 Device Name: raspberrypi  Platform: arm-linaro-pi
 Hardware ID: XX:XX:XX:XX:XX:XX-XXXXXXXXXXXXXXXXX

============================ Main Menu ============================
```

#### motionのパスワード設定
remote.itの設定とは関係ありませんが、念には念を入れてmotionのwebページアクセス時にID/パスワードの認証ができるようにします。

`/etc/motion/motion.conf`を以下のように設定します。

```conf
# Set the authentication method (default: 0)
# 0 = disabled
# 1 = Basic authentication
# 2 = MD5 digest (the safer authentication)
stream_auth_method 1

# Authentication for the stream. Syntax username:password
# Default: not defined (Disabled)
stream_authentication ユーザー名:パスワード
```

これでmotionへのhttpアクセス時にパスワード認証が行われます。（認証方式はMD5 digestにしたかったのですが、remote.itからのアクセス時にうまくいかず……）

![2020-11-27_22h55_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/9db487cd-2677-aeab-fb58-6e5b65f88dea.png)

## remote.itで外からアクセスしてみる
設定がすべて終わったので外からアクセスしてみます。

remote.itのマイページを見ると、先ほど登録したラズパイが表示されているので開いてみます。
![2020-11-26_01h18_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/c16dad98-c9c8-d1bc-9707-a8f5c1f4f3c1.png)

登録したサービスが表示されています。Webサービスを選択します。
![2020-11-26_01h18_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/a4dc73f2-cae5-787d-ae22-1ec59414ee96.png)

すると一時的なドメインでアクセスが行われます。
![2020-11-27_23h00_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/351563ea-d5a6-4435-5c09-ac1a57c4d8e0.png)

設定したユーザー名/パスワードを入力すれば見事、家のカメラに接続できました！！

![名称未設定のデザイン (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/cc8ed0c9-7d4f-85ec-86bf-6157e2a066ed.png)


#### スマホアプリも使える
ちなみにremote.itはAndroid,iPhoneアプリも用意されており、スマートフォンからも簡単に接続できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/d8da1801-6591-edd3-ec77-b36f7e81c1c3.jpeg" width="400px" />

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/452c8b4d-63db-b6e3-8a06-daebbb00a73b.jpeg" width="400px" />

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183744/b0050e78-92b8-047f-bc80-4cc0900f7377.jpeg" width="400px" />



&nbsp;  
&nbsp;  

以上、全3回でラズパイで作る見守りシステム開発を紹介してきました。

私自身、ラズパイに触れるのは初めてでしたが比較的簡単に実装することができました。何より様々なデバイスやツール、ソフトウェアが利用できる環境に感心しました。

見守りシステムに限らず、今後もいろいろなものを手作りしていきたいなと思います。

## 参考URL
https://qiita.com/u___sk/items/e0df9581d2e58891ec8a