(2023/10/26追記)
CNAME setupについては、docsにも記載が追加されています。
1. はじめに
Cloudflareにはドメインを移行する方法(Full Setup)と、CNAMEで移行する方法(CNAME Setup mode)がある。CISでも実はCNAME Setupによるドメイン作成はCLIで可能であることが分かったため、実機にて試してみた。
https://support.cloudflare.com/hc/en-us/articles/360020348832-Understanding-a-CNAME-Setup
このやり方が素晴らしいのは、
- NSレコードによる移行ではなく、CNAMEによる移行が可能。
- 移行実施前に、ドメインをActiveにすることができる。
- 最終的にAレコード -> CNAMEレコードに移行する前に動作確認が可能
が可能であることである。ここでは、以下の環境であることを前提とする。
-
cnamexxxx.tk
: 既存DNSで管理しているドメイン -
www.cnamexxxx.tk
: 既存DNSでAレコードで管理していたが、CISにCNAMEで移行したいFQDN -
162.133.xx.xx
:www.cnamexxxx.tk
のAレコードで元々登録していたIP。 -
104.18.xx.xxx
: Edge IP
2. 既存DNSの確認
www.cnamexxxx.tk
は、AレコードでIPアドレスを登録している。
$ dig +noall +ans www.cnamexxxx.tk
www.cnamexxxx.tk. 900 IN A 162.133.xx.xx
3. CNAME Setup用のドメイン(Partial Domain)を作成
-
ibmcloud cis domain-add <ドメイン名> --type partial
でドメインを作成する。 -
Verification Key
が発行されるのでメモしておく。
$ ibmcloud cis instances
Retrieving service instances for service 'internet-svcs' ...
OK
Name ID Location State Service Name
CIS-Enterprise-Usage1 crn:v1:bluemix:public:internet-svcs:global:a/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:cf4d8b04-b49e-4bf0-a99d-9303bba2cd90:: global active internet-svcs
$ ibmcloud cis instance-set CIS-Enterprise-Usage1
Setting context service instance to 'CIS-Enterprise-Usage1' ...
OK
Context service instance set succeeded.
$ ibmcloud cis domain-add www.cnamexxxx.tk --type partial
Adding domain 'www.cnamexxxx.tk' for service instance 'CIS-Enterprise-Usage1' ...
OK
ID a679988b4c9a86688e0c8fc00b6f3e59
Created On 2022-02-21 00:59:51.187543 +0000 UTC
Modified On 2022-02-21 00:59:51.187543 +0000 UTC
Name www.cnamexxxx.tk
Original Registrar
Origin DNS Host
Status pending
Paused false
Original Name Server ns04.freenom.com, ns03.freenom.com, ns02.freenom.com, ns01.freenom.com
Name Servers
Type partial
Verification Key 3xxxxxxx8-5xxxxxxx4
Cname Suffix cdn.cloudflare.net
Update NS record for domain 'www.cnamexxxx.tk' to '' to make the domain active.
4. VerificationCodeの追加とドメインのActivate化
上記で作成されたVerificationCodeをcloudflare-verify.<ドメイン名>
という名前でTXTレコードとして登録する。
$ dig +noall +ans TXT cloudflare-verify.www.cnamexxxx.tk
cloudflare-verify.www.cnamexxxx.tk. 900 IN TXT "314446538-523399114"
これで、30分〜1時間程度待っているとCIS/CloudflareによるVerificationが行われて、ドメインのステータスがPendingからActiveになる。
$ ibmcloud cis domain a679988b4c9a86688e0c8fc00b6f3e59
Getting domain 'a679988b4c9a86688e0c8fc00b6f3e59' for service instance 'CIS-Enterprise-Usage1' ...
OK
ID a679988b4c9a86688e0c8fc00b6f3e59
Created On 2022-02-21 00:59:51.187543 +0000 UTC
Modified On 2022-02-21 00:59:58.233934 +0000 UTC
Name www.cnamexxxx.tk
Original Registrar
Origin DNS Host
Status pending
Paused false
Original Name Server ns04.freenom.com, ns03.freenom.com, ns02.freenom.com, ns01.freenom.com
Name Servers
Type partial
Verification Key 3xxxxxxx8-5xxxxxxx4
Cname Suffix cdn.cloudflare.net
$ ibmcloud cis domain a679988b4c9a86688e0c8fc00b6f3e59
Getting domain 'a679988b4c9a86688e0c8fc00b6f3e59' for service instance 'CIS-Enterprise-Usage1' ...
OK
ID a679988b4c9a86688e0c8fc00b6f3e59
Created On 2022-02-21 00:59:51.187543 +0000 UTC
Modified On 2022-02-22 04:57:11.164254 +0000 UTC
Active On 2022-02-22 04:57:11.164254 +0000 UTC
Name www.cnamexxxx.tk
Original Registrar
Origin DNS Host
Status active
Paused false
Original Name Server ns04.freenom.com, ns03.freenom.com, ns02.freenom.com, ns01.freenom.com
Name Servers
Type partial
Verification Key 314446538-523399114
Cname Suffix cdn.cloudflare.net
5. CISにDNSレコードを追加
- CISに登録できるレコードは自分自身(
@
。ここではwww.cnamexxxx.tk
に相当)に対するDNSレコード(Aレコードなど)のみである。ただし、Aレコードの代わりにwww.cnamexxxx.tk
というFQDNのGLBを作成しても問題なかった(それでも動作確認できた)。 - ドメインがActiveなので
Proxy=Enabled
で作成可能。
$ ibmcloud cis dns-record-create a679988b4c9a86688e0c8fc00b6f3e59 --name "@" --type A --content 162.133.xx.xx --ttl 900 --proxied true
Creating DNS Records in domain 'a679988b4c9a86688e0c8fc00b6f3e59' for service instance 'CIS-Enterprise-Usage1' ...
OK
ID 4edfebe751aa163aab9373665c8f9cda
Created On 2022-02-21 01:31:12.513887 +0000 UTC
Modified On 2022-02-21 01:31:12.513887 +0000 UTC
Name www.cnamexxxx.tk
Type A
Content 162.133.xx.xx
Domain ID a679988b4c9a86688e0c8fc00b6f3e59
Domain Name www.cnamexxxx.tk
Proxied true
TTL 1
6. Edge証明書の作成
ドメインがActiveなのでEdge証明書が作成可能。
$ ibmcloud cis certificates a679988b4c9a86688e0c8fc00b6f3e59
Retrieving certificates for DNS domain 'a679988b4c9a86688e0c8fc00b6f3e59' ...
No certificates exist for DNS domain 'a679988b4c9a86688e0c8fc00b6f3e59'.
OK
$ ibmcloud cis certificate-order a679988b4c9a86688e0c8fc00b6f3e59 --hostnames www.cnamexxxx.tk
Ordering certificate pack for DNS domain 'a679988b4c9a86688e0c8fc00b6f3e59' ...
OK
Certificate pack is ordered successfully.
ID 8efd5376-00ee-4781-a9a2-bea5c9e19131
Type advanced
Certificates
Hosts www.cnamexxxx.tk
Primary certificate
7. End-to-end CAからEnd-to-end flexibleに変更
Origin証明書を作成して、Webサーバーに登録するのが一番良いのだが、今回は面倒だったので手取り早く確認するためにEdge-Origin間は自己証明書のままである。
$ ibmcloud cis tls-settings a679988b4c9a86688e0c8fc00b6f3e59
Retrieving tls settings for DNS domain 'a679988b4c9a86688e0c8fc00b6f3e59' ...
universal true
tls_1_2_only Off
min_tls_version 1.2
ssl End-to-end CA signed
tls_1_3 On
$ ibmcloud cis tls-settings-update a679988b4c9a86688e0c8fc00b6f3e59 --mode end-to-end-flexible
ssl End-to-end flexible
8. 移行前の事前テスト
ここまで、まだwww.cnamexxxx.tk
は既存DNSのAレコードを使って名前解決が行われている。
$ dig +noall +ans www.cnamexxxx.tk
www.cnamexxxx.tk. 900 IN A 162.133.xx.xx
$ curl -I http://www.cnamexxxx.tk
HTTP/1.1 200 OK
Date: Tue, 22 Feb 2022 05:56:45 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
Last-Modified: Tue, 01 Feb 2022 03:17:09 GMT
ETag: "153-5d6ec562aae98"
Accept-Ranges: bytes
Content-Length: 339
Content-Type: text/html; charset=UTF-8
$ curl -k -I https://www.cnamexxxx.tk
HTTP/1.1 200 OK
Date: Tue, 22 Feb 2022 05:57:16 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
Last-Modified: Tue, 01 Feb 2022 03:17:09 GMT
ETag: "153-5d6ec562aae98"
Accept-Ranges: bytes
Content-Length: 339
Content-Type: text/html; charset=UTF-8
www.cnamexxxx.tk
を名前解決した時に104.18.xx.xxx
が使われるようにローカル端末の/etc/hostsを編集しても良いのだが、curlには--resolve
という便利なオプションがあるので今回はこちらを利用する。これによって、Edge IP経由での動作確認が可能である。
$ dig +noall +ans www.cnamexxxx.tk
www.cnamexxxx.tk. 900 IN A 162.133.xx.xx
$ curl -I http://www.cnamexxxx.tk --resolve www.cnamexxxx.tk:80:104.18.xx.xxx
HTTP/1.1 200 OK
Date: Tue, 22 Feb 2022 05:58:07 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Last-Modified: Tue, 01 Feb 2022 03:17:09 GMT
Accept-Ranges: bytes
CF-Cache-Status: DYNAMIC
Server: cloudflare
CF-RAY: 6e15fb1a4a62342c-NRT
$ curl -I https://www.cnamexxxx.tk --resolve www.cnamexxxx.tk:443:104.18.xx.xxx
HTTP/2 200
date: Tue, 22 Feb 2022 05:58:20 GMT
content-type: text/html; charset=UTF-8
last-modified: Tue, 01 Feb 2022 03:17:09 GMT
accept-ranges: bytes
cf-cache-status: DYNAMIC
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 6e15fb6a3b5b8a86-NRT
9.上位DNSでのAレコードからCNAMEレコードへの切り替え
- 十分動作確認ができたら、遂に既存DNSサーバーで、DNSレコードを移行する。
-
ibmcloud cis domain xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
の結果からわかるように、Cname Suffix
がcdn.cloudflare.net
なので、今回のCNAME TARGETはwww.cnamexxxx.tk.cdn.cloudflare.net
となる。 - よって
www
というDNSレコードに対する最終形は以下のようになる。- Before: Aレコード:
162.133.xx.xx
- After: CNAMEレコード:
www.cnamexxxx.tk.cdn.cloudflare.net
- Before: Aレコード:
10.切り替え後の最終確認
$ dig +noall +ans www.cnamexxxx.tk
www.cnamexxxx.tk. 900 IN CNAME www.cnamexxxx.tk.cdn.cloudflare.net.
www.cnamexxxx.tk.cdn.cloudflare.net. 300 IN A 104.18.23.210
www.cnamexxxx.tk.cdn.cloudflare.net. 300 IN A 104.18.22.210
$ curl -I http://www.cnamexxxx.tk
HTTP/1.1 200 OK
Date: Tue, 22 Feb 2022 06:03:33 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Last-Modified: Tue, 01 Feb 2022 03:17:09 GMT
Accept-Ranges: bytes
CF-Cache-Status: DYNAMIC
Server: cloudflare
CF-RAY: 6e16030c6c413475-NRT
$ curl -I https://www.cnamexxxx.tk
HTTP/2 200
date: Tue, 22 Feb 2022 06:06:55 GMT
content-type: text/html; charset=UTF-8
last-modified: Tue, 01 Feb 2022 03:17:09 GMT
accept-ranges: bytes
cf-cache-status: DYNAMIC
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 6e1607fa8c408a9c-NRT