raspberry pi “みまもりカメラ” にvpnサーバー機能を追加する。


今回は、現在”みまもりカメラ”として稼働中の Raspberry Pi にOpenVPNサーバー機能を追加する、ということをやります。

理由はPCのOpenVPNサーバーでは常時接続がきびしいということ、電気代等のコスパ的にもRaspiが良いと考えたためです。

カメラとVPNを同時に処理するので、当然パフォーマンスの低下は否めませんが、そういった状況を判断するためにもいわば「実験的な取り組み」でもあります。

しかし、最近ではあまり安価なラズパイが出回っていないようなので、vpnサーバーを別のラズパイにすることは難しいようです。

準備

以前にやったOpenVPNサーバーの構築手順を参考に作業を進めていきます。

OpenVPNによるVPN接続について(証明書編)

openvpnのインストール

まずは、raspiにopenvpnをインストールします。

一応 apt list コマンドで調べておきます。

~$ apt list openvpn

システムのsudo apt update 後にopenvpn をインストールします。

~$ sudo apt install openvpn

インストールが完了したらサンプル設定ファイル(server.conf)を規定の場所( /etc/openvpn/server )へコピーしておきます。

~$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

opensslによるserver証明書・鍵の作成

raspi vpnサーバは新しくserver証明書・鍵を作成する必要があります。

今回のserver証明書の内容は次のようになります。

C(countryName)、ST(stateOrProvinceName)、L(localityName)、O(organizationName) は ca.crt の内容に付随します。

CN(commonName:FQDN)のみ rc1.example.com にしました。

登録するホスト名 (FQDN: rc1.example.com) は 一応 /etc/hosts へ登録します。

~$ sudo vi /etc/hosts

他の固定IPアドレスと一緒に登録しておきます。

自分は証明書作成を管理者権限(root)で作業することを好まないので、openssl の設定ファイル(openssl.cnf)をユーザー(picamera)の作業ディレクトリ(~/openssl)へコピーしました。

~/openssl$ sudo cp /etc/ssl/openssl.cnf ./

権限をユーザー(picamera)へ移行します。

~/openssl$ sudo chown picamera:picamera openssl.cnf

設定ファイル(openssl.cnf)を編集します。

~/openssl$ vi openssl.cnf

次の項目を変更します。

[ req ]

req_extensions = v3_req      ← 有効化

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth   ← 追加

次のコマンドで鍵(rc1_server.key)とserver証明書要求(rc1_server.csr)を作成します。

~/openssl$ openssl genrsa -out rc1_server.key
~/openssl$ openssl req -new -key rc1_server.key -config openssl.cnf -out rc1_server.csr
~/openssl$ openssl req -in rc1_server.csr -text   ← 確認

証明書要求ファイルが作成されたら、内容を確認して、CAサーバーへ転送します。

systemctl で自動起動をするので鍵(rc1_server.key)は /etc/openvpn/server/ へ移動しておきます。

CA(認証局)で証明書の作成

こちらも以前にやったことですので、簡単に流します。

CA(認証局)サーバー (deb1.example.com) の作業ディレクトリは ~/openssl/CA/ になりますので、証明書要求ファイル(rc1_server.csr)はこちらへ移動します。

~/openssl/CA$ ls
certs  crl  newcerts  private  ca.crt  cacrl.pem  crlnumber  index.txt  openssl_CA.cnf rc1_server.csr  serial

caコマンドで証明書を作成します。

~/openssl/CA$ openssl ca -config openssl_CA.cnf -in rc1_server.csr -out rc1_server.crt

有効期限日など確認しておきます。

~/openssl/CA$ openssl x509 -in rc1_server.crt -text

問題がなければ scpなど使って raspberry pi へ証明書 (rc1_server.crt) をコピーします。

~/openssl/CA$ scp rc1_server.crt picamera@192.168.10.xxx:~/openssl/

その他の必要な証明書や鍵 (ca.crt, ta.keyなど) もコピーしておくと良いです。

OpenVPNサーバーの起動

OpenVPNサーバーの起動は systemctl 自動起動の前に openvpn コマンドで動作確認します。

OpenVPNサーバーを openvpn コマンドで起動

まずは、起動に必要なファイルをraspi のOpenVPNサーバー の場所 ( /etc/openvpn/server/ ) へコピーします。

今回は、スマホにダウンロードしたクライアントの設定ファイル(client.ovpn)をそのまま使いたいということもあり、現行のOpenVPNサーバー(ubn2.example.com)で使用中の証明書 (ca.crt)や鍵 (ta.key、dh2048.pem ) を使います。

picamera@raspi:/etc/openvpn/server$ ls
ca.crt  dh2048.pem  rc1_server.crt  server.conf  rc1_server.key  ta.key

server.conf 設定は、cert と key の名称変更と内部ネットワークルーティングを有効化しました。

/etc/openvpn/server$ sudo vi server.conf
ca ca.crt
cert rc1_server.crt  ← 名称変更
key rc1_server.key   ← 名称変更

push "route 192.168.10.0 255.255.255.0"  ← 有効化

これで openvpn サーバーを起動します。

/etc/openvpn/server$ sudo openvpn server.conf

待受状態を確認して、クライアントから接続してみます。

クライアント(スマホアプリ)から接続

スマホアプリは外部ネットワークからの接続になりますので、ファイアウォールやルーターの設定変更が必要になります。

今回はraspi os liteにファイアウォール(iptables)が入っていないということもあり、ルーターのポートマッピングを追加するだけになりました。

raspi vpn ipアドレスプロトコルポート
192.168.10.xxxudp1194
ポートマッピング設定内容

クライアント側の設定(client.ovpn)は変更がありませんので、そのままスマホアプリを起動します。

Wifi接続を解除したら(モバイル接続へ切替)、webブラウザへ”みまもりカメラ”の内部ネットアドレス(192.168.10.xxx:8080)を入れてみて映像を確認します。(特に遅延状況など確認します。)

raspi_openvpnサーバーの自動起動

openvpn コマンド起動で問題がなければ systemctl で自動起動します。

~$ sudo systemctl status openvpn-server@server.service  ← ステータス
~$ sudo systemctl start openvpn-server@server.service   ← 起動
~$ sudo systemctl enable openvpn-server@server.service  ← 自動起動有効

停止は

~$ sudo systemctl stop openvpn-server@server.service   ← 停止

自動起動無効はさほど

~$ sudo systemctl disable openvpn-server@server.service  ← 自動起動無効

ステータスを確認してエラーがなければクライアント(スマホアプリ)からモバイル接続して確認します。

まとめ

今回は、あっさりと終わってしまいましたが、日常的にかなり必要度が高い内容だと思っています。

というのも、ここまでできれば個人で手軽に “みまもりカメラ” を設置できるとさほどいうことですので、大変心強い味方になるのではないでしょうか。

しかし、今回使った raspiは、特にraspi os liteはファイアウォールが入っていないということもあり、セキュリティの面でやや不安があり、注意が必要です。

ファイアウォール(iptables)は機会があればやっていきたいと思っています。

また、カメラとVPNの処理が重なるので動作もかなり遅くなると予想されましたが、さほど気にならないので、このまま長時間稼働して様子をみようと思います。

何か不具合がありましたら追記していきますので、よろしくおねがいします。

ご質問・ご感想などありましたら、お気軽にコメント下さい。

【追記】

稼働3日後の状況:VPN接続後にwebブラウザでカメラを確認したところ、画面表示まで1分以上かかった。その後一度閉じて、再度開くと問題なく映像を見ることができた。

最初のVPN接続処理で遅延があるようでした。

その他、カメラの録画記録データに問題はなさそうでしたが、引き続き継続していきたいと思います。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)