Cloudflare の Pending ゾーンで Logpush と Outgoing Zone Transfer は機能するか

# Cloudflare の Pending ゾーン
以下のドキュメントによると、Pending ゾーンでは

- DNSクエリに応答する
- プロキシできない（付随する DDoS や WAF 等のサービス群が機能しない）
- 有料プランなら自動削除されない

https://developers.cloudflare.com/dns/zone-setups/reference/domain-status/#pending

>```mermaid
>flowchart LR
>A[Initializing]
>B[Pending]
>C[Active]
>D[Moved]
>E[Deleted]
>F[Purged]
> A-- Plan <br />selection --> B
> B-- Zone <br />authentication --> C
> C-- DNS <br />checks fail --> D
> D-- Moved <br />for 7 days --> E
> E-- Deleted <br />for 7 days --> F
>
> B-- Pending for <br />28 days --> E
> A-- Initializing for 28 days --> E
>```
>
> Pending
お客様のゾーンのステータスは、Cloudflareダッシュボード上でPending Nameserver Updateとして表示されます。
>
>Cloudflareは、割り当てられたCloudflareネームサーバーIP上の保留中のゾーンに対するDNSクエリに応答しますが、お客様のゾーンはまだアクティブではなく、Cloudflareへのプロキシトラフィックに使用することはできません。
>
>お客様のドメインが無料プランの場合、28日以内に有効化されないと自動的に削除されます。有料プラン（Pro、Business、Enterprise）の保留中のゾーンは、プランが削除されるか、ドメインが有効化されるか、Cloudflareから削除されるまで保留されたままになります。

上記を踏まえると、DNS ベースの基本機能は動くように見えますが、以下では DNS 機能に関連する Logpush と Outgoing Zone Transfer は機能するかを確認します。

# DNSクエリに応答することを確認
以下のようにレコードを構成した上で、DNSクエリに応答することを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/13a08b51-7fde-d2b0-1dcd-13e5f078496e.png)

払い出されたネームサーバーに問い合わせると、DNSクエリに応答することが確認できます。

```shell:
% dig @keyla.ns.cloudflare.com example.com A +short
9.9.9.9
```

# Logpush が機能することを確認
以下のように DNS logs のデータセットの Logpush を構成します。

https://developers.cloudflare.com/logs/reference/log-fields/zone/dns_logs/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/555089ed-75ad-d349-236b-f3679fac8503.png)

先ほどの DNS クエリ確認コマンドを打ち続けると、Logpush によって以下のログが確認できました。

```json:
{
  "ColoCode": "NRT",
  "EDNSSubnet": "",
  "EDNSSubnetLength": 0,
  "QueryName": "example.com.",
  "QueryType": 2,
  "ResponseCached": true,
  "ResponseCode": 0,
  "SourceIP": "x.x.x.x",
  "Timestamp": "2024-06-20T06:15:25Z"
}
{
  "ColoCode": "NRT",
  "EDNSSubnet": "",
  "EDNSSubnetLength": 0,
  "QueryName": "example.com.",
  "QueryType": 2,
  "ResponseCached": true,
  "ResponseCode": 0,
  "SourceIP": "x.x.x.x",
  "Timestamp": "2024-06-20T06:15:26Z"
}
```

# Outgoing Zone Transfer が機能することを確認
以下のような構成で Outgoing Zone Transfer が機能することを確認します。

```mermaid:
graph LR

subgraph Cloudflare
    subgraph Primary [Primary DNS]
        Pending[Pending Zone<br>example.com]
    end
end

subgraph NS1
    subgraph Secondary [Secondary DNS]
        example[example.com]
    end
end

Pending --> |Outgoing Zone Transfer|example
```

以下の手順に沿って進めます。

https://developers.cloudflare.com/dns/zone-setups/zone-transfers/cloudflare-as-primary/setup/

## Peer DNS Server の構成

TSIG を含め、以下のように構成します。

NS1 の IP アドレスは `192.135.223.10` を使います。

https://www.ibm.com/docs/en/ns1-connect?topic=started-configuring-ns1-as-secondary-dns-provider

>For secondary zones published to the shared Managed DNS network (network 0), the XFR server IP address is `192.135.223.10`.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/63843289-9568-d15a-fa86-e581fafcee4b.png)

## NS1 (Secondary DNS) の設定
TSIG を含め、以下のように構成します。

Cloudflare の IP アドレスは `172.65.64.6` を使います。

https://developers.cloudflare.com/dns/zone-setups/zone-transfers/access-control-lists/cloudflare-ip-addresses/#transfer-ip

> **Transfer IP**
Cloudflare will listen to AXFR/IXFR zone transfer requests and SOA queries from your Secondary DNS server on this IP address.
>
> `172.65.64.6`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/a01c1547-0d01-dbf8-e8d1-53459752eafd.png)


## Outgoing Zone Transfer を有効化
構成した Peer DNS Server をリンクした上で、Outgoing Zone Transfer を有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/8223268e-f162-1f7c-57f0-9906c01e14db.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/54ba5fd3-9b12-a444-f00d-f441e1296853.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/fed4918a-0078-92e0-67a9-feb9b7d28995.png)

## 動作確認

Cloudflare 側で、Outgoing Zone Transfer が動作したことが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/45397a6b-cc12-6ebf-15f7-af2c1078106b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/cef09f0e-452a-b365-08f2-7833185b55f3.png)

NS1 側でも、動作したことが確認でき、レコード情報が同期されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/248d8def-7d5a-19ba-04d3-d9465525f02d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/6f058a4e-bf61-320c-692f-b06e781701ff.png)


# まとめ

Cloudflare の Pending ゾーンで DNS 機能に関連する Logpush と Outgoing Zone Transfer が機能することを確認できました。

[Full setup](https://developers.cloudflare.com/dns/zone-setups/full-setup/) において、権威 DNS サーバーの切り替え前に色々な設定を構成して動作の確認をしたい場合でも、事前に行うことができます。

# 参考リンク

https://qiita.com/khayama/items/2ad4089a5ae8fc8ba602

https://github.com/cloudflare/cloudflare-docs/pull/15271/files