Synology NASを社内専用Webサーバー化してHTTPS化するまでの記録

記事の周囲、または記事中に【広告】が含まれます。

~DDNSとLet's Encryptで証明書を自動更新し、WebアプリでAndroidのカメラが利用できる環境を構築~

はじめに

社内向けWebアプリを開発していた際、Androidスマホでカメラが起動しない問題に遭遇しました。

調査したところ、ブラウザのカメラ機能は、 HTTPS環境でしか利用できない ことが判明しました。

社内専用システムだからHTTPでも問題ないと思っていましたが、最近のブラウザではカメラやマイクなどの機能利用時にHTTPSが必須となっています。

とはいえ、インターネットのWebサーバーにアプリを置きたくないですし、オレオレ証明書の発行では警告が出る問題があります。

そこで今回は、Synology NASを購入し、Webサーバー化し、Let's Encryptで証明書を自動更新する、以下の環境を構築しました。

  • 社内専用システム
  • 外部公開なし
  • 正規SSL証明書利用
  • 証明書自動更新
  • Androidでカメラ利用可能

同じように社内向けカメラ機能付きWebアプリを開発している方の参考になれば幸いです。

システム構成

今回構築した構成は以下の通りです。

Androidスマホ(iPhoneでも問題ない)
    ↓
https://example.synology.me
    ↓
ルーター:RTX830(静的DNS)
    ↓
Synology NAS
    ↓
社内Webアプリ

ポイントは、インターネットへ公開することなく、社内LANだけでHTTPS環境を実現していることです。

Step1. Synology DDNSを取得する

まずは、Synologyが提供する無料DDNSを取得します。

※DDNS:IPアドレスを、常に一定の「ドメイン名(ホスト名)」と自動で結びつける仕組み。

DSMから以下を開きます。

※DMS:Synology社のNAS専用のウェブ管理システム。

コントロールパネル
外部アクセス
DDNS

サービスプロバイダに Synology を選択し、希望するホスト名を登録します。

例:example.synology.me

登録が完了すると、Synology DDNSが利用できるようになります。

※DDNS作成やLet's Encryptの利用には、Synologyアカウントが必要になるはずです。

Step2. Let's Encrypt証明書を取得する

続いて、先ほど作ったドメイン名に対するSSL証明書を取得します。

DSMから以下を選択します。

コントロールパネル
セキュリティ
証明書
追加

続いて Let's Encryptから証明書を取得 を選択します。

取得に成功すると、新しい証明書が追加されます。

※証明書の取得や更新時にルーターのポート80や443などを開放する必要はありません。

Step3. 証明書を既定値として割り当てる

ここで最初の落とし穴がありました。

私は最初、証明書を取得しただけで満足していたのですが、ブラウザでアクセスすると以下のように表示されてしまいました。

この接続ではプライバシーが保護されません

証明書を確認すると、以下になっており、Synology標準の自己署名証明書が利用されていました。

発行先:synology
発行元:Synology Inc. CA

解決方法

取得したLet's Encrypt証明書を選択し、 設定 を開きます。

各サービスに割り当てられている証明書を、 synology から 取得したドメインの証明書 へ変更します。

さらに、 既定値として設定 を有効にします。

これでNAS全体がLet's Encrypt証明書を利用するようになります。

Step4. ドメインでアクセスしてみる

ブラウザで https://example.synology.me へアクセスしてみました。

次は、こんな表示になりました。

このサイトにアクセスできません

Step5. 原因調査

まず名前解決を確認します。

Windowsのコマンドラインで以下を実行します。

nslookup example.synology.me

結果としてグローバルIPアドレス(社内のローカルIPではない)が返ってきました。

DDNSとしては正常ですが、今回は社内専用システムとして利用するため、社内からはNASのローカルIPへ接続しないといけません。

Step6. RTX830に静的DNSを設定する

そこで、ルーター:RTX830に静的DNSを設定しました。

dns static a example.synology.me 192.168.1.5

これは、以下のような社内専用の名前解決ルールを作る設定です。

example.synology.me
↓
192.168.1.xxx (NASの固定IP)

これにより、社内からドメインにアクセスした場合のみNASへ直接接続されます。

※インターネット(外部)からドメインにアクセスしても、外部サーバーからは接続先が分からないのでアクセス不可能となります。
※NASが固定IPになっていることが前提です。

Step7. 動作確認

再度確認します。

nslookup example.synology.me

結果が以下になれば成功です。

Address: 192.168.1.xxx (NASの固定IP)

ブラウザで以下にアクセスすると、鍵マーク付きで正常に表示されました。

https://example.synology.me

Androidのカメラが利用可能に

今回の最終目的だったカメラ機能も無事動作しました。

HTTPS化後はAndroid端末でも正常にカメラが起動し、ホーム画面へ追加したPWAからも問題なく利用できるようになりました。

この構成のメリット

  • 正規SSL証明書を利用できる
  • Let's Encryptで自動更新される
  • Androidでカメラ機能を利用できる
  • PWAの要件を満たせる
  • ポート開放が不要
  • 社内専用システムとして運用できる
  • Synology標準機能のみで構築できる

ハマったポイント

証明書を取得しただけでは利用されない

取得後に「設定」から各サービスへ割り当てる必要があります。

IPアドレスでは証明書エラーになる

例えば、以下では証明書名と一致しないため警告が表示されます。

https://192.168.1.5

社内からDDNS名でアクセスできない

RTX830へ静的DNSを設定することで解決しました。

dns static a example.synology.me 192.168.1.5

まとめ

今回構築した環境は、以下の構成です。

Android
↓
HTTPS
↓
RTX830静的DNS
↓
Synology NAS
↓
社内Webアプリ

「Androidでカメラを使いたい」「社内だけでHTTPS環境を作りたい」「証明書の更新を自動化したい」という場合には、Synology NASは非常に便利だと感じました。

同じ課題で悩んでいる方の参考になれば幸いです。

コメントを残す

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

CAPTCHA