Synology NAS 無料独自ドメインをワイルドカードで運用する
個人ブログであっても常時SSL(https)サイトは当たり前になってきていて
たとえ自分一人しか使っていないNASであってもSSL対応にしておかないと
ブラウザに容赦なく「このサイトへの接続は保護されていません」と表示されてしまいます。
これは時代の流れなので逆らうことなく乗ることにしましょう。
Synology NASでは標準でSSL証明書の無料取得に対応していて、しかも簡単にできます。
購入を検討している場合はこちらからどうぞ。
SynologyのDSM(OSのようなもの)が正式にワイルドカードSSL証明書発行に対応していないので、
まだxxx.synology.me、yyy.myds.meなどのSynologyのDDNSではワイルドカードの証明書は入手はできないようです。
サブドメイン(xyz.xxx.synology.meなど)を含めた証明書は作れますが、発行の際に個別にエイリアス(別名)を設定する必要があるのでサブドメインはそこで指定したものでしかSSL証明書は使えませんでした。(多くても10個くらいまで)
2018年1月からLet’s Encryptの仕様変更(ACMEv2)によりワイルドカードのSSL証明書を手に入れることができるようになりました。無料ですが3ヶ月ごとに更新が必要です。
このことによって
でしかSSLが適用されなかったものが
- https://xxx.mydomain.com
- https://xyzxyz.mydomain.com
- https://f84a0wg34k.mydomain.com
といった、サブドメインに関しても保護された認証としてSSL接続することができます。
余談ながら、Synology社が出している無線LANルータRT2600acでWebVPNという独自のVPNがあるのですが、ワイルドカードSSL証明書があるとだいぶ便利になります。
どうせワイルドカードになるならドメイン名は短いほうがよいので 新たにドメインを取得し、NASでの運用に使用します。
この記事はDSMの更新でLet’s EncryptのACMEv2、つまりワイルドカードSSL発行に 対応するまでの一時しのぎです。
取得方法はいくつかありますが、本記事では以下のようにします。
- Freenomで独自ドメイン取得
- CloudFlare登録、管理
- Synology NAS SSHでスクリプトを実行、SSL証明書取得
freenom登録
まずは、好きなドメインを取得します。
以下の5種類のドメインから選べます。 メジャーなドメイン(TLD)ではないですが、小規模で使うなら何の問題ないと思います。
.tk
.ml
.ga
.cf
.gq
取得したドメインは、12ヶ月無料です。
更新15日前までに更新すれば使い続けることができます。
ただ、二年目以降は有料なので、新しくドメイン取得してもいいと思います。
こちらからfreenomにアクセス
http://www.freenom.com/en/index.html
右上のEnglishをクリックして日本語表示を選択することもできます。
検索欄に、ほしいドメイン名(ドット以下は不要)を入力して 右の青い丸を押すと 現在入手可能なドメインが表示されます。
ドメイン名にもよりますが、4文字から無料みたいですね。 1文字だと2500ドルです。
そのドメインでよければ右の青いラベルで選択して購入画面に進みます。
ドメインの設定はあとにして、 右の「Period」で「12months@Free」を選択。
購入画面になりますが、「$0.00USD」なので無料です。
左下の欄に自分のメールアドレスを入力して認証します。
届いたメールのURLをクリックして認証完了です。(24時間以内)
プロフィール情報を入力する画面になるので適当に入力します。
Company Name以外は入力が必要のようです。
これで登録が完了しました。
あとは、設定したメールアドレスとパスワードでログイン
「MyDomains」を選んで管理画面へ 自分のドメインを確認します。
次は、このドメインをCloudflareに登録してDNSレコードの設定をします。
Cloudflareに登録
ネームサーバーをFreenomのままにする場合は
この行程は飛ばしてもOKです。DNSレコードはCloudflareと同じように設定してください。
正直NASでCloudflare (CDN)を使用するメリットは少ないですが
- 攻撃的なトラフィックを除去
- キャッシュによるアクセスの高速化
などの効果が期待できます。
Cloudflareは下記から登録します。
https://dash.cloudflare.com/sign-up
メールアドレスと任意のパスワードを設定。
先程取得したドメイン名を入力します。確認に少し時間がかかります。
一番左の「FREE」を選択。
DNSレコードの取得に失敗しますが、気にせず一番下の「Continue」を押します。
ユーザーによってネームサーバーは違うので表示された通りに、
Freenomのネームサーバーの設定を Cloudflareに向けるよう設定します。
この場合だと、
ns01.freenom.com → mia.ns.cloudflare.com
ns02.freenom.com → tom.ns.cloudflare.com
にします。
ネームサーバーをCloudflareに向ける
一度Freenomの管理ページへ戻ります。
「MyDomains」からドメインを選んで「Manage Dmain」を選択
「Management Tools」、「Nameservers」を選びます。
「Use custom nameservers」を選択して先程のCloudflareのネームサーバーを入力
「Change Nameservers」で登録完了です。
またCloudflareに戻り、ネームサーバーの再チェックを行います。
「Recheck Nameservers」を選択。
適切にネームサーバーが設定されていると、ステータスがActiveに変わります。
あとは上のメニューから「DNS」を選択してDNSレコードを設定していきます。
画像のように3つ設定しておけばOKです。
Aレコードの「IPv4 address」には自分のNASのIPアドレスを入力します。
一番上のワイルドカード( *の部分)を設定するときに、
オレンジの雲(CDSがオン)が有効になっていると登録に失敗するようなので注意します。
これでDNSの設定は完了です。
数時間〜1日経つと、DNSレコードが世界中のサーバに浸透していきます。
私の場合、アクセスできるまで3時間ほどかかりました。
スマホなど(外部アクセス)から 取得したドメインにアクセスしてみて、表示されればOKです。(WebStationのインストールが必要)
1日経ってもアクセスできない場合はポート開放がされているかもう一度ルータの設定を確認しましょう。
NASでLet’s encrypt実行
HOW TO GUIDE TO GET LETS ENCRYPT WILDCARD CERTIFICATE
を参考にしています。
NASのDSMを開いて「コントロールパネル「」、「端末とSNMP」「ターミナル」で
SSHサービスを有効化しておきます。
ターミナルなどでSSHログイン
sudo ssh -p 22 [email protected]
sudo -i
管理者パスワードを入力でrootに
rootのホームディレクトリで作業するので移動
cd /root
Let’s Encrypt の証明書取得のためのスクリプトをダウンロードと実行権限の付与
wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
chmod a+x acme.sh
以下でスクリプトをマニュアルモードで実行します。
sampledomain.tk を自分のドメイン名に変えてください。
issue 証明書発行コマンド
./acme.sh --force --issue -d *.sampledomain.tk -d sampledomain.tk --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
SSL証明書の取得に失敗しますが問題ありません。
「TXTレコードをDNSレコードに追加してください」 という表示がされますのでメモします。2つありますので、それぞれ必要です。
二重引用符などは不要なので文字列だけです。以下は例
_acme-challenge.sampledomain.tk
nwOVAvrTTB4Kv4mWacYW7j3iKKy007bw5LAVw4kfyKM
_acme-challenge.sampledomain.tk
cfq1EYtHQIh_pAh2ZPhwc9EDMf6ZrxFx11APVnSSA40
これをコピーして、CloudflareのDNSレコードに登録していきます。
TXTレコード
NAMEに _acme-challenge.sampledomain.tk
(下の画像には表示はされていませんが入力されています)
Valueに 文字列を引用符なしで文字列をペースト
登録後(5分くらい)少し待って、SSHで以下のコマンドを入力。
./acme.sh --force --renew -d *.sampledomain.tk -d sampledomain.tk --yes-I-know-dns-manual-mode-enough-go-ahead-please
成功すると証明書が吐き出されます。
Your cert is in /root/.acme.sh/.sampledomain.tk/.sampledomain.tk.cer Your cert key is in /root/.acme.sh/.sampledomain.tk/.sampledomain.tk.key The intermediate CA cert is in /root/.acme.sh/.sampledomain.tk/ca.cer And the full chain certs is there: /root/.acme.sh/*.sampledomain.tk/fullchain.cer
/root/.acme.sh/ に保存されるので隠しフォルダに移動します。
cd /root/.acme.sh/*.sampledomain.tk
必要なのはこの3つのファイルです。
*.sampledomain.tk.key | = private.pem 秘密キー |
fullchain.cer | = cert.pem 証明書 |
ca.cer | = chain.pem 中間証明書 |
以上のように対応しているので3つファイルを適当なところにコピーして ダウンロードしましょう。
File Stationでアクセスできる場所にコピーするのが早いです。
ファイル名はもとのままでOKです。
cp *.sampledomain.tk.key ca.cer fullchain.cer /volume1/tmp (任意のディレクトリ)
File Stationを開いて、デスクトップにとりあえず証明書をダウンロードします。
DSMの「コントロールパネル」「セキュリティ」「証明書」を開いて
NASNASにダウンロードした証明書をインポートします。
ファイルを間違えていなければ、証明書が一覧に表示されます。
ワイルドカードの証明書は「*.sampledomain.com」となっているのですぐわかります。
証明書をデフォルトに設定して、「構成」からすべてのサービスをこの証明書に向けると設定が完了です。
これでワイルドカードのSSL証明書の導入ができました。 おつかれさまでした。
下の画像は./acme.shでSSL証明書取得したときの画像ですが、参考に載せます。
[memo title=”注意”]スクリプトのmanualモードを使っているので自動で更新はされません。[/memo]
メモ
WebsStation用仮想ホストごとのSSL証明書が保存されているディレクトリ
/usr/local/etc/certificate/WebStation
デフォルトに設定したSSL
/usr/syno/etc/certificate/system/default
その他SSL
/usr/syno/etc/certificate/_archive
自動でSSL更新、DDNS更新
先述のように自動でSSL証明書が更新されないのでCrontabを使います。
また、NASのIPアドレスが変更されると、アクセスできなくなってしまうので
自動でIPアドレスを更新する方法を次回の記事で紹介します。
自動更新の方法はこちら↓
コメント
コメント一覧 (3件)
この手順で作成した証明書ファイルがそのままRT2600acにも使えますか?
はい、証明書をRT2600acでインポートすれば使えると思います。3ヶ月ごとに更新しなければいけないのが手間ですが、私の環境では問題なく利用できています。
Synology NASでnginxのままwwwのあるなしを統一する方法が知りたいです。