結局ネームサーバーをCloudFlareからAmazon Route 53に移行
追記(2014年10月7日): CloudFlareがZone Apexでの、CNAMEレコードをAレコードに展開してくれるサービスがリリースされていたようです。詳細は「CNAME Flattening: RFC-compliant support for CNAME at the root」)をご参照ください。
CloudFlareをネームサーバーとしていましたが、問題があってAmazon Route 53に移行しました。DNSの仕様とネイキッドドメイン(ルートドメイン、Zone Apex)がらみのお話です。
前回までのあらすじ
以前、Amazon Web Serviceの構成変更の記事でネームサーバーをCloudFlareにしていることを書きました。
Amazon EC2 + ELB + RDS + S3とCloudFlareでブログ運用 ネイキッドドメインでもOK!
なぜCloudFlareで運用していたかというと、CDN機能があることとネイキッドドメイン(ルートドメイン、Zone Apex)にドメイン名(CNAMEレコード)を設定できるという公式のブログ記事を見つけたからです。
確かにネイキッドドメインにCNAMEを設定できました。これによりAmazon Web Service側でELB(ロードバランサー)で運用していても、ELBのIPアドレスの変更に耐えられるということになります。
異変が…
ところが、自分のブログが一部のネットワーク環境から見ることができないことを確認しました。最初はDNSの拡散に時間がかかっているのかなと思い、48時間は待ってみようと思って待ってみたのもの状況は変わりませんでした。
おかしいなと思って調べてみたら、なんととんでもないことになっていました。
私の想定ではネイキッドドメインにはCNAMEレコードを設定できないので、CloudFlare側で設定したドメイン名に問い合わせて、IPアドレスを取得してAレコードの変換しているのだとてっきり思っていました。ところがdigコマンドでどんなDNSのレコードが拡散されているか調べてみると…
kosukety.org. 300 IN CNAME cf-protected.kosukety.org. cf-protected.kosukety.org. 300 IN A xxx.xxx.xxx.xxx cf-protected.kosukety.org. 300 IN A xxx.xxx.xxx.xxx
* IPアドレスは一応隠してみました。
CloudFlareよ、対応していると言っておきながら…
これだと何が問題かというと、ネイキッドドメインはDNSの仕様で許可されていないということ、ネイキッドドメインをCNAMEで設定すると他のレコードが設定できないので、メールとか届かなくなる場合があることです。
そして実際に見ることができなくなった環境があったということが大きいです。自宅からネットにつないでみると普通に見ることができるのですが、その環境ではエラーでつなぐことができなくなってしまいました。
ちょっとでもエラーで見ることができない環境があるなら、そのソリューションは導入すべきではないという判断で、CloudFlareでDNSを設定するのをやめることにしました。
Route 53を設定
Amazon ELBでネイキッドドメインを運用するならRoute 53を使うことで対応できます。これは前述の通り、ドメイン名をIPアドレスに変換して返してくれるので、ネイキッドドメインにELBのドメイン名を指定しても、実際にDNSの問い合わせには、そのときELBに割り振られているIPアドレスがAレコードとして返ってきます。
ただ、Route 53を設定するとCloudFlareは使えなくなります。CloudFlareはDNSのネームサーバーになることで、アクセスをCloudFlare経由にして、画像などのリソースをキャッシュから配信してくれる仕組みです。ネームサーバーをRoute 53にするのであればCloudFlareによる無料のCDNはあきらめなくてはいけません。
Route 53でCDNを利用する場合はAmazonが提供するCloudFrontが利用できますが、前回の構成変更で画像ファイルはS3から配信するように変更しましたので、EC2自体への負荷は減ることからしばらく様子見としたいと思います。
実際の設定画面は次のような感じです。
Aレコードを指定するのですが、エイリアス(別名)の部分を「Yes」に設定してターゲットのところにELBのドメイン名を指定すると、DNSの問い合わせではAレコードのIPアドレスとして返ります。
Route 53を設定して実際にdigコマンドで調べてみるとちゃんとIPアドレスが返ってきました。
kosukety.org. 60 IN A xxx.xxx.xxx.xxx
これでまともな設定になりました。もちろん、メールサーバーのためのMXレコードやS3のサブドメインのmediaというのも追加して設定してあります。
教訓
何かを実現するというサービスがあった場合は、どういう仕組みで実現しているか、またちゃんと実現しているかを詳しく調べてみましょう。