DNS ANAMEレコード (PowerDNS の ALIASレコード) を試してみる
DNS ANAMEレコード / PowerDNS ALIASレコード 関連記事
- はじめに
- CNAMEレコードの制約、ANAME レコードがなぜ必要なのか?
- ANAME レコード 表示形式 と 専門用語
- ANAMEレコードと、PowerDNS の ALIAS レコード について
- PowerDNS Authoritaive Server の ALIAS レコードを試してみる
はじめに
「Address-specific DNS aliases (ANAME) 」というDNS関連の Internet Draft が、2017年よりIETFに提出されており、つい先日 draft-03 が提出されました
- draft-00 ( 2017-03-24 提出, 2017-11-25 Expire )
- draft-01 ( 2018-01-11 提出, 2018-07-15 Expire )
- draft-02 ( 2018-10-15 提出, 2019-04-22 Expire )
- draft-03 ( 2019-04-15 提出, 2019-10-17 Expire ) ← NEW
普段DNS関連技術は触れていないのですが、諸用により ANAMEレコード関連の情報を確認したり、draft-03 を確認したりなどをしていたため、微々たる情報量ではありますが、得た情報をこちらに書き留めておきます。
PowerDNS では ANAMEレコードの一部の機能を「ALIASレコード」として実装しているため、この機能を試してみた内容と併せて紹介しておきます。
なお、この記事においては、ANAMEレコードについての情報の一部分の紹介になります。すべての情報は書いていませんので、障りとしての参考情報程度にしていただけたらと思います。
CNAMEレコードの制約、ANAME レコードがなぜ必要なのか?
CNAMEレコードの制約
DNSプロバイダの DNS Made Easy が作成されている ANAMEレコードの紹介動画 ( Introducing the ANAME Record - YouTube ) がとても分かりやすかったのでお勧めです。英語が問題ない方はこちらの動画を確認していただくと、4分程度でざっと雰囲気を把握できるかと思います。
DNSではCNAMEレコードを使ってドメイン名の別名を定義することができます。しかし、CNAMEレコードには仕様上の制約があり、下記のことができません。
① Zone Apex(別名: Root Domain / Naked Domain) では CNAMEレコードを 作成することができない
② CNAMEレコードはユニークでなければならない (同一の名前を他のレコードと共有することができない)
<NG その1> CNAMEを複数書いたりはできない
examle.1773.work. IN CNAME sv1.1773.work.
examle.1773.work. IN CNAME sv2.1773.work.
<NG その2> MXなど他のリソースレコードタイプと重複したりもできない
example.1773.work.
IN MX 10 mail.1773.work.
example.1773.work. IN CNAME origin.1773.work.
また、一般的なCNAMEレコードの参照では、DNS lookup を2度実行する必要があるため、参照速度が遅くなります。1度目のlookupでCNAMEレコードを見つけ、2度目のlookupで参照先のIPアドレスを見つけます。
これらの制約を解決するANAMEレコード
ANAMEレコードでは、CNAMEレコードのようにドメイン名の別名を定義できますが、上記のCNAMEレコードの仕様上の制約が取り除かれています。
ANAME レコード 表示形式 と 専門用語
draft-03 より確認した ANAMEレコードの表示形式 および 専門用語を紹介します。
表示形式
ANAMEレコードの表示形式はCNAMEレコードと同様です。
専門用語
Address Record : リソースレコードタイプが A または AAAA の DNSリソースレコード(名前やTTLなどを含むRRset全体)
Address Type : リソースレコードタイプ が A または AAAA のもの
Address Query : 任意の Address Type に対する DNSクエリ
Sibling Address Record : ANAMEと同じowner名のAddress Recordで、ANAMEの置き換えの対象
Target Address Record : ANAMEの最尾の対象 を解決して取得した Address Record
ANAMEレコードと、PowerDNS の ALIAS レコード について
PowerDNS は OSS の DNSサーバです。
Internet Draft 内 の Appendix では PowerDNS での実装について下記のように述べられています。
( Address-specific DNS aliases (ANAME) - draft-03 より抜粋)
PowerDNS Authoritaive Server の ALIAS レコードを試してみる
PowerDNS Authoritative Server ( 以降、PowerDNS と略 ) の 導入およびセットアップについては、公式ドキュメント を参考に実施しました。
PowerDNS での ALIASレコードの制御には pdns.conf に下記 3つのパラメタを記述しました。
- expand-alias=yes : ALIASレコード拡張を有効にする。(v4.1.0以降)
- resolver=(任意のアドレス):53 : ALIAS(と内部スタブリゾルバ)のリゾルバアドレス。(v4.1.0以降) 今回は自分の個人運用しているDNSサーバに向けています。
- outgoing-axfr-expand-alias=yes : AXFRでのALIASレコード拡張を有効にする。(この内容についてはまだ検証できていませんが、一旦投入しています)
DNSレコードの準備
PowerDNSではいくつかのバックエンドの選択があります。私は PostgreSQL を選択しましたので、そちらの形式でレコードを準備します。
今回問い合わせ対象の name を "example.1773.work" とします。
■ ALIAS(ANAME)レコードの準備 (DNS-1 にて準備)
ALIAS(ANAME)に利用するnameはSOA,NSと共用しており、CNAMEでは制限のため利用できないパターンになります。
■ Sibling Address Record の準備 (DNS-2 にて準備)
pdns.conf にてresolverとして指定したDNSサーバにレコードを準備します。こちらはNSDなので、その形式で準備しました。
DNS lookupの実行
この状態で DNS-1 に対して lookup を実行します。結果は下記のようになりました。
# dig example.1773.work
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> example.1773.work
;; global
options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35817
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;example.1773.work. IN A
;; ANSWER SECTION:
example.1773.work. 358 IN A 10.20.100.10
;; Query time: 190 msec
;; SERVER: (問い合わせ先)#53(問い合わせ先)
;; WHEN: Thu Apr 26 01:32:03 JST 2019
;; MSG SIZE rcvd: 59
ANSWER SECTION にて 解決された Target Address Record が参照できることを確認しました。
DNS ANAMEレコード (PowerDNS ALIASレコード) を試してみた 紹介でした。