初めての方は初めまして,そうじゃない方も初めまして. 日本openSUSEユーザ回でopenSUSEに関係のない話をする担当の川上です.

今回は,openSUSEでPowerDNSを動かして,やいのやいのという,openSUSEに関係のない話を書く予定でしたが,実験が間に合わなかったので,次の,記事でPowerDNSの挙動について詳しく書いて行きます. 一応,PowerDNSの話ですが,本当にopenSUSE感が無いので申し分けない限りです.

今回は,PowerDNSの独自レコードタイプである ALIAS レコードについて使わない方が良いんじゃないかなぁという解説をします.

まず,DNSのレコードタイプとは何なのかについて説明します. DNSではドメイン名とそのドメイン名に対応する情報を併せてレコードと呼びます. このドメイン名に対応するどのような情報を所得するかを,レコードタイプを用いて決定しています.

例えば,Webサービスに対してアクセスしたい場合は A レコードというレコードタイプが,IPアドレスを返すことを意味します. 他にも MX レコードはメールサーバのアドレスを返し, CNAME はドメイン名の別名を返します.

このようなレコードタイプで,PowerDNSが独自に実装しているレコードタイプが ALIAS レコードです. なぜ,PowerDNSが AlIAS レコードを独自に実装しているのかというと,現在のRFCではZone Apexに CNAME を指定する事が出来ないという問題があるためです. これはCNAMEが他のレコードと共存出来ないとう制限に起因します. Zone Apexでは必ず NS レコードが存在するため,CNAMEとの制限とあいまり,Apex Zoneでは CNAME を作成する事が出来ません.

現在,この問題に対処するためにZone Apexにもエイリアスを張る事の出来る, ANAME というレコードが提案されて,IETFで議論されています. 1

ただ,このような需要を満すために,AWSやPowerDNSでは独自で ALIAS レコードという物を定義しています. 2 3 ALIAS レコードは CNAME のようにZone Apexに別名を設定する事が出来ます. ただ,名前解決時には CNAME のように返答する事は出来ないので,コンテンツサーバ側でエイリアスのドメイン名に対して名前解決を行い,A レコードとしてIPアドレスの返答を行います. これで,一見して,Zone Apexにエリイアスが張れたように見えます.

PowerDNSでこの機能を試すには,pdns.conf に以下のように設定します.(ポート番号はキャッシュサーバに併せて変更して下さい) ただ,PowerDNSは,この機能は,Resolverが動作していないと使用する事が出来ないので注意して下さい.

resolver=[::1]:5353
expand-alias=yes

ここで問題があります. PowerDNSを外に公開するコンテンツサーバとして使用したくないという問題です. そこで,多くの場合,公開するコンテンツサーバにゾーン転送を行います.

ゾーン転送を行なった場合にこれは,PowerDNSの独自ゾーンなので ALIAS レコードとしてゾーン転送が出来ない可能性があります.(受け付け先もPowerDNSなら出来る) そのために以下の設定を pdns.conf に起こないます.

outgoing-axfr-expand-alias=yes

この設定が yes の場合,ゾーン転送時に名前解決を行い, A もしくは AAAA レコードとしてゾーン転送が行ないます. no の場合は ALIAS レコードのままゾーン転送を行います.

この次点で,勘の良い人は気付くと思いますが,名前解決はゾーン転送の時に行なわれたっきりになってしまいます. 頻繁にゾーン転送が行なわれるようなサーバなら問題ないかもしれないですが,実際的にはそいう事はあまりありません.. そうすると,これはSOAレコードの refresh までは更新されない事になってしまいます.

これらにより, ALIAS レコードはいくつか問題があります. 1つめが ALIAS 先のドメインの情報の変更に追従出来ないという事です. これは以下のような問題が考えられます. CNAME を使いたい場合というのはドメイン名の先を CDN に向けて,サービスの可用性を上げたいといった事が考えられる しかし,この ALIAS では,例えば,エイリアス先のレコードが何かしらの理由で変更された場合にも,追従する事が出来ない. つまり, CDNを利用した可用性の向上を邪魔してしまう事になります. CNAME をそもそも使いたい場合としてあまりメリットがありません.

2つ目がDNSによ地理分散が効かないという事です. これは,名前解決をコンテンツサーバ側が行なうので,DNSで地理分散されている場合,コンテンツサーバに地理的に近いサーバが常に応答されるという事になります. これは,ゾーン転送でない場合にも同様でです.

以上の事から, ALIAS レコードは個人的には使用するべきではないと思います. 使用するにしても, PowerDNSをコンテンツサーバとして外部に公開するといった状況でのみ使用するべきだと思います.

また,PowerDNSにつて書いたがAWSのRoute 53も同様の問題があり,こちらはさらに酷く,TTLを一切守ってくれないので,こちらは絶対に使用を避けた方が良いのではないかと思います.