当サイト限定「Raspberry Pi 3B+ のセット品」割引クーポン配布中!この機会に是非!こちらから

DuckDnsでopenmediavaultをSSL化してみた

インストールと設定
この記事は約9分で読めます。
スポンサーリンク

先日、ブログのコメント欄にてopenmediavault(omv)のssl化のご意見いただきました。ありがとうございます。個人的にはあまり利点を感じなかったのですが、調べてみると意外と情報が少なかったのでトライしてみました。

結論から言うと、できたものの、かなりハマったので参考にしてください。

omvをインストールして稼働している前提です。

sslではなくダイナミックDNSで公開

ダイナミックDNSと呼ばれるサービスの中で、コメント欄にもあったようにduckdnsを利用しました。

このサービスは通常は有料である固定IPアドレスの代わりに、動的なIPアドレスが変更しても同じドメインで運用できるようにしてくれるサービスです。有料もありますが、duckdnsは無料です。

 

ssl化に対応する前に、omvをduckdnsで外に公開してみます。

duckdnsで取得したアドレスでomvへアクセスできるかということです。

 

手順としてはほぼこの動画の手順通りです。非常に分かり易いです。

How to Install OpenMediaVault Extras, ShellinaBox and Docker

ここではomvのプラグインとしてDockerとShellboxをインストールするとありますが、Shellboxはインストールしなくて良いです。何故なら日本語環境では文字が2重に打ち込まれてしまい、全く意味を成しません。

多重文字

修正も何も面倒なので、Macからrootでssh接続して対応しました。

Dockerがインストールできたら同じ作者の動画で、これまたほぼそのまま参考にします。

Free dynamic DNS for Your Home Server with DuckDNS and Openmediavault

動画を何回も見直して行えば間違いないと思います。

下図のように設定します。(一部伏せています)

環境変数

PUID、PGIDは設定するユーザーから。私の場合は1001と100でした。

TZはタイムゾーンです。大文字小文字などよく分かりませんけど、取りあえずJAPAN/Tokyoとしました。

duckdns-top

SUBDOMAINSは、duckdnsで取得した任意の文字列です。(○○.duckdns.orgの○○部分

TOKENは、DuckDNSのトップページにログインすれば出ています。

 

この段階まではomv側のプラグインで大丈夫です。Dockerで入れたDuckdnsのプラグインで登録したドメインの「○○○.duckdns.org」で外部から接続可能です。

Wi-Fi内だと異なりますので、iPhoneなりスマホの4G接続でアクセスしてみてください。omvの管理画面へのログイン画面が出てくればOKです。

SSL化

いよいよ、ssl化です。これは別の動画で非常に分かり易いのがあり、一部変更すればそのまま使えそうだったので参考にしました。

How to setup DuckDNS domain name and Lets Encrypt SSL certificate for Home Assistant

これはopenmediavaultではないので、読み替える必要はあるものの、90%はそのままです。何度も観ました!他のサイトの情報も参考にし、自分の環境に読み替える必要があるため、そのままその通りではダメです。

やり直しもできます。ただ、何度も予習した方が良いでしょう。

ハマりポイント!

実はかなりハマったのが、動画の3:40付近から始まる実際の作業の最初であるサービスの停止です。この動画では、ホームアシスタントというサービスを稼働させていますので、それを停止しているのですけど、これはTCPポート80番を使用しているから止めています。

認証を取得する際にTCP80番ポートがバッティングする(バインドする)ため正常に実行できないからです。

実は、同じようにエラーが出ました。

しかし、TCP80番ポートは何も使っていないかと思っていたら、openmediavaltでは標準でサーバーであるnginxが動いていて、それがTCPポート80番を使っています。

nginx-stop

どのプロセスが使用しているか調べるコマンドはこちら。(TCPポート80番)

lsof -i:80

接続待ちをしている(LISTEN)TCP、UDPポートを表示するにはこちら

ss -antu
netstat -antu

既に通信が確立しているtcpポートの状況を調べるにはこちら

ss -t
netstat -t

参考:https://qiita.com/sonoshou/items/cc2b740147ba1b8da1f3

 

調べると確かにnginxが表示されますね。

そうか、と思ってnginxを停止するコマンドを打ちます。

systemctl stop nginx

そして再び認証を取得する長いコマンドを実行しても、またバインドエラー・・・。ん?

もしやと思ってステータスを確認すると・・・。

systemctl status nginx

停止していないでactiveのままじゃーないですか?!

 

どうやらアプリとしてサービスとしてデーモンとして、masterプロセスとworkerプロセスと止め方にも色々あるそうな。

ちょっと色んな停止を試してみた。結果としては止まったものの、最終的にどれが有効か分からない・・・。

systemctl stop nginx.service (サービスの停止)

nginx -s stop (デーモンの停止)

/etc/init.d/nginx stop (フルパスで)

nginxについてこちらのサイトがオススメです。とても詳しく載っていました。

「nginx実践ガイド」のコマンドのメモ - Qiita
(

 

何度かstatusを確認して止まっていることを確認してから、認証を取得するコマンドを打ったらイケました!

verifi-ok

成功すると、/etc/letsencrypt/の中に、以下のファイル群が出来上がっています。

accounts  archive  csr keys  live  renewal  renewal-hooks

そして、その中のliveの中に、○○.duckdns.orgがあり、更にその中に以下のファイル群が出来ています。

cert.pem chain.pem fullchain.pem privkey.pem README

これらpemが認証ファイルになります。

 

最後にスタートさせます。

systemctl start nginx

NginxでのSSLの設定方法

ここでサーバーとして稼働しているNginxにsslの設定をしないとなりません。他にApacheなど他のサーバーで動かすならその設定ファイルになります。openmediavaultではNginxがサーバーなので、そこに認証ファイル(.pemなど)の場所を指定します。

nginx.confにsslの設定を追記する。

sudo nano /etc/nginx/nginx.conf
##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
server {
    listen 443;
    ssl on;
    server_name ○○.duckdns.org;
    ssl_certificate /etc/letsencrypt/live/○○.duckdns.org/fullchain.pem; # サーバー証明書のパス
    ssl_certificate_key /etc/letsencrypt/live/○○.duckdns.org/privkey.pem; # 秘密鍵のパス

    location / {
    }
}

※いつものごとく、スペースは適時合わせてください。

○○.duckdns.orgは自分の環境に合わせてください。

エラーがないか確認

記述した内容が間違っている場合はエラー行が表示されますので、以下コマンドでテストします。

nginx -t

エラーが無ければ以下でリロードして設定を読み込み直しします。

systemctl reload nginx

 

こちらに詳しく載っていました。感謝です。

NginxでSSLを設定する方法を基本から学ぶ - Qiita
NginxでSSLを設定したときのまとめ。 なお、SSLとTLSの違いなどは本記事では除く。 ## SSL通信は共通鍵と公開鍵を組み合わせて開始される SSLは外部に通信内容が漏れないよう暗号化して通信するためのプロトコルで、基本は...
Let's Encrypt で Nginx にSSLを設定する - Qiita
Let's Encrypt で取得したサーバ証明書を Nginxに設定するための手順。 確認した環境は次の通り。 - OS: CentOS 7.2 - Nginx 1.11 ## Let's Encrypt 導入の事前準備 証...
[メモ] (NAS設定) OpenMediaVault 3 (らずぱい/Armbian on BananaPro) - Qiita
## 概要 - Banana ProにOpenMediaVault 3.0.x をインストールして、NASにする。(Samba使用)2016年11月29日時点で、v3.0.54 - SDカード(というか、フラッシュメモリ)は

sslで接続OK

これでsslで接続が可能になりました。

iPhoneなり外部から「https://○○.duckdns.org」でアクセスすると、鍵マークが付きます。

ssl-ok-iphone

あと、Lets Encrypt証明書は有効期限が90日しかないので、crontabに記述します。

crontab -e

以下を追記する。(毎月1日の4:00に更新)

0 4 1 * * root /bin/systemctl stop nginx && /usr/local/src/certbot/certbot-auto renew --force-renewal && /bin/systemctl start nginx

参考:https://sys-guard.com/post-14859/

最後に

sslで接続したのはnginxのhtmlです。あとは、openmediavaultで共有しているファイルに対してsslで接続するには別の設定が必要です。

どれが一番簡単で分かり易いのかちょっと検討しています。

それでもあまり利点がないなーと思ったのは、一時的ならDropboxでもGoogleドキュメントでも代替のサービスがあります。遠隔の操作ならVPNを張るソフトが楽です。

一頃と違って安価で利用できるサービスが面倒もないのでオススメします。

しかし、Raspberry Pi でもここまでできるので、面白い使い方があったらできるように知っておくのはアリですね。

ただ、他の人のようにSynology社のNASを購入した方が何かと簡単で便利かも知れない・・・。

2ベイ(HDD2台)でも安くなったからなー。

HDDだって4TBが軽く1万円切っているし・・・。

こういった構築が難しいなーと思ったら、既製品の方がとっても幸せになります。次のセールで買おうかなと本末転倒に思ってます。

Raspberry Pi はもっとエンタメ系の方が楽しいですね!

コメント

  1. たいへん参考になりました。ありがとうございます。