ラズパイを使ってネットワークカメラを構築し、外部ネットワークからカメラの映像を閲覧できるようにします。また、カメラはUSB接続のできるWebカメラを使用します。
本記事は外から家にいるペットの様子を見たいという方にはおすすめです。また、防犯目的で使うことも良いでしょう。
大まかな流れ
- Webカメラをラズパイに接続
- MJPG-streamerのインストール
- ストリーミングサーバーをローカルで起動
- 動作確認
- Webカメラをラズパイに接続
- ストリーミングサーバーをローカルで起動
- SSH接続
- ファイアウォール
- ポート開放の設定
- グローバルIPアドレス
Webカメラをラズパイに接続
Webカメラをラズパイにつなげた後、lsusbを実行します。
$ lsusb
Webカメラがラズパイに認識されているか確認します。認識されていれば接続成功です。
MJPG-streamerのインストール
MJPG-streamerと呼ばれる、ストリーミング形式でネットワークカメラを構築するためのソフトをインストールします。
$ sudo apt-get update
$ sudo apt-get install -y subversion libjpeg-dev imagemagick
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer
$ make
$ sudo make install
ストリーミングサーバーをローカルで起動
フレームフレートやポート番号などを指定してmjpg-streamerを起動します。
$ sudo ./mjpg_streamer -i "./input_uvc.so -f 10 -r 320x240 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080"
動作確認
ブラウザからポート番号を指定したIPアドレスにアクセスします。
IPアドレスはラズパイに割り当てられたアドレスで、ポート番号はストリーミングサーバーを起動するときに設定した8080です。
IPアドレスはifconfig
コマンドで確認できます。
http://xxx.xxx.xxx.xxx:8080
のように指定します。
こんな感じで映像が見られます。
次に外部ネットワークからWebカメラの映像を見るためにセキュリティーの設定を行います。
SSH接続
SSHを有効にします。
以下のコマンドを実行してラズパイの設定画面を開きます。
$ sudo raspi-config
実行すると設定用の画面が開くので、7 Advanceed Optionsを選択します。
次に、A4 SSHを選択します。すると「SSHを起動しますか」ときかれるので、はいを選択します。これでSSHの起動は完了です。
ファイアウォール
ファイアウォールの設定にはufwというツール使います。このツールはLinuxでよく使われるツールだそうです。
時間があればufwよりもiptablesを使用することをおすすめします。
まずはufwのインストールをします。
$ sudo apt-get install ufw
この段階のファイアウォールの状態は無効になっているはずです。以下のコマンドで確認してみます。
$ sudo ufw status
実行後、Status: inactiveと結果が返ってくるはずです。これは無効の状態です。有効にするには以下のコマンドを実行します。
$ sudo ufw enable
無効にするには以下のコマンドを実行します。
$ sudo ufw disable
次にファイアウォールの最後の設定をします。
Webカメラで8080番ポートを使用するものとして、以下の設定を行います。4行コマンドラインがありますが上から順に、
- 外部からの接続は基本的に受け付けない
- ローカルアドレスからのssh接続(22番ポート)は受け付ける
- 8080番ポートは受け付ける
- 80番ポートは受け付ける
となっています。
$ sudo ufw default deny
$ sudo ufw allow proto tcp from 192.168.10.0/24 to any port 22
$ sudo ufw allow 8080
$ sudo ufw allow 80
状態を確認します。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW 192.168.10.0/24
8080 ALLOW Anywhere
80 ALLOW Anywhere
上のように結果が帰ってきたら成功です。
ポート開放の設定
あとはネットワークの設定を行います。使用しているルーターの管理画面にアクセスし、ポート開放を行います。指定するポート番号は今まで使用してきた8080で設定します。通信プロトコルはTCPです。スタートポート(開始ポート)とエンドポート(終了ポート)の指定欄がある場合はどちらも8080と設定してください。
また、ssh接続で使う22ポートも同じように開放してください。
グローバルIPアドレス
内部ネットワークからのアクセスであれば、[プライベートIPアドレス]:[ポート番号]でよいのですが、外部からアクセスするとなると[グローバルIPアドレス]:[ポート番号]を指定しなければなりません。
グローバルIPアドレスはCMANのIPアドレス確認ページで見ることができます。
確認後、グローバルIPアドレス:8080でアクセスするとラズパイにつながり、Webカメラの映像を見ることができます。
この記事の内容だけだとセキュリティに心配なので、https://qiita.com/nisyuu/items/333bf5bd0b8c4e71a26b も参考にしてみてください。
参考文献
ネットワーク入門サイト
【グローバルIPアドレス】と【プライベート(ローカル)IPアドレス】の違いと、確認方法についてまとめてみた
Raspberry Pi 3 Model Bでネットワーク ライブカメラを構築する方法 MJPG-streamer編
USBカメラで監視カメラ