PowerDNSのALIASレコードについて
初めての方は初めまして,そうじゃない方も初めまして. 日本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を一切守ってくれないので,こちらは絶対に使用を避けた方が良いのではないかと思います.