
Synology NAS SSL acme.sh Let's Encrypt リバースプロキシ ホームサーバー HTTPS
🔒 ブラウザの「保護されていない通信」警告、一緒に解消しましょう
ホームサーバーを運用していると、一度は目にするあの赤い警告 —「保護されていない通信(Not Secure)」。Wiki、プロジェクト管理ツール、コードサーバーなどのセルフホスティングサービスに外部からアクセスするたびに、ブラウザが表示するこの警告は本当に気になりますよね。見た目だけの問題ではなく、HTTP通信は平文で送信されるため、パスワードやセッションCookieがそのまま漏洩する可能性があり、セキュリティ上も危険です。
今回は、Synology NAS SSL証明書をacme.shとLet’s Encryptで無料発行し、リバースプロキシまで設定してホームサーバー全体にHTTPSを適用する方法をステップバイステップでまとめます。90日ごとに自動更新されるので、一度設定すればほとんど手間がかかりません!
🏗️ 全体アーキテクチャ — NASがゲートウェイです
まずは全体像を見てみましょう。コアコンセプトはシンプルです — Synology NASをHTTPSゲートウェイ(単一エントリーポイント)として使用します。
HTTPS暗号化・復号化をNASで処理し、内部LANでは平文HTTPで通信する方式です。バックエンドサーバーに個別の証明書をインストールする必要はありません。
| 構成要素 | 役割 | 例 |
|---|---|---|
| パブリックIP:443 | 外部HTTPSエントリーポイント | ルーター → NASにフォワード |
| Synology NAS | nginxリバースプロキシ + SSLターミネーション | 192.168.1.100 |
| バックエンドサーバーA | Wiki、PMツールなど | 192.168.1.10:8080, :9090 |
| バックエンドサーバーB | コードサーバーなど | 192.168.1.20:5555 |
外部からwiki.example.comにアクセスすると、ルーターがNASに転送し、nginxがHostヘッダーを見て適切なバックエンドサーバーにルーティングします。SSL証明書はNAS一箇所で管理するだけです。

📋 前提条件
- ドメイン — Namecheap、Cloudflare、GoDaddyなどで年間約$10で購入可能です
- Synology NAS — DSM 7.x以上
- ルーター — ポートフォワーディング対応
- ホームサーバー — 公開したいサービスが1つ以上
- 固定パブリックIPまたはDDNSサービス
🛠️ Step 1 — ドメイン & DNS設定
ドメインを購入した後、DNSレコードを設定します。すべてのサブドメインが同じパブリックIPを指すようにします。
| Hostname | Type | Value |
|---|---|---|
| example.com | A | YOUR_PUBLIC_IP |
| wiki.example.com | A | YOUR_PUBLIC_IP |
| pm.example.com | A | YOUR_PUBLIC_IP |
| code.example.com | A | YOUR_PUBLIC_IP |
すべて同じIPを指しているのが正しいです。NASリバースプロキシがHostヘッダーで振り分けるからです。
🔀 Step 2 — ルーターポートフォワーディング
ルーターで外部ポートをNASに転送するルールを作成します。
| 外部ポート | 内部宛先 | 用途 |
|---|---|---|
| 443 | NAS_IP:443 | HTTPS(リバースプロキシ) |
| 80 | NAS_IP:80 | HTTP(Let’s Encrypt検証用) |
| 2222 | NAS_IP:22 | SSHアクセス |
一部のISPは家庭用回線でポート80をブロックしています。その場合、webroot方式の代わりにDNS-01チャレンジを使用する必要があります。Cloudflare DNS APIなどを活用すれば、ポート80なしでも証明書を発行できます。
📦 Step 3 — acme.shインストール
NASにSSHで接続してacme.shをインストールします。
# NASにSSH接続
ssh -p 2222 admin@your-nas-ip
# acme.shインストール
wget -O - https://get.acme.sh | sh
# Let's Encryptアカウント登録
~/.acme.sh/acme.sh \
--register-account \
-m your-email@example.com
インストールが完了すると、~/.acme.sh/ディレクトリに実行ファイルと設定が作成されます。
📜 Step 4 — SSL証明書発行(マルチドメイン)
1枚の証明書で複数のサブドメインをカバーできます。-dフラグを複数指定してSAN(Subject Alternative Name)証明書を発行します。
sudo ~/.acme.sh/acme.sh \
--issue \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
-w /var/lib/letsencrypt \
--keylength ec-256
--keylength ec-256オプションはRSAの代わりにECC(楕円曲線)証明書を発行します。鍵サイズが小さく、TLSハンドシェイクが速く、セキュリティ強度もRSA-2048以上です。2024年以降のトレンドは確実にECCです。
🚀 Step 5 — Synology DSMに証明書をデプロイ
acme.shにはSynology専用のデプロイフック(synology_dsm)が組み込まれています。発行された証明書をDSM証明書マネージャーに自動インポートしてくれます。
sudo SYNO_Username=admin \
SYNO_Password="your-password" \
SYNO_Scheme=http \
SYNO_Hostname=localhost \
SYNO_Port=5000 \
SYNO_Certificate="my-ssl-cert" \
~/.acme.sh/acme.sh \
--deploy \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
--deploy-hook synology_dsm
上記コマンドではパスワードが平文で公開されます。本番環境では環境変数ファイルに分離するか、DSM 2FAが有効な場合はアプリ固有のパスワードを使用してください。
デプロイが成功したら、DSM → コントロールパネル → セキュリティ → 証明書で新しい証明書を確認できます。

🔄 Step 6 — DSMリバースプロキシ設定
DSM → コントロールパネル → ログインポータル → 詳細 → リバースプロキシでサービスごとのルールを作成します。
| ルール名 | ソース(HTTPS) | 宛先(HTTP) |
|---|---|---|
| wiki | wiki.example.com:443 | 192.168.1.10:8080 |
| pm | pm.example.com:443 | 192.168.1.10:9090 |
| code | code.example.com:443 | 192.168.1.20:5555 |
ルールを作成した後、コントロールパネル → セキュリティ → 証明書 → 設定で、各リバースプロキシルールにデプロイしたSSL証明書を割り当てます。
🔃 Step 7 — nginxリロード
設定を変更した後は、nginxをリロードして反映させる必要があります。
# nginx設定を再生成
sudo /usr/syno/bin/synow3tool \
--gen-all
# nginxリロード(ゼロダウンタイム)
sudo nginx -s reload
# 設定の有効性を検証
sudo nginx -t
nginx -tでsyntax is okが表示されれば成功です。ブラウザでhttps://wiki.example.comにアクセスすると、緑の南京錠が表示されるはずです!
⏰ Step 8 — 自動更新設定
Let’s Encrypt証明書の有効期間は90日ですが、acme.shが60日ごとに自動更新するcronジョブをインストールします。設定を確認してみましょう。
# cronジョブを確認
crontab -l | grep acme
手動で更新+デプロイが必要な場合は、以下のように実行します。
# 証明書を更新
sudo ~/.acme.sh/acme.sh --renew \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com
# DSMに再デプロイ
sudo SYNO_Username=admin \
SYNO_Password="your-password" \
SYNO_Scheme=http \
SYNO_Hostname=localhost \
SYNO_Port=5000 \
SYNO_Certificate="my-ssl-cert" \
~/.acme.sh/acme.sh \
--deploy \
-d wiki.example.com \
-d pm.example.com \
-d code.example.com \
--deploy-hook synology_dsm
# nginxリロード
sudo /usr/syno/bin/synow3tool \
--gen-all && sudo nginx -s reload
ただし、通常はcronジョブが自動的に処理してくれるので、手動で実行する必要はほとんどありません。
🔧 トラブルシューティング — よくある問題
| 問題 | 原因 | 解決方法 |
|---|---|---|
| ポート80ブロック | ISPポリシー | DNS-01チャレンジを使用(Cloudflare APIなど) |
| 更新後に証明書が未適用 | nginxリロード漏れ | synow3tool --gen-all + nginx -s reload |
| ブラウザに古い証明書 | キャッシュ | ブラウザキャッシュをクリア、またはDSM証明書割り当てを確認 |
| Let’s Encryptレート制限 | 週5枚の重複証明書 | テスト時は--stagingサーバーを使用 |
| 新しいサブドメインの追加 | — | DNS Aレコード追加 → -dフラグ追加して再発行 → デプロイ → RPルール追加 |
🛡️ セキュリティベストプラクティス
- DSMをインターネットに直接公開しないでください — 必ずリバースプロキシまたはVPNを経由してください
- SSH鍵認証を使用してください — パスワードログインよりはるかに安全です
- DSMを定期的に更新してください — Synologyはセキュリティパッチを頻繁にリリースしています
- 2FAを有効化してください — DSM管理者アカウントには必須です
- ファイアウォールルール — 80(ACME)、443(HTTPS)、SSHポートのみ開放してください
- ECC証明書(ec-256)を使用 — パフォーマンスとセキュリティの両方に優れています

📚 参考資料
- acme.sh公式GitHub — インストールと使用方法の完全ドキュメント
- acme.sh Synology NASガイド — synology_dsmデプロイフックの詳細
- Let’s Encrypt公式ドキュメント — 証明書ポリシー、レート制限、FAQ
- Synology DSM証明書管理 — DSM 7.x公式ヘルプ
- BookStack Wikiセルフホスティングガイド — 同じインフラにWikiを構築する方法(関連記事)
✅ まとめ
まとめると、Synology NAS SSL設定のポイントは3つだけです — acme.shで証明書を発行、synology_dsmフックでデプロイ、リバースプロキシでサービスをルーティング。この3つを理解すれば、サブドメインがいくつあっても同じパターンで拡張できます。
一度設定してしまえば、60日ごとにacme.shが自動で更新と再デプロイを行ってくれるので、まさに「設定して忘れる(set-and-forget)」システムです。自分のホームサーバーに緑の南京錠が表示される瞬間の達成感を、ぜひ体験してみてください!