Published on

Raspberry Pi3を使ってネットワークカメラを構築してみる

Authors

ラズパイを使ってネットワークカメラを構築し、外部ネットワークからカメラの映像を閲覧できるようにします。また、カメラはUSB接続のできるWebカメラを使用します。

本記事は外から家にいるペットの様子を見たいという方にはおすすめです。また、防犯目的で使うことも良いでしょう。

大まかな流れ

  1. Webカメラをラズパイに接続
  2. MJPG-streamerのインストール
  3. ストリーミングサーバーをローカルで起動
  4. 動作確認
  5. Webカメラをラズパイに接続
  6. ストリーミングサーバーをローカルで起動
  7. SSH接続
  8. ファイアウォール
  9. ポート開放の設定
  10. グローバル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"

mjpg-streamer2.png

動作確認

ブラウザからポート番号を指定したIPアドレスにアクセスします。 IPアドレスはラズパイに割り当てられたアドレスで、ポート番号はストリーミングサーバーを起動するときに設定した8080です。

IPアドレスはifconfigコマンドで確認できます。

http://xxx.xxx.xxx.xxx:8080のように指定します。

mjpg-streamer.png

こんな感じで映像が見られます。

次に外部ネットワークからWebカメラの映像を見るためにセキュリティーの設定を行います。

SSH接続

SSHを有効にします。

以下のコマンドを実行してラズパイの設定画面を開きます。

$ sudo raspi-config

実行すると設定用の画面が開くので、7 Advanceed Optionsを選択します。 ファイアウォールラズパイ4.png

次に、A4 SSHを選択します。すると「SSHを起動しますか」ときかれるので、はいを選択します。これでSSHの起動は完了です。 ファイアウォールラズパイ5.png

ファイアウォール

ファイアウォールの設定にはufwというツール使います。このツールはLinuxでよく使われるツールだそうです。 時間があればufwよりもiptablesを使用することをおすすめします。

参考 iptablesを使ったファイアーウォール設定

まずはufwのインストールをします。

$ sudo apt-get install ufw

この段階のファイアウォールの状態は無効になっているはずです。以下のコマンドで確認してみます。

$ sudo ufw status

実行後、Status: inactiveと結果が返ってくるはずです。これは無効の状態です。有効にするには以下のコマンドを実行します。

$ sudo ufw enable

無効にするには以下のコマンドを実行します。

$ sudo ufw disable

次にファイアウォールの最後の設定をします。 Webカメラで8080番ポートを使用するものとして、以下の設定を行います。4行コマンドラインがありますが上から順に、

  1. 外部からの接続は基本的に受け付けない
  2. ローカルアドレスからのssh接続(22番ポート)は受け付ける
  3. 8080番ポートは受け付ける
  4. 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アドレス確認サイトCMAN

確認後、グローバルIPアドレス:8080でアクセスするとラズパイにつながり、Webカメラの映像を見ることができます。

この記事の内容だけだとセキュリティに心配なので、https://qiita.com/nisyuu/items/333bf5bd0b8c4e71a26b も参考にしてみてください。

参考文献

ネットワーク入門サイト 【グローバルIPアドレス】と【プライベート(ローカル)IPアドレス】の違いと、確認方法についてまとめてみた Raspberry Pi 3 Model Bでネットワーク ライブカメラを構築する方法 MJPG-streamer編 USBカメラで監視カメラ