前書き

このチュートリアルでは、マスターDNSサーバーからスレーブへの自動レプリケーションを使用して、マスター/スレーブ構成でPowerDNSをセットアップする方法を学習します。 このチュートリアルは、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-on-ubuntu-14-04 [ Ubuntu用のPowerDNS]シリーズ。

マスター/スレーブ構成により、信頼性が向上します。 PowerDNSサーバーの1つがダウンした場合、リクエストを処理するセカンダリサーバーがあります。

これらのサーバーを個別のデータセンターにプロビジョニングすることをお勧めします。 それらが2つの物理的な場所にある場合、データセンターが停止してもDNSサービスには影響しません。

このチュートリアルの終わりまでに、マスター/スレーブレプリケーションを使用する2つの機能的なPowerDNSサーバーが完成します。

前提条件

次の要件を完了してください。

前のチュートリアルでは、3つのサブドメインが単一のPowerDNSサーバーを指すようにしました。 これらのサブドメインのいずれかを使用して、スレーブサーバーを指すようになります。 この例では、* master server IP *は “になり、* slave server IP *は “になります。

それに応じて、プロバイダーでグルーレコードを更新する必要があります。 以下の情報をガイドとして使用してください。 DNSレコードの構成の詳細については、前のPowerDNSチュートリアルを参照してください。

  • * hostmaster.example-dns.com * ++(マス​​ターサーバー)

  • * ns1.example-dns.com * ++(マス​​ターサーバー)

  • * ns2.example-dns.com * ++(スレーブサーバー)

ネームサーバー自体に使用されるドメインのレジストラで、グルーレコードとSOAレコードの両方を設定する必要があることに注意してください。 一方、ゾーンファイルをカスタムネームサーバーでホストする他のドメインのSOAレコードのみが必要です。

ステップ1-両方のサーバーにPowerDNSをインストールします

まず、機能する2つのPowerDNSサーバーが必要です。 1台のサーバーがマスターサーバーになり、2台目のサーバーがスレーブサーバーになります。

まだ行っていない場合は、前のチュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-onに従ってください。 -ubuntu-14-04 [Ubuntu 14.04でMariaDBバックエンドを使用してPowerDNSをインストールおよび構成する方法]。

*マスターサーバー*で完全なチュートリアルに従う必要があります。

セカンダリサーバーでPoweradminは必要ないため、*スレーブサーバー*で手順1〜7のみを実行できます。

2台の機能的なPowerDNSサーバーがあり、少なくとも1台がPoweradminを実行している場合、次の手順に進むことができます。

手順2-マスターサーバーの構成(ns1.example-dns.com)

これで、マスターPowerDNSサーバーを構成する準備ができました。

これは、Poweradminがインストールされているサーバーである必要があり、プライマリDNSサーバー*と見なされます。 両方のサーバーにPoweradminがインストールされている場合は、どちらかを使用できます。 この例に従う場合、これは ns1.example-dns.com *になります。

元の構成ファイルをバックアップします。

cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig

新しい構成ファイルを作成します。

sudo nano pdns.conf

以下の詳細は、単一のスレーブサーバーを使用した標準のマスターサーバー構成です。 スレーブサーバーのIPアドレスを入力して、このマスターサーバーと通信できるようにします。 以下の独自の*スレーブサーバーIPアドレス*を忘れずに置き換えてください。

注意:/ 32は単一のIPサブネットであり、この構成に必要です。

/etc/powerdns/pdns.conf

allow-recursion=0.0.0.0/0
allow-axfr-ips=/32
config-dir=/etc/powerdns
daemon=yes
disable-axfr=no
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=yes
slave=no
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d

PowerDNSサービスを再起動して、変更を有効にします。

sudo service pdns restart

手順3-スレーブサーバーの構成(ns2.example-dns.com)

これで、スレーブサーバー*を設定する準備ができました。 このサーバーは、設定したマスターサーバーからDNSゾーンを複製します。 例に沿ってフォローしている場合、これは ns2.example-dns.com *になります。

元の構成ファイルをバックアップします。

cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig

新しい構成ファイルを作成します。

sudo nano pdns.conf

以下の詳細は、60秒の更新間隔での標準スレーブサーバー構成のものです。 構成を正確にコピーできます。

/etc/powerdns/pdns.conf

allow-recursion=0.0.0.0/0
config-dir=/etc/powerdns
daemon=yes
disable-axfr=yes
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=no
slave=yes
slave-cycle-interval=60
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d

60秒ごとに、スレーブサーバーはマスターサーバーにゾーンの更新を照会します。 通常、ゾーンが更新されると、マスターサーバーはそのゾーンに割り当てられたスレーブサーバーに通知を送信します。 ただし、ゾーンの更新中に接続の問題が発生した場合、これにより、スレーブサーバーが再びオンラインになったときに最終的に更新がスレーブサーバーに伝播することが保証されます。

次に、マスターサーバーとの通信方法をPowerDNSに指示する必要があります。

前のチュートリアルで作成したPowerDNSユーザー名とパスワードを使用してMariaDBにログインします。 この例では、「+ powerdns_user +」を使用しました。

mysql -u  -p

プロンプトでパスワードを入力します。

OutputEnter password:

前のチュートリアルで構成したPowerDNSデータベースに変更します。 推奨は「+ powerdns +」でした。

USE powerdns;

次に、 `+ super master`テーブルに新しい行を作成します。 この行は、マスターサーバーのIP *アドレスと、現在構成しているスレーブサーバーの完全修飾ドメイン名(FQDN)*を指定します。

insert into supermasters values ('', '', 'admin');

MariaDBシェルを終了できます。

exit;

PowerDNSサービスを再起動して、変更を有効にします。

sudo service pdns restart

ステップ4-マスター/スレーブ接続のテスト

この手順では、* ns1.example-dns.com がマスターサーバーを指し、 ns2.example-dns.com *がスレーブサーバーを指している必要があります。

グルーレコード、SOAレコード、およびAレコードがまだ伝達されていない場合は、 `+ / etc / hosts +`ファイルにオーバーライドを追加できます。 これは*両方のサーバー*で行いたいでしょう。

nanoを使用して `+ / etc / hosts +`を開きます。

sudo nano /etc/hosts

`+ / etc / hosts +`ファイルにエントリを追加します。

/ etc / hosts

2つのサーバーがすぐに通信できることを確認しましょう。

*マスターサーバー*から、両方のホスト名をpingします。

ping ns1.example-dns.com

結果は次のようになります。

Output64 bytes from ns1.example-dns.com (111.111.111.111): icmp_seq=1 ttl=64 time=0.061 ms

スレーブサーバーにpingを実行します。

ping ns2.example-dns.com

期待される結果:

Output64 bytes from ns2.example-dns.com (222.222.222.222): icmp_seq=1 ttl=64 time=48.8 ms

次に、同じコマンドを使用して、*スレーブサーバー*から両方のホスト名をpingします。 両方のサーバーから両方のサーバーにpingできるようになったら、続行します。

手順5-レプリケーションでDNSゾーンを構成する

両方のサーバーが適切に通信している場合、マスター/スレーブ複製を使用して最初のDNSゾーンを作成する準備ができています。

ブラウザで `+ http:/// poweradmin / +`にアクセスして、マスターサーバーのPoweradminにログインします。

image:https://assets.digitalocean.com/articles/poweradmin-slave/SMepFsRh.png [Poweradminログイン画面]

前に設定した管理者資格情報でログインします。

[マスターゾーンの追加]リンクをクリックして、新しいゾーンファイルを作成します。 これは、元の名前または新しいドメイン* test.com *でテストできます。

image:https://assets.digitalocean.com/articles/poweradmin-slave/AVTowJ0h.png [マスターゾーンの追加リンクをクリック]

トップレベルドメイン名を入力し、[ゾーンの追加]ボタンをクリックしてゾーンを作成します。

image:https://assets.digitalocean.com/articles/poweradmin-slave/DLbU5kMh.png [ゾーン名フィールドにドメイン名を入力]

ネームサーバーの* NS *エントリを作成します。

  • * hostmaster.example-dns.com *

  • * ns1.example-dns.com *

  • * ns2.example-dns.com *

レプリケーションをテストするには、少なくとも1つの* A *レコードを作成します。

image:https://assets.digitalocean.com/articles/poweradmin-slave/ftZDoc7h.png [NSおよびAレコードを追加]

注意:スレーブサーバーがゾーンのネームサーバーとしてリストされていない場合、ゾーンは複製されません。

数秒後、新しいエントリがスレーブサーバーに伝達されます。

`+ dig +`を使用して* ns1.example-dns.com *に保存されたDNSレコードをテストします。

dig  A @

次のような結果で応答するはずです。

[email protected]:/etc/powerdns# dig test.com A @ns1.example-dns.com

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns1.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44833
;; 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:
;test.com.                      IN      A

;; ANSWER SECTION:


;; Query time: 2 msec
;; SERVER: 45.55.217.94#53(45.55.217.94)
;; WHEN: Tue Apr 28 18:06:54 EDT 2015
;; MSG SIZE  rcvd: 53

`+ dig +`を使用して、* ns2.example-dns.com *に保存されたDNSレコードをテストします。

dig  A @

次のような結果で応答するはずです。

[email protected]:/etc/powerdns# dig test.com A @ns2.example-dns.com

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns2.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11530
;; 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:
;test.com.                      IN      A

;; ANSWER SECTION:


;; Query time: 3 msec
;; SERVER: 45.55.217.132#53(45.55.217.132)
;; WHEN: Tue Apr 28 18:08:06 EDT 2015
;; MSG SIZE  rcvd: 53
  • test.com の設定は、レジストラでネームサーバーを ns1.example-dns.com および ns2.example-dns.com *に設定した後にのみアクティブになることに注意してください。

結論

これで、マスター/スレーブ構成でMariaDBバックエンドを使用する2つの機能的なPowerDNSサーバーができました。

マスターサーバー上のマスターゾーンに変更が加えられるたびに、独自の* NS *レコードでリストされたスレーブサーバーに通知します。

スレーブサーバーは、最近更新されていないレコードについてマスターサーバーに自動的にクエリを実行し、PowerDNSノード間でDNSレコードの同期を維持します。