Cloudflare を Secondary DNS として使う

# Secondary DNS が利用可能なプラン

Enterprise Plan で利用できます。

> [Configuring Secondary DNS – Cloudflare Help Center](https://support.cloudflare.com/hc/en-us/articles/360001356152#access-control-list-configuration)
>
> Secondary DNS is available for domains on Enterprise plans.

# Secondary DNS 用語整理

> [Secondary DNS - Deep Dive](https://blog.cloudflare.com/secondary-dns-deep-dive/)

![image-20220113235945697](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220113235945697.png)

- Authoritative Zone Transfer (AXFR)
  - AXFRはTCP接続（ポート53）で行われます。これは、転送中にパケットが失われないようにするために、信頼性の高いプロトコルが必要なためです。このプロトコルを使用すると、プライマリDNSサーバーは、シリアル番号に関係なく、1回の接続で、すべてのゾーンコンテンツをセカンダリDNSサーバーに転送します。AXFRは、レコードが1つも伝搬しない最初のゾーン転送に使用することが推奨され、 それ以降はIXFRが推奨されます。
- Incremental Zone Transfer (IXFR)
  - AXFRプロトコルとは異なり、IXFRの間、プライマリサーバーは、(シリアル番号に 基づいて)そのゾーンの現在のバージョンから変更されたレコードのみをセカンダリサー バーに送信する。つまり、セカンダリDNSサーバーがIXFRを開始しようとする場合、セカンダリDNS サーバーは現在のシリアル番号をプライマリDNSサーバーに送信する。その後、プライマリDNSサーバは、ゾーンに加えられた変更の 過去のバージョンに基づいて応答をフォーマットする。IXFRはUDPまたはTCP（ポート53）で行うことができますが、やはりパケットロスを避けるために一般的にはTCPが推奨されます。

# Cloudflare を Secondary DNS とする構成パターン

以下の「Primary-Secondary（Multi-Vendor）」「Hidden Primary」の構成を取れます。

> [Announcing Foundation DNS — Cloudflare’s new premium DNS offering](https://blog.cloudflare.com/foundation-dns/)
>
> ![img](https://blog.cloudflare.com/content/images/2021/12/image7-2.png)

# NS1 を Primary DNS として設定する

https://ns1.com/signup からフリーアカウントを作成できます。

クレジットカードの入力が必要ですが、DNS クエリが 100万回 / 月を越えない限り無料です。

> NS1 will only bill you in the event that your account sees DNS query  overages. Overages are billed at $8/million queries on a monthly basis.

以下のガイドに従って、今回は [Freenom](https://www.freenom.com) で取得したドメインを登録します。

> [Create a DNS zone – NS1 Help Center](https://help.ns1.com/hc/en-us/articles/360020257613#UUID-dd8c2314-d6bf-9970-9e36-3f223d68c345)

![image-20220113160641526](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220113160641526.png)

その後、以下の NS レコードが確認できます。

![image-20220113233145340](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220113233145340.png)

[Freenom](https://www.freenom.com) でカスタムネームサーバーとして、NS1のネームサーバーを登録します。

![image-20220113162604235](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220113162604235.png)

続いて、以下のガイドに従って NS1 からの Zone Transfer を設定します。

> [Configuring NS1 as the primary DNS provider – NS1 Help Center](https://help.ns1.com/hc/en-us/articles/360022246733-Configuring-NS1-as-the-primary-DNS-provider)

転送先としての ACL に Cloudflare の IPv4 を追加します。

>  [Access Control List (ACL) configuration](https://support.cloudflare.com/hc/en-us/articles/360001356152#access-control-list-configuration)

![image-20220113163745391](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220113163745391.png)

# Cloudflare を Secondary DNS として設定する（「Primary-Secondary（Multi-Vendor）」構成）

以下のガイドに従って設定します。

> [Configure a Secondary Zone through the Cloudflare Dashboard](https://support.cloudflare.com/hc/en-us/articles/360001356152#7AKI2D7QpJRTgkmX0v6Y92)

https://dash.cloudflare.com/?to=/:account/add-site から「Secondary DNS」を選択します。

![image-20220114001251588](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114001251588.png)

続けて NS1 の Primary ネームサーバーの IP アドレス `192.135.223.10` と

> [Configuring NS1 as the primary DNS provider – NS1 Help Center](https://help.ns1.com/hc/en-us/articles/360022246733-Configuring-NS1-as-the-primary-DNS-provider)
>
> After configuring the zone transfers in the NS1 platform, **you must configure the secondary servers** to use `xfr01.nsone.net (192.135.223.10)` as the zone's primary server.

TSIG を設定します。（以下のコマンド結果を入力する。）

```
% tsig-keygen -a hmac-sha512 tsig-key 
key "tsig-key" {
        algorithm hmac-sha512;
        secret "XXXXX";
};
```

![image-20220114003516908](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114003516908.png)

`auto_refresh_seconds` の値を確認し、「Linked」となるようにチェックします。

![image-20220114004037080](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114004037080.png)

転送されたレコードを確認し、「Continue」します。
（必要に応じて Primary DNS レコードをアップデートの上、再度「Initiate zone transfer」を行い、確認しますが、後からも行えます。）

![image-20220114004239811](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114004239811.png)

最後に Cloudflare から Secondary ネームサーバーが割り当てられます。

![image-20220114004803583](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114004803583.png)

「Primary-Secondary（Multi-Vendor）」構成とするために、NS1 と [Freenom](https://www.freenom.com) で以下のように設定します。（Freenom で設定できるネームサーバーが最大5個のため、NS1 Primary ネームサーバー3つ、Cloudflare Secondary ネームサーバー2つとします。）

![image-20220114104302866](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114104302866.png)

![image-20220114005226482](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114005226482.png)

設定完了後は、https://dash.cloudflare.com/?to=/:account/:zone/dns から以下のような画面になります。

![image-20220114105006097](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114105006097.png)

```shell
% dig xxx.cf NS @1.1.1.1 +short
nsXXXX.secondary.cloudflare.com.
nsXXXX.secondary.cloudflare.com.
dns1.p01.nsone.net.
dns2.p01.nsone.net.
dns3.p01.nsone.net.
```

# Secondary DNS に関する通知設定

以下の通知を設定することができます。

https://dash.cloudflare.com//?to=/:account/notifications/create

![image-20220114012801410](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114012801410.png)

↓「Secondary DNS Successfully Updated」の通知例です。

![image-20220114013022551](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114013022551.png)

# 「Hidden Primary」設定

NS1 と [Freenom](https://www.freenom.com) で、NS1 の Primary ネームサーバーを削除し、Cloudflare の Secondary ネームサーバーのみの設定とすることで、「Hidden Primary」の構成にできます。

![image-20220114105904858](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114105904858.png)

![image-20220114013759767](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114013759767.png)

```shell
% dig xxx.cf NS @1.1.1.1 +short
nsXXXX.secondary.cloudflare.com.
nsXXXX.secondary.cloudflare.com.
```

# Secondary DNS Override

Override を使えば、Secondary DNS でも A/AAAA/CNAME レコードをプロキシし Cloudflare の IP を応答させることができます。（アカウントチームに有効化の依頼を上げる必要があります。）

> [Orange Clouding with Secondary DNS](https://blog.cloudflare.com/orange-clouding-with-secondary-dns/)
>
> Secondary DNS Override builds on the Secondary DNS with a hidden primary model by allowing our customers to not only serve records as they tell  us to, but also enable them to proxy any A/AAAA/CNAME records through [Cloudflare's network](https://www.cloudflare.com/en-gb/network/). This is similar to how Cloudflare as a primary DNS provider currently works. 

その際には、一貫した応答結果とするために「Hidden Primary」の構成で利用することが推奨です。

> [Understanding Secondary DNS Override – Cloudflare Help Center](https://support.cloudflare.com/hc/en-us/articles/360042169091-Understanding-Secondary-DNS-Override)
>
> ### Prerequisites
>
> 1. Add a [Secondary DNS zone](https://support.cloudflare.com/hc/articles/360001356152) to Cloudflare and verify that DNS records are transferred.
> 2. Request your Account Team to enable Secondary Override. 
> 3. (Highly recommended) Only list Cloudflare’s nameservers at your  domain’s registrar to ensure that DNS queries to different  nameservers don't yield varying responses.
>
> ![image-20220114110913694](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114110913694.png)

Secondary DNS Override を有効にすると、DNS 設定画面で「Proxy」状態をクリックで変更できます。

![image-20220114110415348](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114110415348.png)

「Proxied」のレコードについては、[Cloudflare の IP](https://www.cloudflare.com/ips/) が応答されます。

```
% dig orange.xxx.cf @1.1.1.1 +short 
104.18.16.38
104.18.17.38
```

# CNAME at the Apex

Secondary DNS Override では唯一 Zone Apex に CNAME レコードを作成できます。

![image-20220114125705529](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114125705529.png)

「CNAME at the Apex」設定時は、既存の「A/AAAA at the Apex」レコードが無効になります。

![image-20220114125843447](https://cdn.jsdelivr.net/gh/kyouheicf/image@master/uPic/image-20220114125843447.png)