はじめに
VPCで利用可能なAmazonProvidedDNSの動きが気になり、
Route 53でサポートされたVPC内のPrivate DNSとあわせて試してみる。
オンプレと組み合わせた名前解決周りの設計は、結構悩ましい事が多いので、楽になればいいなと。
想定した構成
DFSの構成を検証した際に考えたのは、
- 利用する名前空間内のRootゾーンにRoute 53でホスト。
- AWS上で組むシステム単位でサブドメイン的なhost名を使って利用するイメージ。
という構成。設定的にはこんな感じ。
-
dfs.local
:Route53のPrivateDSNを利用。domain.dfs.localのNSレコードを持たせる。 -
domain.dfs.local
:ActiveDirectory側で利用するDNSサーバを利用。フォワーダーにAmazonProvidedDNSを設定する。
AmazonProvidedDNSがActiveDirectory側のDNSにも問合せ可能だと色々と捗りそう。
環境構築
- VPCの構築やら、Route53のHosted Zoneの設定を行う。詳細は色々な所で解説されているので、そちらを参考に。
- 作成したhostedゾーンに以下の様なレコードを追加
レコード名 | タイプ | 内容 |
---|---|---|
domain.dfs.local. | A | B.B.B.B |
domain.dfs.local. | MX | A.A.A.A |
domain.dfs.local. | NS | B.B.B.B |
domain.dfs.local. | TXT | "TEXT" |
dc01.domain.dfs.local. | A | C.C.C.C |
dc02.domain.dfs.local. | A | D.D.D.D |
LinuxクライアントからAmazonProvidedDNSに対してQueryを投げる
検証結果
Privateゾーンの権威サーバに対して、直接のアクセスが可能かを確認してみると、status: REFUSED
となり、アクセスできない。
$ dig @<権威サーバ> dfs.local soa
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @<権威サーバ> dfs.local soa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 13903
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;dfs.local. IN SOA
;; Query time: 80 msec
;; SERVER: <権威サーバ>#53(<権威サーバ>)
;; WHEN: Mon Dec 22 07:46:37 2014
;; MSG SIZE rcvd: 27
名前解決をするためには、AmazonProvidedDNS経由のみで問い合わせる必要があるようだ。
続いてdomain.dfs.localに関してQueryType=anyでQueryを投げるとstatus: SERVFAIL
となり、何処かでエラーが発生して、応答が得られない。
$ dig @AmazonProvidedDNS domain.dfs.local any
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @AmazonProvidedDNS domain.dfs.local any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 11839
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;domain.dfs.local. IN ANY
;; Query time: 13 msec
;; SERVER: AmazonProvidedDNS#53(AmazonProvidedDNS)
;; WHEN: Mon Dec 22 07:52:14 2014
;; MSG SIZE rcvd: 34
色々と試してみた結果、domain.dfs.localのnsレコードが悪さをしているようで、
このレコードを削除すると、きちんと引ける様になる
$ dig @AmazonProvidedDNS domain.dfs.local any
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @AmazonProvidedDNS domain.dfs.local any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20903
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;domain.dfs.local. IN ANY
;; ANSWER SECTION:
domain.dfs.local. 44 IN TXT "TEXT"
domain.dfs.local. 41 IN MX 10 A.A.A.A.
domain.dfs.local. 153 IN A B.B.B.B
;; Query time: 0 msec
;; SERVER: AmazonProvidedDNS#53(AmazonProvidedDNS)
;; WHEN: Mon Dec 22 07:57:38 2014
;; MSG SIZE rcvd: 94
続いて、サブドメイン風に作ったdc01.domain.dfs.local
のレコードが返ってくるかを確認
$ dig @AmazonProvidedDNS dc01.domain.dfs.local any
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @<AmazonProvidedDNS> dc01.domain.dfs.local any
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28756
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;dc01.domain.dfs.local. IN ANY
;; ANSWER SECTION:
dc01.domain.dfs.local. 49 IN A C.C.C.C
;; Query time: 0 msec
;; SERVER: <AmazonProvidedDNS>#53(<AmazonProvidedDNS>)
;; WHEN: Mon Dec 22 07:59:14 2014
;; MSG SIZE rcvd: 55
これも大丈夫。どうやら、Privateゾーンに関しては、
- nsレコードが設定されていると、何らかのエラーが発生する
これが本当に仕様だとしたら、ドキュメントの何処かに書いてありそうだけど、該当箇所が見つからず。
まとめ
- nsレコードを設定した場合に、
status: SERVFAIL
になる原因は分からず。時間があるときにもう少し詳しく調べよう。 - AmazonProvidedDNSがVPC内部に建てた独自DNSに対してQueryを投げるような事はダメっぽい