DNSサーバをいろいろ試しているところ。
PowerDNSはバックエンドにRDBMSなどを使えるDNSサーバ。
今回はMySQL5.1で試す。OSはubuntu9.10。
PowerDNS 2.9.22, Django 1.2.5.
MySQLをインストール。
$ sudo aptitude install mysql-server
PowerDNSをインストール。
$ sudo aptitude install pdns-server
PowerDNSのMySQLバックエンドをインストール。
$ sudo aptitude install pdns-backend-mysql
MySQLにPowerDNS用のデータベースを作る
今回はDjangoも使うのでdefault character setも指定。powerdnsという名前のデータベース。
mysql> create database powerdns default character set utf8; Query OK, 1 row affected (0.00 sec)
データベースにPowerDNS用のテーブルを作る
PowerDNS用のテーブルはdjango-powerdnsの設定で作成されるので省略。
あえて書くとすれば、次のようになる。
PowerDNSより。
pdnsというユーザにデータベースのアクセス許可を与えている。
また、Djangoから扱うのでsupermastersにも主キーを追加している。
use powerdns; 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) )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 ( id INT auto_increment, ip VARCHAR(25) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) DEFAULT NULL, primary key (id) )type=InnoDB; GRANT ALL ON powerdns.* TO pdns;
PowerDNSでMySQLバックエンドを使うように設定する
/etc/powerdns/pdns.conf を編集。
launch=gmysql
を追加。
/etc/powerdns/pdns.local を編集。
gmysql-host=127.0.0.1 gmysql-user=pdns gmysql-dbname=powerdns gmysql-password=
を追加。パスワードが空なら gmysql-password の行は省略してもよいみたい。
PowerDNSを再起動
$ sudo /etc/init.d/pdns restart
これで起動するはず。
PowerDNSの状態を確認
pdns_controlというコマンドで動作中のPowerDNSを操作できるようだ。
$ sudo -u pdns pdns_control status 3827: Child running on pid 3829
ではdjango-powerdnsを動かしてみよう。
setuptools(easy_install)を使えるようにする
$ sudo aptitude install python-setuptools
python-mysqldbをインストール
$ sudo aptitude install python-mysqldb
Djangoをインストール
$ sudo easy_install django==1.2.5
django-powerdnsをインストール
peternixon / django-powerdns / wiki / Home — Bitbucket
$ sudo easy_install django-powerdns
djangoのプロジェクトを作成
$ django-admin.py startproject mypowerdns
settings.pyを編集
作成したプロジェクトの mypowerdns/settings.py を編集。
タイムゾーンをAsia/Tokyoに。
TIME_ZONE = 'Asia/Tokyo'
言語を日本語に。
LANGUAGE_CODE = 'ja'
データベースをmysqlに。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'powerdns', # Or path to database file if using sqlite3. 'USER': 'pdns', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } }
INSTALLED_APPSにadminとpowerdnsを追加。
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.admin', # added 'powerdns', # added )
管理画面のURLを有効にする
mypowerdns/urls.pyを編集。
from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), )
Djangoの開発サーバの起動
$ python manage.py runserver Validating models... 0 errors found Django version 1.2.5, using settings 'mypowerdns.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
ログインしてみる
ブラウザで http://127.0.0.1:8000/admin/ へアクセス。
作成しておいた管理者アカウントでログイン。
ドメインを追加する
Domainsの「追加」からドメインを追加する。
今回はexample.comで作成。
レコードを追加する
Recordsの「追加」からレコードを追加する。
Aレコードでtest.example.comに対して192.168.11.123を設定してみる。
動作確認
nslookupで確認
$ nslookup > server localhost Default server: localhost Address: 127.0.0.1#53 > test.example.com Server: localhost Address: 127.0.0.1#53 Name: test.example.com Address: 192.168.11.123
おしまい。