Ubuntu14.04でMariaDBバックエンドを使用してPowerDNSをインストールおよび構成する方法
序章
PowerDNSは、多くのバックエンドと互換性のある、高度で高性能な信頼できるネームサーバーです。 PowerDNSは、BIND構成ファイルを使用し、MariaDB、MySQL、Oracle、PostgreSQL、およびその他の多くのデータベースから情報を読み取ることができます。 バックエンドはどの言語でも簡単に書くことができます。 この場合、MariaDBを使用してゾーンファイルレコードを保存します。
MariaDBは、リレーショナルデータベース管理システムであるMySQLのフォークです。 主要なオープンソースソフトウェアシステムのフォークであるため、元の開発者が主導していることは注目に値します。 MariaDBは、MySQLAPIおよびコマンドによる完全なドロップイン置換機能を保持しています。
このチュートリアルを終了すると、任意の数のドメインのDNSをホストするために使用できるPowerDNSネームサーバーが機能するようになります。
前提条件
チュートリアルを開始する前に、これらの前提条件に従ってください。
液滴の要件
- 512MBドロップレット以上
- Ubuntu14.0464ビット
PowerDNSは、パフォーマンスが高く、リソース使用量が少ないように設計されています。 適度な量のゾーン/レコードでPowerDNSサーバーを実行するには、512MBのドロップレットで十分です。 このドロップレットはUbuntu14.0464ビットを実行します。
ルートアクセス
このチュートリアルの残りの部分では、 root ユーザーアカウント、またはsudo権限を持つユーザーアカウントでサーバーに接続していることを前提としています。
別のアカウントからrootシェルに入るには:
sudo su
ネームサーバーを登録し、他のドメインのネームサーバーを設定する
技術的な設定の前または後にこれを行うことができますが、新しいネームサーバーが実際のDNSリクエストを処理できるようにするには、グルーレコードを使用して、ネームサーバードメインまたはサブドメインをレジストラでネームサーバーとして登録する必要があります。 接着剤レコードについては、以下にリンクされているチュートリアルで説明されていますが、レジストラでネームサーバーを登録したり、接着剤レコードを作成したりするプロセスを調べることをお勧めします。
注: DNSサーバーを設定するときは、ドメイン名をまっすぐに保つのに役立ちます。 ほとんどの場合、ネームサーバー自体で使用する3つのサブドメインを選択します。 このチュートリアルでは、 hostmaster.example-dns.com 、 ns1.example-dns.com 、およびns2.example-dns.comを使用します。
このネームサーバーをSOAとして使用するドメインも紹介します。 このチュートリアルでは、新しいPowerDNSネームサーバーにexample.comのゾーンファイルを設定します。
このチュートリアルでは、例として次のドメイン名を使用します。
これらの3つのサブドメインには、PowerDNSDropletのIPアドレスを指すグルーレコードが必要です。
-
次に、example.comのネームサーバーを上記の3つのネームサーバーに設定する必要があります
ステップ1—アップデートをインストールする
最新のアップデートがインストールされていることを確認することは常に良い考えです。
アップデートのインストール:
apt-get update && apt-get upgrade -y
ステップ2—MariaDBをインストールします
まず、MariaDBリポジトリのキーをインポートします。
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
次に、MariaDBAPTリポジトリを追加します。
add-apt-repository 'deb http://ftp.kaist.ac.kr/mariadb/repo/5.5/ubuntu trusty main'
これで、 apt-get を使用してMariaDBパッケージと依存関係(主にライブラリ)をインストールできます。
apt-get -y install libaio1 libdbd-mysql-perl libdbi-perl libmariadbclient18 libmysqlclient18 libnet-daemon-perl libplrpc-perl mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mysql-common mariadb-server mariadb-server-5.5 mariadb-server-core-5.5
インストール中に、MariaDB rootユーザーのパスワードを設定するように求められます。
データベースrootユーザーの強力なパスワードを入力し、Enterキーを押してください。
新しいパスワードの確認を求められます。 パスワードをもう一度入力し、Enterキーを押してセットアッププロセスを終了します。
ステップ3—MariaDBを保護および構成する
デフォルトでは、MariaDBは匿名ユーザーとリモートクライアントからのrootアクセスを許可します。 安全なインストールユーティリティを実行して、これらの機能を無効にします。
この安全なインストールウィザードを実行します。
mysql_secure_installation
MariaDBのセットアップ中に作成したMariaDBrootユーザーパスワードで認証するように求められます。 次に、Enterキーを押して続行します。 エントリは赤で表示されます。
You already have a root password set, so you can safely answer **n**.
Change the root password? [Y/n] n
この例では、rootパスワードを変更したくありません。 ただし、MariaDBのインストール時にパスワードを設定しなかった場合は、今が設定するのに適したタイミングです。 それ以外の場合はNと入力し、Enterキーを押します。
Remove anonymous users? [Y/n]
匿名ユーザーを無効にすることをお勧めします。 ENTERを押して、デフォルトのYの回答を受け入れます。
Disallow root login remotely? [Y/n]
リモートデータベースサーバーの管理にrootを使用しないことをお勧めします。 ENTERを押して、デフォルトのYの回答を受け入れます。
Remove test database and access to it? [Y/n]
MariaDBを試してみたい場合は、テストデータベースを保持できます。 この例では、それを削除することにしました。 ENTERを押して、デフォルトのYの回答を受け入れます。
Reload privilege tables now? [Y/n]
ウィザード内で特権テーブルを再ロードすると、手順を節約できます。 ENTERを押して、デフォルトのYの回答を受け入れます。
次に、InnoDBログファイルのサイズを64MBに増やします。 これは、将来問題をデバッグする必要がある場合に役立ちます。
まず、MariaDBサービスを停止する必要があります。
service mysql stop
既存のログファイルをすべて削除します(これがMariaDBの新規インストールでない場合は、代わりにバックアップすることをお勧めします)。
rm -f /var/lib/mysql/ib_logfile*
nanoで設定ファイルを開きます。
nano /etc/mysql/my.cnf
Ctrlキーを押しながらWキーを押して、ファイルを検索します。 検索フィールドにInnoDBと入力し、Enterキーを押して続行します。 構成ファイルのInnoDB部分に移動します。 以下の赤で強調表示されている行を追加する必要があります。
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_log_file_size = 64M
#
# * Security Features
CTRL + Xを押し、Yを押してファイルを保存し、ENTERを押して上書きします。
最後に、MariaDBサービスを再度開始します。
service mysql start
起動スクリプトがステータス[OK]を返す場合、ログファイルのサイズは正常に更新されており、次のセクションに進む準備ができています。
ステップ4—MariaDBでPowerDNSデータベースとユーザーアカウントを作成する
このセクションとチュートリアルの残りの部分では、「powerdns」や「powerdns_user」などの推奨名を使用します。 独自のデータベース名とデータベースユーザー名を自由に置き換えて、更新された名前を全体で使用するようにしてください。
必ずパスワードを変更してください。 赤で強調表示されているテキストは、必ず自分の情報に置き換えてください。
注: ; で行を終了するまで、MySQLシェルはコマンドを処理しません。 テーブルコマンドが複数の行を使用していることに気付くでしょう。 これは正常です。
まず、MariaDB rootユーザーで認証します。
mysql -u root -p
root データベースパスワードを入力し、Enterキーを押してデータベースサーバーにアクセスします。
データベースを作成します。 任意の名前を使用できますが、powerdnsを使用します。
CREATE DATABASE powerdns;
「powerdns_user」という名前の新しいユーザーを作成し、データベースへのアクセスを許可します。 powerdns_user_passwordを一意のパスワードに置き換える必要があります。
GRANT ALL ON powerdns.* TO 'powerdns_user'@'localhost' IDENTIFIED BY 'powerdns_user_password';
ユーザー設定を更新するための特権をフラッシュします。
FLUSH PRIVILEGES;
新しいpowerdnsデータベースを使用します。
USE powerdns;
次に、PowerDNSがゾーンファイルエントリを保存するために使用できるテーブルをデータベースに追加します。
domainsテーブルを作成します。
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)
);
一意のインデックスを設定します。
CREATE UNIQUE INDEX name_index ON domains(name);
recordsテーブルを作成します。
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)
);
インデックスを設定します。
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
supermastersテーブルを作成します。
CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
これで、MySQLシェルを終了できます。
quit;
ステップ5—PowerDNSをインストールする
前述のように、MariaDBはMySQLのドロップイン代替品です。 そこで、メインのPowerDNSモジュールと、対応するMySQLバックエンドモジュールをインストールします。
PowerDNSをインストールします。
apt-get install -y pdns-server pdns-backend-mysql
注: mysql-client に関する依存関係エラーが表示された場合、次のコマンドは競合するパッケージを削除し、PowerDNSパッケージのインストールを強制します。
apt-get -f purge -y mysql-client
MySQLバックエンドを構成するように求められます。 このプロセスはすぐに手動で実行するため、矢印キーを使用して選択します
ステップ6—PowerDNSを設定する
新しいデータベースを使用するようにPowerDNSを構成する必要があります。
まず、既存の構成ファイルを削除します。
rm /etc/powerdns/pdns.d/*
これで、MariaDB構成ファイルを作成できます。
nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf
次のデータをファイルに入力します。 gmysql-dbname 、 gmysql-user 、特にgmysql-passwordの独自のデータベース設定を追加することを忘れないでください。
# MySQL Configuration file
launch=gmysql
gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=powerdns_user
gmysql-password=powerdns_user_password
PowerDNSを再起動して、変更を適用します。
service pdns restart
ステップ7—PowerDNSをテストする
これらの手順は、PowerDNSがインストールされ、データベースに接続できることを確認するための適切な健全性チェックです。 次のテストに合格しない場合は、データベース構成に問題があります。 手順4と6を繰り返して、問題を解決します。
PowerDNSがリッスンしているかどうかを確認します。
netstat -tap | grep pdns
次のような出力が表示されます。
root@ns1:~# netstat -tap | grep pdns
tcp 0 0 *:domain *:* LISTEN 5525/pdns_server-in
PowerDNSが正しく応答するかどうかを確認します。
dig @127.0.0.1
次のような出力が表示されます。
root@ns1:~# dig @127.0.0.1
; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27248
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;. IN NS
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 18:58:20 EST 2014
;; MSG SIZE rcvd: 29
すべてチェックアウトしましたか? 素晴らしい! 続けましょう。
ステップ8—Poweradminをインストールします
Poweradminは、PowerDNS用のWebベースのDNS管理ツールです。 すべてのゾーンタイプ(マスター、ネイティブ、およびスレーブ)を完全にサポートします。 スレーブゾーンの自動プロビジョニングを完全にスーパーマスターでサポートし、IPv6を完全にサポートし、複数の言語をサポートします。 詳細については、機能リストをご覧ください。
ApacheとPoweradminに必要な依存関係をインストールします。
apt-get install -y apache2 gettext libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php-pear php5-imap php5-ming php5-mysql php5-xmlrpc php5-mhash php5-mcrypt
必要なPEARモジュールをインストールします。
pear install DB
pear install pear/MDB2#mysql
Mcryptを有効にする:
php5enmod mcrypt
Apacheを再起動して、変更を適用します。
service apache2 restart
ホームディレクトリに移動します。
cd ~
圧縮されたPoweradminファイルをダウンロードします。
wget https://github.com/downloads/poweradmin/poweradmin/poweradmin-2.1.6.tgz
アーカイブを抽出します。
tar xvzf poweradmin-2.1.6.tgz
poweradmin
ディレクトリをApacheWebディレクトリに移動します。
mv poweradmin-2.1.6 /var/www/html/poweradmin
構成ファイルを作成します。
touch /var/www/html/poweradmin/inc/config.inc.php
Apacheユーザーにディレクトリの所有権を与えます。
chown -R www-data:www-data /var/www/html/poweradmin/
手順9—Poweradminを構成する
Poweradminのインストールを完了するには、Webベースの構成ウィザードを使用します。
Webブラウザーを開き、以下のURLにアクセスして、独自のIPアドレスまたはサーバーのホスト名に置き換えます。
http://your_server_ip/poweradmin/install/
ご希望の言語を選択し、手順2ボタンをクリックしてください。
ステップ2ページには、特にPoweradminの複数のインストールについて、いくつかの貴重な情報があります。 この情報は、このチュートリアルには直接適用されません。 ページを読み終えたら、手順3ボタンをクリックします。
インストール手順3ページで、次の情報を入力する必要があります。
- ユーザー名: powerdns_user 、またはMariaDB用に作成したユーザー名
- パスワード: powerdns_user_password 、以前に作成したデータベースパスワード
- データベースタイプ:ドロップダウンメニューからMySQLを選択します。 MariaDBはMySQLのように機能することを忘れないでください
- ホスト名:ローカルホストから接続しているため、 127.0.0.1
- DBポート: 3306 ; デフォルトのままにします
- データベース: powerdns 、または以前に作成したデータベース名
- Poweradmin管理者パスワード:後でPoweradminコントロールパネルにログインするために使用する一意のパスワードを設定してください。 ユーザー名はadminになります
手順4に進むボタンをクリックします。
インストール手順4ページでは、利便性とセキュリティのどちらかを選択できます。 同じデータベース設定を再利用することも、Poweradmin用の新しい特権の少ないデータベースユーザーを作成することもできます。 この例は、同じデータベースユーザー設定を示しています。 ネームサーバードメインも選択します。
- ユーザー名:新規または既存のデータベースユーザーを使用します。 この場合、
powerdns_user
を使用しています - パスワード:新しいパスワードを設定するか、powerdns_user_passwordの既存のデータベースパスワードを使用します
- Hostmaster :hostmaster.example-dns.comなどのデフォルトのホストマスターを設定します
- プライマリネームサーバー:ns1.example-dns.comなどのプライマリネームサーバーを設定します
- セカンダリネームサーバー:ns2.example-dns.comなどのセカンダリネームサーバーを設定します
手順5に進むボタンをクリックします。
データベース情報が正しいことを確認してください。 新しいユーザーとパスワードを作成することを選択した場合は、MariaDBデータベースにログインし、画面に表示されているコードブロックをコピーして貼り付け、GRANTで始まる新しいユーザーを追加する必要があります。 次に、手順6ボタンをクリックします。
次のようなメッセージが表示されます
この手順が失敗した場合、サーバーに戻ってファイルを作成します。
touch /var/www/html/poweradmin/inc/config.inc.php
次に、ページを更新して、インストールプロセスを再開します。
それ以外の場合は、手順7ボタンをクリックしてインストールを終了してください。
ユーザー名adminとPoweradminコントロールパネルのパスワードが与えられます。
Poweradminの構成はこれで完了です。
クリーンアップするには、サーバーに戻り、インストールディレクトリを削除します。 Poweradminでは、ログインする前にこれを行う必要があります。
rm -rf /var/www/html/poweradmin/install/
Poweradmin構成の変更
インストールの完了後にPoweradmin設定を変更する必要がある場合は、次のファイルを編集します。
nano /var/www/html/poweradmin/inc/config.inc.php
ここで、Poweradminのデータベース接続設定およびその他の構成設定を更新できます。
ステップ10—最初のDNSレコードを作成する
Poweradminコントロールパネルにアクセスします。
http://your_server_ip/poweradmin/
構成中に設定した資格情報を使用して、Poweradminコントロールパネルにログインします。 ユーザー名はadminで、パスワードはインストール手順3のPoweradmin管理者パスワードです。
マスターゾーンの追加リンクをクリックします。
ゾーン名フィールドにドメイン名を入力します。 このドメインは、ゾーンファイルをホストするドメインである必要があります。 他のすべての設定は、デフォルトのエントリのままにしておくことができます。 ゾーンの追加ボタンをクリックします。
トップメニューからゾーン一覧リンクをクリックします。
ゾーンエントリの左側にある小さな鉛筆のようなゾーンファイルの編集ボタンをクリックします。
ドメインのDNSレコードを追加します。
- Name フィールドにサブドメインを追加するか、プライマリドメインの場合は空白のままにすることができます。
- ドロップダウンメニューからタイプのレコードを選択します。
- コンテンツフィールドにIPアドレス、ドメイン名、またはその他のエントリを追加します。
- 必要に応じて優先度を設定してください。
- TTLを秒単位で設定します。
レコードの追加ボタンをクリックします。
レコードを追加するか、ゾーンの一覧表示ページとドメインの編集ボタンに戻って、そのドメインの現在のすべてのレコードを表示できます。
このレコードが実際に機能するには、次のことを行う必要があることに注意してください。
- ネームサーバードメインをグルーレコードに登録する
- このドメインのネームサーバーを新しいPowerDNSネームサーバードメインに設定します
- 伝播を待つ
ただし、レコードがローカルですぐに正しいことを確認できます。
ステップ11—DNSレコードをテストする
注:example.comを独自のドメインまたはサブドメインレコードに置き換えてください。
サーバーで、ドメインのレコードを検索します。
dig example.com A @127.0.0.1
次のような出力が表示されます。
root@ns1:~# dig example.com A @127.0.0.1
; <<>> DiG 9.9.5-3-Ubuntu <<>> example.com A @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20517
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 86400 IN A 104.131.174.136
;; Query time: 4 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Nov 02 19:14:48 EST 2014
;; MSG SIZE rcvd: 56
複数のゾーンエントリを追加した場合は、他のすべてのレコードも確認できます。
これらが正しければ、これはこのネームサーバーが正しい情報を持っていることを意味します!
ただし、ネームサーバードメインが登録されている、このドメインが新しいネームサーバーをSOAとして使用している、または変更がまだグローバルに伝播しているという意味ではありません。
結論
MariaDBバックエンドを使用してPowerDNSサーバーをセットアップしました。 バックエンドを管理するためにPoweradminコントロールパネルを設定しました。 最初のDNSゾーンを作成し、そのゾーンのAレコードを作成しました。
ここからどこにいきますか
まだ登録していない場合は、ネームサーバーを登録する必要があります。
また、DNSをホストするドメインのSOAとしてこれらのネームサーバーを選択する必要があります。
ドメインの構成についてサポートが必要な場合は、以下のチュートリアルが開始に役立ちます。 レジストラからの指示を確認する必要がある場合もあります。
- DigitalOceanクラウドサーバーを使用してバニティまたはブランドのネームサーバーを作成する方法
- DigitalOceanのDNSパネルを使用してDNSサブドメインを設定およびテストする方法
- 共通ドメインレジストラからDigitalOceanネームサーバーを指定する方法(これらは、DigitalOceanネームサーバーではなくns1.example-dns.comなどに設定する必要があることに注意してください。 )。