序章

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アドレスを指すグルーレコードが必要です。

ステップ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ユーザーのパスワードを設定するように求められます。

Enter a root database password

データベースrootユーザーの強力なパスワードを入力し、Enterキーを押してください。

Enter the same root database password

新しいパスワードの確認を求められます。 パスワードをもう一度入力し、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バックエンドを構成するように求められます。 このプロセスはすぐに手動で実行するため、矢印キーを使用して選択します 、Enterキーを押して、インストールを終了します。

Select <No>

ステップ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/

Select your preferred language

ご希望の言語を選択し、手順2ボタンをクリックしてください。

Read this information

ステップ2ページには、特にPoweradminの複数のインストールについて、いくつかの貴重な情報があります。 この情報は、このチュートリアルには直接適用されません。 ページを読み終えたら、手順3ボタンをクリックします。

Enter the database connection information and create a new password as explained below

インストール手順3ページで、次の情報を入力する必要があります。

  • ユーザー名 powerdns_user 、またはMariaDB用に作成したユーザー名
  • パスワード powerdns_user_password 、以前に作成したデータベースパスワード
  • データベースタイプ:ドロップダウンメニューからMySQLを選択します。 MariaDBはMySQLのように機能することを忘れないでください
  • ホスト名:ローカルホストから接続しているため、 127.0.0.1
  • DBポート 3306 ; デフォルトのままにします
  • データベース powerdns 、または以前に作成したデータベース名
  • Poweradmin管理者パスワード:後でPoweradminコントロールパネルにログインするために使用する一意のパスワードを設定してください。 ユーザー名はadminになります

手順4に進むボタンをクリックします。

Enter the database and nameserver details as explained below

インストール手順4ページでは、利便性とセキュリティのどちらかを選択できます。 同じデータベース設定を再利用することも、Poweradmin用の新しい特権の少ないデータベースユーザーを作成することもできます。 この例は、同じデータベースユーザー設定を示しています。 ネームサーバードメインも選択します。

  • ユーザー名:新規または既存のデータベースユーザーを使用します。 この場合、powerdns_userを使用しています
  • パスワード:新しいパスワードを設定するか、powerdns_user_passwordの既存のデータベースパスワードを使用します
  • Hostmaster hostmaster.example-dns.comなどのデフォルトのホストマスターを設定します
  • プライマリネームサーバーns1.example-dns.comなどのプライマリネームサーバーを設定します
  • セカンダリネームサーバーns2.example-dns.comなどのセカンダリネームサーバーを設定します

手順5に進むボタンをクリックします。

If you created a new user, add the new database user with the command shown on the page, starting with GRANT

データベース情報が正しいことを確認してください。 新しいユーザーとパスワードを作成することを選択した場合は、MariaDBデータベースにログインし、画面に表示されているコードブロックをコピーして貼り付け、GRANTで始まる新しいユーザーを追加する必要があります。 次に、手順6ボタンをクリックします。

The installer was able to write to the file "../inc/config.inc.php" . . .

次のようなメッセージが表示されますインストーラーはファイル「…/inc/config.inc.php」に書き込むことができました。 。 。 。 構成ファイルへの書き込みに問題がある場合は、インストールプロセス中にステップを逃したことを意味します。

この手順が失敗した場合、サーバーに戻ってファイルを作成します。

touch /var/www/html/poweradmin/inc/config.inc.php

次に、ページを更新して、インストールプロセスを再開します。

それ以外の場合は、手順7ボタンをクリックしてインストールを終了してください。

Now we have finished the configuration . . .

ユーザー名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 login page

構成中に設定した資格情報を使用して、Poweradminコントロールパネルにログインします。 ユーザー名はadminで、パスワードはインストール手順3Poweradmin管理者パスワードです。

Poweradmin home page

マスターゾーンの追加リンクをクリックします。

ゾーン名フィールドにドメイン名を入力します。 このドメインは、ゾーンファイルをホストするドメインである必要があります。 他のすべての設定は、デフォルトのエントリのままにしておくことができます。 ゾーンの追加ボタンをクリックします。

トップメニューからゾーン一覧リンクをクリックします。

Add Master Zone page

ゾーンエントリの左側にある小さな鉛筆のようなゾーンファイルの編集ボタンをクリックします。

List zones page

ドメインのDNSレコードを追加します。

Add a record page

  • 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としてこれらのネームサーバーを選択する必要があります。

ドメインの構成についてサポートが必要な場合は、以下のチュートリアルが開始に役立ちます。 レジストラからの指示を確認する必要がある場合もあります。