Cloudflare

URLに「WWW」が付かないサイトを
作る場合の注意点

ーコラムー
2019年12月6日号

ドメイン名にCNAMEを設定する方法

 どんな業界でも、ビジネスで新しいサービスを立ち上げたり新商品を発売した時、その商品名のドメインを取得して専用Webサイトを作ることが多いですよね。 この時、www.example-domain.comのようにURLの先頭にwwwをつけることもあれば、example-domain.comのように何も付けない場合もあります。 wwwを付けないことでURLが少し短くなるため、これが好まれることがあります。
このような先頭に何も付かないドメイン名そのもののことを「ネイキッドドメイン」とか「APEXドメイン」と言うのですが、このようなサイトをクラウドサービス上で構築する場合や、CDNを利用する場合に注意点があります。
例えばAmazon ELBを使っている場合、ロードバランシング用の待ち受けアドレスが動的であるため、IPアドレスでなくFQDNが用いられます。 ELBのFQDNを別名としたCNAMEレコードをDNSサーバへ登録する必要があります。例えば以下をご参照ください。

example-domain.com.   3600 IN CNAME  xxx.elb.amazonaws.com.


CDNを利用する場合なども、WebトラフィックをCDNへ向けるためCNAMEが必要になります。

example-domain.com.   3600 IN CNAME  example-domain.com.cdn-service.com.


問題

しかし、ここで問題があります。RFCの仕様は、CNAMEレコードと同一ドメイン名の、他のレコードが存在出来ない規則になっているためです。
example-domain.comのCNAMEレコードを定義してしまうと、example-domain.comのMXレコードやNSレコードも存在出来ず、実質使えないやり方ということになってしまいます。

example-domain.com.   3600 IN CNAME  xxx.elb.amazonaws.com.
example-domain.com.   3600 IN MX  mail.example-domain.com. (←指定不可。RFC違反)


解決!!

しかし、Cloudflareならこの問題を解決することが出来ます。CloudflareはCDN、WAFサービスだけでなくDNSも提供しており、上記問題を解決する機能が提供されています。 CNAME Flatteningといって、DNS設定画面の見掛け上はCNAMEとなりますが、実際に動作はDNSクエリーの問い合わせ元に対してAレコードとして振る舞います。 応答するアドレスは転送先のFQDNの名前解決を再帰的に行い、返されたアドレスを問い合わせ元に返し、同時にCloudflare内にキャッシュします。


こうすることでRFCに違反することなく、ネイキッドドメインのWebサイトとMXレコード等を同時に実装することが可能です。 結構便利ですよね。上記の例はCloudflareのDNSのみ使用したパターンで、CDNも使うと以下のようにCloudflareのIPアドレスを返すようになります。CloudflareがクライアントからのWebトラフィックを受けた際の転送先アドレスを調べるため再帰的に名前解決を行い、クライアントサイドのDNSにはCloudflareのアドレスを返します。





SaaSやPaaS(サーバーレスアーキテクチャー)などでもCNAMEで転送することがあるのでCNAME Flatteningが役立つ機会は結構あるようです。
Cloudflareで解決できることを是非覚えておいて頂ければと思います。






角田貴寛

 執筆者:角田 貴寛

三井情報株式会社
ソリューション技術本部 次世代基盤第二技術部 第一技術室
CISSP、CEH
現在、セキュリティ関連調査研究・教育業務に従事