2008年8月6日水曜日

PowerDNSでのMySQL設定

スズキです。

PowerDNSをOpenLDAPのバックエンドで運用しようといたのですが、
私のOpenLDAPに対するスキル不足で、MySQLバックエンドでの運用に
切り替えました。
http://suz-lab.blogspot.com/2008/08/powerdns.html

まずは設定ファイル(/etc/pdns/pdns.conf)です。
下記のように、launchを設定して、mysqlのデータベース名と
接続先ホストを指定します。

launch=gmysql
gmysql-dbname=powerdns_internal
gmysql-host=db.localdomain

次にMySQL側ですが、デフォルトで、powerdnsユーザーで接続するので、
このユーザーを作成します。そしてこのユーザーが見れるデータベースとして、
powerdns_internalデータベースを作成します。
(デフォルトのデータベースはpowerdnsです)

そのあと、このデータベースに対して、下記SQLを実行して
テーブル群を作成します。

CREATE TABLE domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
) type=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id),
CONSTRAINT `records_ibfk_1`
FOREIGN KEY (`domain_id`)
REFERENCES `domains` (`id`)
ON DELETE CASCADE
) type=InnoDB;

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);

最後に下記SQLにてDNSレコードを追加して終了です。

INSERT INTO domains (name, type)
VALUES ('localdomain', 'NATIVE');

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'localdomain', 'ns.localdomain postmaster@localdomain 1',
'SOA', 60, NULL);

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'localdomain', 'ns.localdomain', 'NS', 60, NULL);

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'localdomain', 'mail.localdomain', 'MX', 60, 0);

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'ns.localdomain', '192.168.3.58', 'A', 60, NULL);

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'mail.localdomain', '192.168.3.59', 'A', 60, NULL);

INSERT INTO records (domain_id, name, content, type, ttl, prio)
VALUES (1, 'www.localdomain', '192.168.3.58', 'A', 60, NULL);

これで、nslookupなどで名前が引けるはずです。
(入力データがまだあまいと思いますが、その辺は実験しながらということで)

次はSquidのDNSラウンドロビンだ!
(Squidの設定は終わってるつもりだけど...)

--
http://suz-lab.blogspot.com/

0 コメント: