ウェブサイト検索

RHEL/CentOS 6.5 の「バインド」ツールを使用してマスター/スレーブ DNS サーバーをセットアップする


任意のホストへの名前解決に使用されるドメイン ネーム サーバー (DNS)。マスター DNS サーバー (プライマリ サーバー) は元のゾーン データ ハンドラーであり、スレーブ DNS サーバー (セカンダリ サーバー) は、同じゾーン情報をコピーするために使用される単なるバックアップ サーバーです。マスターサーバー。マスターサーバーは、ゾーンデータベースで定義したすべてのホストの名前を解決し、UDP プロトコルを使用します。これは、TCP が確認応答を使用する一方で、UDP プロトコルは確認応答プロセスを使用しないためです。 DNS サーバーは、クエリ要求をできるだけ早く解決するために UDP プロトコルも使用します。

DNS はどのように機能するのか?

DNS を理解することは、初心者にとっては少しわかりにくいかもしれません。ここでは、DNS の仕組みについて簡単に説明します。

たとえば、Web サイトにアクセスする必要がある場合、どうすればよいでしょうか?ブラウザに「www.google.com」と入力して Enter キーを押すだけです。うーん、私たちが知っているのはこれだけですが、実際には、DNS が私たちに代わってクエリを実行するときに、どれほど苦労するかということです。 www.google.com と入力すると、システムは www.google.com を検索します。ドメイン名を入力すると、www.google.com の末尾に . (ドット) が表示され、名前空間のルート サーバーを検索するように指示されます。

クエリを解決するために利用できるルート サーバーは世界中で 13 台あります。まず、www.google.com として Enter キーを押している間、ブラウザはマスターおよびスレーブ DNS サーバー情報に関するエントリを含むリクエストをローカル リゾルバーに渡します。そのようなリクエストされたクエリに関する情報がない場合、トップ レベル ドメイン (TLD) にリクエストが渡されます。TLD がリクエストを知らないと言っている場合は、権威サーバーがあなたのリクエストを知っている可能性があります。リクエストを送信すると、権限のあるサーバーに転送されます。ここでは www.google.com のみがアドレス 72.36.15.56 として定義されています。

その間に、権限のあるサーバーが TLD に応答を返し、TLD がルート サーバーに渡され、ルートがブラウザに情報を提供するため、ブラウザは将来の使用に備えて DNS リクエストをキャッシュします。したがって、これらの長いプロセスはミリ秒以内に解決されます。リクエストがわからない場合は、NXDOMAIN として応答します。つまり、ゾーン データベースにはレコードが見つかりません。これにより、DNS がどのように機能するかを理解していただければ幸いです。

こちらもお読みください: Ubuntu での DNS キャッシュ サーバーのセットアップ

私のテスト環境

この記事では、サーバーのセットアップ (マスターとスレーブ) に 2 台、クライアントに 1 台の計 3 台のマシンを使用しています。

---------------------------------------------------
Master DNS Server
---------------------------------------------------

IP Address	:	192.168.0.200
Host-name	:	masterdns.tecmintlocal.com
OS		:	Centos 6.5 Final
---------------------------------------------------
Slave DNS Server
---------------------------------------------------

IP Address	:	192.168.0.201
Host-name	:	slavedns.tecmintlocal.com
OS		:	Centos 6.5 Final
---------------------------------------------------
Client Machine to use DNS
---------------------------------------------------

IP Address	:	192.168.0.210
Host-name	:	node1.tecmintlocal.com
OS		:	Centos 6.5 Final
要件パッケージ
bind, bind-utils, bind-chroot
使用される設定ファイル
config file	:	/etc/named.conf
script file	:	/etc/init.d/named
使用されるポートとプロトコル
53, UDP

マスターDNSサーバーのセットアップ

まず、セットアップに進む前に、マスター DNS サーバーの IP アドレス、ホスト名、ディストリビューション バージョンを確認します。

sudo ifconfig | grep inet
hostname
cat /etc/redhat-release

上記の設定が正しいことを確認したら、必要なパッケージのインストールに進みます。

sudo yum install bind* -y

バインドのインストールと構成

必要なパッケージをインストールした後、マスター構成「named.conf」ファイルでゾーン ファイルを定義します。

sudo vim /etc/named.conf

以下は私のnamed.conf ファイルエントリです。必要に応じて設定ファイルを変更してください。

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; 192.168.0.200; }; # Here we need to add our Master DNS Server IP.
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; 192.168.0.0/24; }; # subnet range where my hosts are allowed to query our DNS.
        allow-transfer     { localhost; 192.168.0.201; };  # Here we need to our Slave DNS server IP.
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

## Define our forward & reverse Zone file here for tecmintlocal.com.


zone"tecmintlocal.com" IN {
type master;
file "tecmintlocal.fwd.zone";
allow-update { none; };
};

zone"0.168.192.in-addr.arpa" IN {
type master;
file "tecmintlocal.rev.zone";
allow-update { none; };
};

#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

以下は、上記のファイルで使用した各構成の説明です。

  1. リッスン ポート 53 – これは、DNS が利用可能なインターフェイスでリッスンするために使用されます。
  2. マスター DNS – クエリをリッスンするマスター DNS IP アドレスを定義します。
  3. スレーブ DNS – スレーブ DNS を定義します。これは、ゾーン情報を同期してマスターからホストを解決するために使用されます。
  4. 再帰いいえ – はいに設定すると、再帰クエリによりサーバーが DDOS 攻撃を受けます。
  5. ゾーン名 – ここではゾーン名を tecminlocal.com として定義します。
  6. タイプ マスター – このシステムはマスター サーバー用に構成されているため、今後のスレーブ サーバーではこれはスレーブになります。
  7. tecmintlocal.fwd.zone – このファイルには、このゾーンのホスト情報が含まれています。
  8. allow-update none – 何も設定されない場合。ダイナミック DNS (DDNS) は使用されません。

マスターゾーンファイルの作成

まず、前方参照ゾーン エントリを定義しましょう。ここでは、以下のように named.conf ファイルで定義した名前でゾーン ファイルを作成する必要があります。

tecmintlocal.fwd.zone
tecmintlocal.rev.zone

フォワード ゾーン ファイルの作成にはサンプル構成ファイルを使用します。このためには、サンプル構成ファイルをコピーする必要があります。

sudo cp /var/named/named.localhost /var/named/tecmintlocal.fwd.zone
sudo cp /var/named/named.loopback /var/named/tecmintlocal.rev.zone

設定ファイルをコピーしたら、vim エディタを使用してこれらのゾーン ファイルを編集します。

sudo vim /var/named/tecmintlocal.fwd.zone

フォワード ゾーン ファイルでホスト情報を定義する前に、まずサンプル ゾーン ファイルをざっと見てください。

これは私のフォワード ゾーン構成です。以下のエントリを追加し、必要に応じて変更を加えます。

$TTL 86400
@       IN SOA  masterdns.tecmintlocal.com.     root.tecmintlocal.com. (
                                  2014090401    ; serial
                                        3600    ; refresh
                                        1800    ; retry
                                      604800    ; expire
                                       86400 )  ; minimum

; Name server's

@       IN      NS      masterdns.tecmintlocal.com.
@       IN      NS      slavedns.tecmintlocal.com.

; Name server hostname to IP resolve.

@       IN      A       192.168.0.200
@       IN      A       192.168.0.201

; Hosts in this Domain

@       IN      A       192.168.0.210
@       IN      A       192.168.0.220
masterdns       IN      A       192.168.0.200
slavedns        IN      A       192.168.0.201
node1           IN      A       192.168.0.210
rhel1           IN      A       192.168.0.220

wq! を使用してファイルを保存して終了します。前方参照を編集すると、次のようになります。TAB を使用して、ゾーン ファイルで適切な形式を取得します。

次に、逆引き参照ファイルを作成します。tecmintlocal.rev.zone という名前でループバック ファイルのコピーがすでに作成されています。したがって、このファイルを使用して逆引き参照を構成します。

sudo vim /var/named/tecmintlocal.rev.zone

逆引きゾーン ファイルでホスト情報を定義する前に、以下に示す逆引きファイルのサンプルをざっと見てください。

これは私の逆ゾーン構成です。以下のエントリを追加し、必要に応じて変更を加えます。

$TTL 86400
@       IN SOA  masterdns.tecmintlocal.com. root.tecmintlocal.com. (
                                2014090402      ; serial
                                      3600      ; refresh
                                      1800      ; retry
                                    604800      ; expire
                                     86400 )    ; minimum

; Name server's

@       IN      NS      masterdns.tecmintlocal.com.
@       IN      NS      slavedns.tecmintlocal.com.
@       IN      PTR     tecmintlocal.com.

; Name server hostname to IP resolve.

masterdns       IN      A       192.168.0.200
slavedns        IN      A       192.168.0.201

;Hosts in Domain 

node1           IN      A       192.168.0.210
rhel            IN      A       192.168.0.220
200             IN      PTR     masterdns.tecmintlocal.com.
201             IN      PTR     slavedns.tecmintlocal.com.
210             IN      PTR     node1.tecmintlocal.com.
220             IN      PTR     rhel1.tecmintlocal.com.

wq! を使用してファイルを保存して終了します。逆引き参照を編集すると、次のようになります。TAB を使用して、ゾーン ファイルで適切な形式を取得します。

設定にエラーがないか確認する前に、前方参照ファイルと逆引きファイルのグループ所有権を確認してください。

sudo ls -l /var/named/

ここでは、サンプル ファイルからコピーしたファイルが /var/named/ にあるため、両方のファイルがroot ユーザーの所有権にあることがわかります。次のコマンドを使用して、両方のファイルでグループを名前付きに変更します。

sudo chgrp named /var/named/tecmintlocal.fwd.zone
sudo chgrp named /var/named/tecmintlocal.rev.zone

ファイルに正しい所有権を設定した後、再度検証してください。

sudo ls -l /var/named/

ここで、DNS サービスを開始する前に、ゾーン ファイルにエラーがないか確認してください。まずnamed.conf ファイルを確認し、次に他のゾーン ファイルを確認します。

sudo named-checkconf /etc/named.conf
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.fwd.zone
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.rev.zone

デフォルトでは iptables が実行されており、DNS サーバーは localhost に制限されています。クライアントが DNS サーバーから名前を解決したい場合は、受信リクエストを許可する必要があります。そのためには、ポート 53 に iptables の受信ルールを追加する必要があります。

sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

ここで、ルールが INPUT チェーンに正しく追加されたことを確認します。

sudo iptables -L INPUT

次に、ルールを保存し、ファイアウォールを再起動します。

sudo service iptables save
sudo service iptables restart

指定されたサービスを開始し、永続化します。

sudo service named start
sudo chkconfig named on
sudo chkconfig --list named

最後に、dig ツールと nslookup ツールを使用して、構成されたマスター DNS ゾーン ファイル (順方向と逆方向) をテストします。

dig masterdns.tecmintlocal.com		[Forward Zone]

dig -x 192.168.0.200

nslookup tecmintlocal.com
nslookup masterdns.tecmintlocal.com
nslookup slavedns.tecmintlocal.com

いいね! マスター DNS を設定しました。次にスレーブ DNS サーバーを設定する必要があります。スレーブサーバーのセットアップに進みましょう。これはマスターセットアップほど時間はかかりません。

スレーブDNSサーバーのセットアップ

スレーブマシンにもマスターと同じバインドパッケージをインストールする必要があるので、次のコマンドを使用してインストールしましょう。

sudo yum install bind* -y

ゾーン データベースとポート リッスンの「named.conf」 ファイルを開いて編集します。

sudo vim /etc/named.conf

要件に応じて、示されているように変更を加えます。

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; 192.168.0.201}; # Our Slave DNS server IP
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; 192.168.0.0/24; };
        recursion no;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

## Define our slave forward and reverse zone, Zone files are replicated from master.

zone"tecmintlocal.com" IN {
type slave;
file "slaves/tecmintlocal.fwd.zone";
masters { 192.168.0.200; };
};

zone"0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/tecmintlocal.rev.zone";
masters { 192.168.0.200; };
};

#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

を使用して DNS サービスを開始します。

sudo service named start

バインド サービスを再起動した後は、次の図に示すように許可転送によってマスター サーバーからゾーン情報が複製されるため、ゾーン情報を個別に定義する必要はありません。

sudo ls -l /var/named/slaves

cat コマンドを使用してゾーン情報を確認します。

sudo cat /var/named/slaves/tecmintlocal.fwd.zone
sudo cat /var/named/slaves/tecmintlocal.rev.zone

次に、iptables で DNS ポート 53 を開き、受信接続を許可します。

sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

iptables ルールを保存し、iptables サービスを再起動します。

sudo service iptables save
sudo service iptables restart

システム起動時にサービスを永続化します。

sudo chkconfig iptables on
Check whether persistent set for run-levels .
sudo chkconfig --list iptables

それでおしまい!。次に、クライアント マシンを構成し、ホスト名を確認します。

クライアントマシンの構成

クライアント側では、ホスト名を割り当てるために、ネットワーク設定でプライマリ DNS (192.168.0.200) とセカンダリ DNS (192.168.0.201) エントリを割り当てる必要があります。これを行うには、setup コマンドを実行して、図に示すようにこれらすべてのエントリを定義します。

setup

そうでない場合は、「/etc/reslov.conf」ファイルを編集して次のエントリを追加します。

vim /etc/resolv.conf
search tecmintlocal.com
nameserver 192.168.0.200
nameserver 192.168.0.201

ここで、IP、ホスト名、およびネームサーバーの検索を確認します。

ifconfig | grep inet
hostname
nslookup tecmintlocal.com

ここで、を使用して正引きおよび逆引き DNS ルックアップを確認します。

dig masterdns.tecmintlocal.com
dig -x 192.168.0.200

dig 出力を理解する:

  1. ヘッダー – これには、私たちが尋ねたこととその結果がどうなったかがすべて記載されています。
  2. ステータス – ステータスはエラーなしでした。これは、当社から送信されたクエリリクエストがエラーなしで成功したことを意味します。
  3. 質問 – 私たちが作成したクエリ。ここでは私のクエリは masterdns.tecmintlocal.com でした。
  4. 回答 – 利用可能な情報がある場合、クエリ リクエストは解決されます。
  5. 権限 – ドメインとゾーンに対するネーム サーバーの応答。
  6. 追加 – ホスト名や IP アドレスなどのネームサーバーに関する追加情報。
  7. クエリ時間 – 上記のサーバーからの名前を解決するのにかかった時間。

最後にノードを確認し、ping を実行します。

dig node1.tecmintlocal.com

ping masterdns.tecmintlocal.com -c 2
ping slavedns.tecmintlocal.com -c 2
ping 192.168.0.200 -c 2
ping 192.168.0.201 -c 2

最後に、セットアップが完了しました。プライマリ (マスター) とスレーブ (セカンダリ) DNS サーバーの両方が正常に構成されました。全員が問題なくセットアップできていることを願っています。セットアップ中に問題が発生した場合は、お気軽にコメントを残してください。