Hatena::ブログ(Diary)

hnwの日記 このページをアンテナに追加 RSSフィード

[プロフィール]

2015年3月1日(日) CloudFlareのCNAME FlatteningをGitHub Pagesで使ってみた このエントリーを含むブックマーク このエントリーのブックマークコメント

今回はDNS方面の話題です。僕ははてなダイアリー以外にhttp://hnw.jp/という古めかしいサイトも管理しています。サイトの実体はGitHub Pagesで、これまでAWSのRoute 53でカスタムドメインの設定をしていました。


ところで、このサイトが2月の頭から1ヶ月ほど見えなくなっていました。原因は僕がGitHubからのメールを読み飛ばしており、DNS設定の変更を怠っていたためです。これに懲りて、今後DNS設定を二度といじらなくて済むようRoute 53からCloudFlareに引っ越してみました。その顛末を紹介します。


GitHub Pagesのカスタムドメイン設定

GitHub Pagesを普段使っていない人も多いと思いますので、まずは背景を紹介します。


GitHub PagesGitHubの提供する機能の一つで、GitHub上の各リポジトリhttp://hnw.github.io/hnw.jp/のようなURLを与え、Webサイトとしてアクセスできるようにするものです(URL中のhnwがGitHubユーザー名、hnw.jpがリポジトリ名です)。WebサーバGitHubが提供してくれるので、gitの操作に慣れた人が静的コンテンツだけのサイトを手軽に作るにはもってこいのサービスだと言えるでしょう。


さらに、自分でドメインを持っていればGitHub PagesのURLを好きなホスト名に変更することもできます。「Setting up a custom domain with GitHub Pages」にも書いてある通り、リポジトリ上にホスト名を書いたファイルを追加した上でDNSのCNAMEレコードを設定すればカスタムドメインの設定ができます。


ただし、ホスト名として「zone apex」を使っている場合は設定方法が変わります。zone apexというのはドメイン名と同じホスト名のこと*1です。この場合RFCの制約から通常CNAMEを設定することができない*2ため、AレコードGitHubIPアドレスを直接指定するしかありません。


僕のサイトもzone apexだったため、Aレコードを設定していました。


zone apexでも放置運用したい


今回GitHub PagesでIPアドレスの引っ越しがあり、僕がDNSの変更をサボっていたためにサイトが見えなくなっていたというわけです。


しかし、CNAMEで設定できていればIPアドレスの引っ越しはGitHub側のDNS設定だけで済むので、そもそも僕の作業は必要なかったはずです。zone apexでの運用を選ぶと今回のように手間が増える可能性がありますから、この事態が予見できていればwww.hnw.jpのようなホスト名をつけるという選択肢もあったかもしれません。


とはいえ、既に公開しているURLを今さら変更するわけにもいきません。そこでzone apexのままでCNAME的な設定ができないか調べてみたところ、DNSサービスのうち数社で実現できることがわかりました。それらのうち、今回はCloudFlareを試してみました。


CloudFlareのCNAME Flattening

CloudFlareは無料でも使えるCDNとして有名ですが、無料DNSサービスとして利用することもできます。このDNSでは「CNAME Flattening」機能が実装されています。


CNAME Flatteningの詳細は「CNAME Flattening: RFC-compliant support for CNAME at the root」にも書いてあるのですが、要するにzone apexに対するCNAMEを設定した場合、CNAMEのチェインをたどってAレコードとAAAAレコードとして提供するということです。


実際にCloudFlareのWebインターフェースからzone apexにCNAMEを設定してみると、CNAMEに対応するIPアドレスがTTL30秒のAレコードとして帰ってきました。


GitHub Pages+CloudFlare

というわけでCloudFlareGitHub PagesのCNAME設定をしてみます。僕の場合は下記のように今までAレコードIPアドレスを指定していたのをCNAMEでの設定に変更しました。


f:id:hnw:20150301165417p:image


zone apexでCNAME相当の設定をするのはGitHubが想定していない設定になりますが、仕組みを想像すれば動かない理由も無いはずです。実際この設定でサイトが閲覧できており、実験成功と言えるでしょう。これで安心して放置運用ができるというものですね。


まとめ

  • ホスト名にzone apexを使うとURLが短くなってカッコいいけど、制約は増える
  • CloudFlareDNSサービスを使えばzone apexへのCNAMEを擬似的に実現できる
  • GitHub Pagesをカスタムのzone apexで運用している人はDNSを引っ越すと幸せになるかも

*1:正確には違いますけど説明用ということで…

*2RFC 1912 2.4にある「A CNAME record is not allowed to coexist with any other data」が根拠です

トラックバック - http://d.hatena.ne.jp/hnw/20150301
ページビュー
1390308