DNSサーバを探してて、dnsmasqとか出てきて調べようかなぁとか思ったら、同僚から、MyDSNってのを、DeNAで使っているらしいと聞いたので。
で、DeNA 技師のメモ(id:tokiharuさん)のblogに、DBマガジンの6月号に、MyDNSについて書いているとのことなので、読んでみてやってみた。ちょうど使いたい用途も同じでした。
インストール
Debianのパッケージがあったので、
% apt-get install mydns-common mydns-mysql
を実行して、いくつか設定に関する質問に答えて終わり。
Debianの場合(?)、既にテーブルとか作られちゃってるので、後はテーブルにデータを入れるだけ。
テーブル構造
SOAテーブル
+---------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | | PRI | NULL | auto_increment | | origin | char(255) | | UNI | | | | ns | char(255) | | | | | | mbox | char(255) | | | | | | serial | int(10) unsigned | | | 1 | | | refresh | int(10) unsigned | | | 28800 | | | retry | int(10) unsigned | | | 7200 | | | expire | int(10) unsigned | | | 604800 | | | minimum | int(10) unsigned | | | 86400 | | | ttl | int(10) unsigned | | | 86400 | | +---------+------------------+------+-----+---------+----------------+
rr テーブル
+-------+---------------------------------------------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------------------------------------------------------------+------+-----+---------+----------------+ | id | int(10) unsigned | | PRI | NULL | auto_increment | | zone | int(10) unsigned | | MUL | 0 | | | name | char(64) | | | | | | type | enum('A','AAAA','ALIAS','CNAME','HINFO','MX','NS','PTR','RP','SRV','TXT') | YES | | NULL | | | data | char(128) | | | | | | aux | int(10) unsigned | | | 0 | | | ttl | int(10) unsigned | | | 86400 | | +-------+---------------------------------------------------------------------------+------+-----+---------+----------------+
zone は、soa テーブルのIDと対応します。
soa の id 1 が "example.com" であれば、rr zone 1 の name "hoge" は、hoge.example.com についてのデータです。
create tableのSQLは、コマンドオプションで見れますので、自分で作るのも、作りなおすのも簡単。
% mydns --create-tables | mysql mydns
データのインサート
insert into soa (origin, ns) values ('rwds.net.local.', 'ns1.rwds.net.local'); insert into rr (zone, name, type, data) values(1, 'cat', 'A', '127.0.0.1'); insert into rr (zone, name, type, data) values(1, 'dog', 'A', '127.0.0.2');
これで、
cat.rwds.net.local
dog.rwds.net.local
のできあがり。
テスト
% host cat.rwds.net.local 127.0.0.1 Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: cat.rwds.net.local has address 127.0.0.1
問題なし。簡単ですねぇ。
tinydnsからの移行
tinydns を使っている場合、移行が簡単にできます。
% mydnsimport -t /service/tinydns/root/data
これだけ。
ですが、なんか微妙に足りてない...サブドメイン無しがひけない。
tinydnsの設定が悪いのか?
設定ファイル
/etc/mydns.confにあります。
Listen のIPの指定くらいしか試してません。
listen = 127.0.0.1 # Listen on these addresses ('*' for all)
いいとこ
Databaseで管理できるので非常に簡単ですね。SQL使えるのはいい感じです。負荷分散に使うには、DBマガジン6月号の記事内にあるパッチを使わなければいけませんが、そちらはまだ試してません。
詳しいドキュメントは、下記。
http://mydns.bboy.net/doc/html/index.html#SEC_Top