備忘録のため,内容の正当性については責任を持ちません。

JANOG36 や DNS Summer Days 2015 で GMO の永井さんに OpenStack Designate というものを教わったので試してみる。


Designate とは、DNS コンテンツサーバを Web API で操作できる OpenStack コンポーネントである。OpenStack 自体を構築しなくても Designate 単体で動作させることができる。バックエンドには BIND9、PowerDNS、NSD4 などが使えるようだ。


環境

今回は Vagrant 上の VM に検証環境を構築する。OS は Ubuntu Server 15.04 を使用する。15.04 にしたのは、apt に Designate があったためである。また、Designate の VM は標準のメモリ 512MB だと動かなかったので、1GB に変更している。VM イメージは Vagrant Cloud にある Ubuntu オフィシャルのものを使う。VM の構成は下表の通り。

VM 名 IP アドレス 用途 備考
node1 10.200.19.40 Designate Ubuntu 15.04; メモリ 1GB
node2 10.200.19.41 DNS Ubuntu 14.04
node3 10.200.19.42 DNS Ubuntu 14.04

構成図は下記ページのような感じ。

ただし今回は Designate 単体で動かすので、Keystore は使用せず API の認証はなし (

auth_strategy = noauth

) とする。また、Customer Facing DNS Servers (ユーザからリクエストを受ける DNS) には BIND を使用することにする。


インストール

インストールには、GitHub に置いておいた Vagrantfile と Ansible の playbook を使う。初回起動時はイメージをダウンロードするのに少々時間がかかる。


$ git clone https://github.com/akagisho/designate-ansible.git
$ cd designate-ansible
$ vagrant up

VM が起動したら自動的に Ansible の playbook が走る。これだけで構築が完了する。便利だね。

パッケージは次のものが入った。


vagrant@vagrant-ubuntu-vivid-64:~$ dpkg -l | grep -i designate
ii  designate                        2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - metapackage
ii  designate-agent                  2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - agent
ii  designate-api                    2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - API server
ii  designate-central                2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - central daemon
ii  designate-common                 2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - common files
ii  designate-doc                    2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - doc
ii  python-designate                 2015.1.0-0ubuntu1.1              all          OpenStack DNS as a Service - Python libs
ii  python-designateclient           1.1.1-0ubuntu1                   all          client library for the OpenStack Designate API

Designate の設定の詳細は

/etc/designate/designate.conf

を確認して欲しい。

使用例

Designate をインストールできたので早速使用してみよう。

まずはじめに、DNS サーバを Designate に登録する必要がある。ここでは名前を

ns1.example.com.

,

ns2.example.com.

とする。


$ curl -X POST -i -H 'Accept: application/json' -H 'Content-Type: application/json' -d \
    '{"name": "ns1.example.com."}' \
    http://10.200.19.40:9001/v1/servers
$ curl -X POST -i -H 'Accept: application/json' -H 'Content-Type: application/json' -d \
    '{"name": "ns2.example.com."}' \
    http://10.200.19.40:9001/v1/servers

ゾーン (

example.net.

) を作成する。


$ curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d \
    '{
      "name": "example.net.",
      "email": "hostmaster@example.net"
    }' http://10.200.19.40:9001/v1/domains

A レコード (

www

) を登録してみる。URL の uuid の部分は、先にゾーンを作成したときに表示された

id

を指定する。


$ curl -X POST -i -H 'Accept: application/json' -H 'Content-Type: application/json' -d \
    '{
      "name": "www.example.net.",
      "type": "A",
      "data": "192.168.1.1"
    }' http://10.200.19.40:9001/v1/domains/bc9d25dd-76b6-499d-9492-d157a7b86683/records

Designate の MiniDNS で、登録したレコードが名前解決できるか確認してみる。MiniDNS はポート 5354 で動く、Customer Facing DNS へのゾーン転送や notify を送るためだけの必要最小限な DNS 実装である (たぶん)。


$ dig -p 5354 @10.200.19.40 www.example.net. a +short
192.168.1.1

動いてそうだ。次は Customer Facing DNS の BIND に問合せてみる。


$ for i in 10.200.19.41 10.200.19.42; do \
    dig @$i www.example.net. a +short; done
192.168.1.1
192.168.1.1

こちらも動いてそうだ。

まとめ

OpenStack Designate の検証環境を構築し、動作を確認した。今後は以下のようなことを検証したい。

参考ページ

コメント

コメントする




CAPTCHA