【学習メモ】さくらのレンタルサーバーでLet's Encrypt + 外部のNSを使ってみる

## 前置き
DNSについて理解が浅いので誤りがあればコメントで指摘していただけると助かります。

## やって分かったこと
1. 独自ドメインのレンタルサーバーへの登録時は、(一時的に)ネームサーバー(以下NS)をさくら(以下sakura)にする必要がある。
1. 独自ドメインのLet's Encryptをコントロールパネルから申し込むときは、申し込み初回のみ独自ドメインのNSがsakuraのNSになっている必要がある。もしくはsakuraのDNSで独自ドメインのNSを引いたとき、sakuraのNSになっている必要がある。
1. さくらのレンタルサーバーに独自ドメインを登録するとさくらNSにゾーンが追加されるが、ゾーン情報は(おそらく)さくらのレンタルサーバーから独自ドメインを削除するまで消すことができない。
1. 前項から古い情報がNSに残るので、TXTやMXレコードを変えて運用すると問題が起きるかもしれない。

## 残った謎
1. 独自ドメインのLet's Encrypt申し込みのチェックは、何を基準にしているのか。
1. 独自ドメインのNSをsakuraから別のNSに変更をしても、sakuraのNSからは古い情報が発信し続けられるが良いのか。

## きっかけ
さくらのレンタルサーバーで、Let’s Encryptの証明書を使うことができます。
これまで安価なSSL証明書を買っていましたが、自動更新もついていて便利そうなので、ドメイン追加のタイミングで使ってみることにしました。

他社で登録した独自ドメインをさくらのレンタルサーバーに登録しようとすると、NSをsakuraのns1.dns.ne.jpに変えるよう指示が出ます。(サーバーコントロールパネルのドメイン/SSL設定から新しいドメインの追加)

加えて、Let's Encryptの無料証明書を申し込もうとする時も、NSがsakuraのns1.dns.ne.jpになっているか確認されているようです。(sakuraのNSにしていないと申し込みのボタンが表示されなかったのは、1回しか見ていません。)

しかし、[【無料SSL】サーバコントロールパネルからの導入手順(help.sakura.ad.jp)](https://help.sakura.ad.jp/hc/ja/articles/115000136822--%E7%84%A1%E6%96%99SSL-%E3%82%B5%E3%83%BC%E3%83%90%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%91%E3%83%8D%E3%83%AB%E3%81%8B%E3%82%89%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86)によれば、Let'sEncryptを利用する条件として、NSをsakuraにするとは表記されていません。「**Aレコードの値**がさくらのレンタルサーバーに向いている必要があります」とあり、NSレコードの値については言及されていません。


もしNSを恒久的にns1.dns.ne.jpにする必要があれば、ゾーン情報が変更できない不便さがあります。
[ネームサーバ利用申請(help.sakura.ad.jp)](https://help.sakura.ad.jp/hc/ja/articles/206207381)にも、さくらのレンタルサーバーは対象になっておらず、独自のドメイン追加の注意書きにも「他社で取得されたドメインに関しまして、基本的な設定（@/www/mail/ftp の4レコード）のみ登録します。 お客様でゾーン情報のカスタマイズは許可しておりません。」とあり、ユーザーが編集することはできないようです。
[他社で管理しているドメインのゾーン情報を編集する(help.sakura.ad.jp)](https://help.sakura.ad.jp/hc/ja/articles/206053042-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%BE%E3%83%BC%E3%83%B3%E7%B7%A8%E9%9B%86)でも、さくらのレンタルサーバーに登録した他社取得の独自ドメインは、ゾーン情報の編集ができないとあります。

NSをsakuraのままにしなさい、という表記は使っていて見当たらなかったので、必要と言われたときに一時的に変更すれば良い気もします。

でもゾーンが削除されないので、sakuraのNSにDNSを問い合わせると登録されていないはずのMXが引けてしまいます。

## 試したこと
ということで、onamae.comで取得したドメインを、さくらのレンタルサーバー(スタンダード)+Let's Encryptで使ってみました。

NSを一時的にsakuraにして独自ドメインを追加したのち、onamaeのNSに戻してSSL証明書が新規で取得できるか確認します。

ここでは独自ドメインをmy.domainとします。
onamaeのAレコードには、さくらのレンタルサーバーのIPが設定されているとします。

### パターン-1
まず初めはこの流れでした。

```bash:パターン-1の手順
NSをさくらにする
↓
さくらのパネルからドメインを追加する
↓
NSをonamaeのNSにする
↓
さくらのパネルからLet's Encryptを申し込もうとするが申し込めない
↓
NSをさくらのNSにする
↓
さくらのパネルからLet's Encryptを申し込む
↓
NSをonamaeのNSにする
```
NSがsakuraでないと、sakuraのコントロールパネルからLet's Encryptを申し込もうとしたとき、ボタンが出てきませんでした。

### パターン0
コントロールパネルの指示通りの手順で導入後、NSを変更しました。
証明書取得後のNS変更なので問題ないようです。

```bash:パターン0の手順
NSをさくらにする
↓
さくらのパネルからドメインを追加する
↓
さくらのパネルからLet's Encryptを申し込む
↓
NSをonamaeのNSにする
```

### パターン1
グローバル的にはonamaeがNS、
sakuraのNS上は、sakuraのNSになっている状態です。
こちらもLet's Encryptの申し込み・証明書取得は正常に完了しました。

```bash:パターン1の手順
NSをさくらにする
↓
さくらのコントロールパネルからドメインを追加する
↓
NSをonamaeのNSにする
↓
さくらのパネルからLet's Encryptを申し込む
```

このとき、DIGの結果は以下のようになります。

```bash:さくらで引いた結果
dig my.domain ns @ns1.dns.ne.jp
;; ANSWER SECTION:
my.domain.   3600    IN      NS      ns1.dns.ne.jp.
my.domain.   3600    IN      NS      ns2.dns.ne.jp.
```

```bash:onamaeで引いた結果
dig my.domain ns @01.dnsv.jp
;; ANSWER SECTION:
my.domain.   86400   IN      NS      01.dnsv.jp.
my.domain.   86400   IN      NS      02.dnsv.jp.
my.domain.   86400   IN      NS      03.dnsv.jp.
my.domain.   86400   IN      NS      04.dnsv.jp.
```

パターン-1と似ています。
パターン-1ではLet's Encryptの申し込み時にNSのチェックがありましたが、2回目以降はグローバル的にはonamaeがNSでも問題なく申し込みのボタンが表示されます。

Let's Encryptを申し込む初回のみNSレコードを検証している(成功のフラグが残り続ける)、もしくはLet's Encryptを申し込むときはさくらのNSレコードを参照している2つの可能性が考えられます。

### パターン2
パターン1に似ていますが、sakuraのNSでもonamaeがNSと出る場合。

検証しようとしましたが、TTLの3600秒を過ぎても(18時間位過ぎても)、ns1.dns.ne.jp上のNSレコードが更新されません。
my.domainのゾーン削除が必要になるので挙動としては正しいと思われます。

正しいDNSが引けないという意味では異常状態だと思うので、何かのタイミングでゾーン削除は行われると思いますが、現時点では不明です。もしかしたらさくらのコンパネから独自ドメインを削除するときに、ゾーンの削除が行われるのかもしれません。

### パターン3
取得後の自動更新ができるかどうか。

取得の際、さくらがDNS-01方式か、HTTP-01方式のどちらを取っているかによります。
DNS-01方式であれば、さくらでTXTレコードを編集する必要があるので更新できないでしょう。
申請中、sakuraのNSでTXTレコードを引いてもTXTレコードが更新されたようには見えませんでしたので、DNS-01方式はとっていないようです。

HTTP-01方式かと思いましたが、```/.well-known/```ディレクトリが作られたようには見えませんでした。.htaccessやエイリアスでうまくやってるんでしょうか。

自動更新の結果は3か月後に分かります。