前書き

サーバーの構成とインフラストラクチャを管理する重要な部分には、適切なドメインネームシステム(DNS)を設定することにより、ネットワークインターフェイスとIPアドレスを名前で簡単に検索する方法を維持することが含まれます。 IPアドレスの代わりに完全修飾ドメイン名(FQDN)を使用してネットワークアドレスを指定すると、サービスとアプリケーションの構成が容易になり、構成ファイルの保守性が向上します。 プライベートネットワーク用に独自のDNSを設定することは、サーバーの管理を改善する優れた方法です。

このチュートリアルでは、CentOS 7でBINDネームサーバーソフトウェア(BIND9)を使用して、プライベートホスト名とプライベートIPを解決するために仮想プライベートサーバー(VPS)で使用できる内部DNSサーバーのセットアップ方法について説明します。アドレス。 これは、内部ホスト名とプライベートIPアドレスを管理するための中心的な方法を提供します。これは、環境が数個以上のホストに拡大する場合に不可欠です。

このチュートリアルのUbuntuバージョンは、https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-14-04にあります。 [ここに]。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 同じデータセンターで実行され、https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [プライベートネットワーキングが有効化されている]

  • プライマリDNSサーバーとして機能する新しいVPS ns1

  • オプション:セカンダリDNSサーバーとして機能する新しいVPS、ns2

  • 上記すべてへのルートアクセス(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [ステップ1〜4はこちら])

DNSの概念に精通していない場合は、https://www.digitalocean.com/community/tutorial_series/an-introduction-to-managing-dnsの最初の3つの部分を読むことをお勧めします[DNSの管理の概要]。

ホストの例

例として、以下を想定します。

  • 「host1」と「host2」という2つの既存のVPSがあります

  • 両方のVPSがnyc3データセンターに存在します

  • 両方のVPSでプライベートネットワーキングが有効になっています(10.128.0.0/16サブネット上にあります)

  • 両方のVPSは、「example.com」で実行されるWebアプリケーションに何らかの形で関連しています

これらの仮定により、プライベートサブネットまたはゾーンを参照するために「nyc3.example.com」を使用する命名スキームを使用することが理にかなっていると判断します。 したがって、_host1_のプライベート完全修飾ドメイン名(FQDN)は「host1.nyc3.example.com」になります。 関連する詳細については、次の表を参照してください。

Host Role Private FQDN Private IP Address

host1

Generic Host 1

host1.nyc3.example.com

10.128.100.101

host2

Generic Host 2

host2.nyc3.example.com

10.128.200.102

*注意:*既存のセットアップは異なりますが、機能する内部DNSを提供するようにDNSサーバーを構成する方法を示すために、サンプル名とIPアドレスが使用されます。 ホスト名とプライベートIPアドレスを独自のものに置き換えることにより、このセットアップを独自の環境に簡単に適合させることができるはずです。 命名スキームでデータセンターの地域名を使用する必要はありませんが、ここでは、これらのホストが特定のデータセンターのプライベートネットワークに属していることを示すために使用します。 複数のデータセンターを利用する場合、それぞれのデータセンター内に内部DNSをセットアップできます。

私たちの目標

このチュートリアルの終わりまでに、プライマリDNSサーバー_ns1_と、オプションでバックアップとして機能するセカンダリDNSサーバー_ns2_を用意します。

以下に、名前とIPアドレスの例を示した表を示します。

Host Role Private FQDN Private IP Address

ns1

Primary DNS Server

ns1.nyc3.example.com

10.128.10.11

ns2

Secondary DNS Server

ns2.nyc3.example.com

10.128.20.12

プライマリDNSサーバーであるns1をインストールして始めましょう。

DNSサーバーにBINDをインストールする

*注意:*強調表示されているテキストは重要です! 多くの場合、独自の設定に置き換える必要があるもの、または構成ファイルに変更または追加する必要があるものを示すために使用されます。 たとえば、のようなものが表示されている場合は、独自のサーバーのFQDNに置き換えます。 同様に、が表示された場合は、自分のサーバーのプライベートIPアドレスに置き換えます。

両方のDNSサーバー_ns1_および_ns2_に、yumでBINDをインストールします。

sudo yum install bind bind-utils

「+ y +」を入力してプロンプトを確認します。

BINDがインストールされたので、プライマリDNSサーバーを設定しましょう。

プライマリDNSサーバーを構成する

BINDの設定は複数のファイルで構成されており、これらのファイルはメインの設定ファイル `+ named.conf +`に含まれています。 これらのファイル名は「名前付き」で始まります。これは、BINDが実行するプロセスの名前だからです。 オプションファイルの構成から始めます。

バインドを構成する

BINDのプロセスは*名前付き*と呼ばれます。 そのため、多くのファイルは「BIND」ではなく「named」を参照しています。

_ns1_で、編集のために `+ named.conf`ファイルを開きます:

sudo vi /etc/named.conf

既存の `+ options +`ブロックの上に、「trusted」と呼ばれる新しいACLブロックを作成します。 ここで、再帰DNSクエリを許可するクライアントのリストを定義します(つまり、 ns1と同じデータセンターにあるサーバー。 サンプルのプライベートIPアドレスを使用して、ns1 _、 ns2 host1_、および_host2_を信頼できるクライアントのリストに追加します。

/etc/named.conf-1/4

acl "trusted" {
       ;    # ns1 - can be set to localhost
       ;    # ns2
       ;  # host1
       ;  # host2
};

信頼できるDNSクライアントのリストができたので、 `+ options `ブロックを編集します。 ns1のプライベートIPアドレスを「 listen-on port 53+」ディレクティブに追加し、「+ listen-on-v6 +」行をコメントアウトします。

/etc/named.conf-2/4

options {
       listen-on port 53 { 127.0.0.1;  };
       listen-on-v6 port 53 { ::1; };
...

これらのエントリの下で、 `+ allow-transfer `ディレクティブを“ none”から* ns2 *のプライベートIPアドレスに変更します。 また、「 allow-query」ディレクティブを「localhost」から「trusted」に変更します。

/etc/named.conf-3/4

...
options {
...
       allow-transfer { ; };      # disable zone transfers by default
...
       allow-query {  };  # allows queries from "trusted" clients
...

ファイルの最後に、次の行を追加します。

/etc/named.conf-4/4

include "/etc/named/named.conf.local";

次に、 `+ named.conf +`を保存して終了します。 上記の構成では、自分のサーバー(「信頼できる」サーバー)のみがDNSサーバーにクエリを実行できるように指定されています。

次に、ローカルファイルを構成して、DNSゾーンを指定します。

ローカルファイルを構成する

_ns1_で、編集のために `+ named.conf.local +`ファイルを開きます:

sudo vi /etc/named/named.conf.local

ファイルは空でなければなりません。 ここでは、順ゾーンと逆ゾーンを指定します。

次の行で順ゾーンを追加します(ゾーン名を独自のものに置き換えます)。

/etc/named/named.conf.local-2の1

zone "" {
   type master;
   file "/etc/named/zones/db."; # zone file path
};

プライベートサブネットが_10.128.0.0 / 16_であると仮定して、次の行を使用して逆ゾーンを追加します(逆ゾーン名は「10.128」のオクテット反転である「128.10」で始まることに注意してください)。

/etc/named/named.conf.local-2/2

zone ".in-addr.arpa" {
   type master;
   file "/etc/named/zones/db.";  # 10.128.0.0/16 subnet
   };

サーバーが複数のプライベートサブネットにまたがっているが同じデータセンターにある場合は、個別のサブネットごとに追加のゾーンとゾーンファイルを必ず指定してください。 目的のゾーンをすべて追加し終わったら、 `+ named.conf.local +`ファイルを保存して終了します。

ゾーンがBINDで指定されたので、対応する順ゾーンファイルと逆ゾーンファイルを作成する必要があります。

順ゾーンファイルを作成する

フォワードゾーンファイルは、フォワードDNSルックアップ用のDNSレコードを定義する場所です。 つまり、DNSが名前クエリ(「host1.nyc3.example.com」など)を受信すると、_host1_の対応するプライベートIPアドレスを解決するためにフォワードゾーンファイルを検索します。

ゾーンファイルが格納されるディレクトリを作成しましょう。 _named.conf.local_設定によれば、その場所は `+ / etc / named / zones +`である必要があります:

sudo chmod 755 /etc/named
sudo mkdir /etc/named/zones

次に、順ゾーンファイルを編集しましょう。

sudo vi /etc/named/zones/db.

最初に、SOAレコードを追加します。 強調表示されたns1 FQDNを独自のFQDNに置き換え、2番目の「nyc3.example.com」を独自のドメインに置き換えます。 ゾーンファイルを編集するたびに、 `+ named +`プロセスを再起動する前に_serial_値をインクリメントする必要があります。これを「3」にインクリメントします。 これは次のようになります。

/etc/named/zones/db.nyc3.example.com-1/3

@       IN      SOA     . admin.. (
                                      ; Serial
            604800     ; Refresh
             86400     ; Retry
           2419200     ; Expire
            604800 )   ; Negative Cache TTL

その後、次の行を使用してネームサーバーレコードを追加します(名前を独自のものに置き換えます)。 2番目の列は、これらが「NS」レコードであることを示していることに注意してください。

/etc/named/zones/db.nyc3.example.com-2/3

; name servers - NS records
   IN      NS      ns1..
   IN      NS      ns2..

次に、このゾーンに属するホストのAレコードを追加します。 これには、名前が「.nyc3.example.com」で終わるサーバーが含まれます(名前とプライベートIPアドレスを置き換えます)。 サンプル名とプライベートIPアドレスを使用して、ns1 _、 ns2 host1_、および_host2_のAレコードを次のように追加します。

/etc/named/zones/db.nyc3.example.com-3/3

; name servers - A records
ns1..          IN      A
ns2..          IN      A

; 10.128.0.0/16 - A records
.        IN      A
.        IN      A

`+ db.nyc3.example.com +`ファイルを保存して終了します。

最終的なフォワードゾーンファイルの例は次のようになります。

/etc/named/zones/db.nyc3.example.com-完了

$TTL    604800
@       IN      SOA     . admin.. (
                        ; Serial
            604800     ; Refresh
             86400     ; Retry
           2419200     ; Expire
            604800 )   ; Negative Cache TTL
;
; name servers - NS records
    IN      NS      ns1..
    IN      NS      ns2..

; name servers - A records
ns1..          IN      A
ns2..          IN      A

; 10.128.0.0/16 - A records
.        IN      A
.        IN      A

次に、逆ゾーンファイルに移動します。

逆ゾーンファイルの作成

逆ゾーンファイルは、逆DNSルックアップ用のDNS PTRレコードを定義する場所です。 つまり、DNSがIPアドレス(たとえば「10.128.100.101」)でクエリを受信すると、逆ゾーンファイルを検索して、対応するFQDN(この場合は「host1.nyc3.example.com」)を解決します。 。

_ns1_で、 `+ named.conf.local +`ファイルで指定された逆ゾーンごとに、逆ゾーンファイルを作成します。

`+ named.conf.local +`で定義された逆ゾーンに対応する逆ゾーンファイルを編集します。

sudo vi /etc/named/zones/db.

フォワードゾーンファイルと同じ方法で、強調表示されたns1 FQDNを独自のFQDNに置き換えてから、2番目の「nyc3.example.com」を独自のドメインに置き換えます。 ゾーンファイルを編集するたびに、 `+ named +`プロセスを再起動する前に_serial_値をインクリメントする必要があります。これを「3」にインクリメントします。 これは次のようになります。

/etc/named/zones/db.10.128-1/3

@       IN      SOA     . admin.. (
                                      ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL

その後、次の行を使用してネームサーバーレコードを追加します(名前を独自のものに置き換えます)。 2番目の列は、これらが「NS」レコードであることを示していることに注意してください。

/etc/named/zones/db.10.128-2/3

; name servers - NS records
     IN      NS      ns1..
     IN      NS      ns2..

次に、IPアドレスが編集中のゾーンファイルのサブネット上にあるすべてのサーバーの「+ PTR +」レコードを追加します。 この例では、ホストはすべて10.128.0.0/16サブネット上にあるため、これにはすべてのホストが含まれます。 最初の列は、サーバーのプライベートIPアドレスの最後の2オクテットで構成されており、順序は逆です。 サーバーに合わせて名前とプライベートIPアドレスを必ず置き換えてください。

/etc/named/zones/db.10.128-3/3

; PTR Records
  IN      PTR     ns1..    ; 10.128.10.11
  IN      PTR     ns2..    ; 10.128.20.12
IN      PTR     .  ; 10.128.100.101
IN      PTR     .  ; 10.128.200.102

逆ゾーンファイルを保存して終了します(逆ゾーンファイルをさらに追加する必要がある場合は、このセクションを繰り返します)。

最後の逆ゾーンファイルの例は次のようになります。

/etc/named/zones/db.10.128-完了

$TTL    604800
@       IN      SOA     . admin.nyc3.example.com. (
                                      ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
; name servers
     IN      NS      ns1..
     IN      NS      ns2..

; PTR Records
  IN      PTR     ns1..    ; 10.128.10.11
  IN      PTR     ns2..    ; 10.128.20.12
IN      PTR     .  ; 10.128.100.101
IN      PTR     .  ; 10.128.200.102

BIND構成構文を確認してください

次のコマンドを実行して、 `+ named.conf * +`ファイルの構文を確認します。

sudo named-checkconf

名前付き設定ファイルに構文エラーがない場合、シェルプロンプトに戻り、エラーメッセージは表示されません。 構成ファイルに問題がある場合は、エラーメッセージとhttps://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-an-private-network-dns-server-onを確認してください。 -centos-7#ConfigurePrimaryDNSServer [プライマリDNSサーバーの構成]セクションで、 `+ named-checkconf +`を再試行します。

`+ named-checkzone `コマンドを使用して、ゾーンファイルの正確性を確認できます。 最初の引数はゾーン名を指定し、2番目の引数は対応するゾーンファイルを指定します。これらは両方とも ` named.conf.local +`で定義されています。

たとえば、「」順ゾーンの構成を確認するには、次のコマンドを実行します(順ゾーンとファイルに合わせて名前を変更します)。

sudo named-checkzone  /etc/named/zones/db.

また、「。in-addr.arpa」逆ゾーン構成を確認するには、次のコマンドを実行します(逆ゾーンとファイルに一致するように番号を変更します)。

sudo named-checkzone .in-addr.arpa /etc/named/zones/db.

すべての構成ファイルとゾーンファイルにエラーがない場合、BINDサービスを再起動する準備ができているはずです。

BINDを開始

BINDを開始します。

sudo systemctl start named

今、あなたはそれを有効にしたいので、起動時に起動します:

sudo systemctl enable named

これで、プライマリDNSサーバーがセットアップされ、DNSクエリに応答する準備が整いました。 セカンダリDNSサーバーの作成に進みましょう。

セカンダリDNSサーバーを構成する

ほとんどの環境では、プライマリが使用できなくなった場合に要求に応答するセカンダリDNSサーバーをセットアップすることをお勧めします。 幸いなことに、セカンダリDNSサーバーの構成ははるかに簡単です。

_ns2_で、 `+ named.conf +`ファイルを編集します。

sudo vi /etc/named.conf

既存の `+ options +`ブロックの上に、「trusted」と呼ばれる新しいACLブロックを作成します。 ここで、再帰DNSクエリを許可するクライアントのリストを定義します(つまり、 ns1と同じデータセンターにあるサーバー。 サンプルのプライベートIPアドレスを使用して、ns1 _、 ns2 host1_、および_host2_を信頼できるクライアントのリストに追加します。

/etc/named.conf-1/4

acl "trusted" {
       ;    # ns1 - can be set to localhost
       ;    # ns2
       ;  # host1
       ;  # host2
};

信頼できるDNSクライアントのリストができたので、 `+ options `ブロックを編集します。 ns1のプライベートIPアドレスを「 listen-on port 53+」ディレクティブに追加し、「+ listen-on-v6 +」行をコメントアウトします。

/etc/named.conf-2/4

options {
       listen-on port 53 { 127.0.0.1;  };
       listen-on-v6 port 53 { ::1; };
...

「+ allow-query」ディレクティブを「localhost」から「trusted」に変更します。

/etc/named.conf-3/4

...
options {
...
       allow-query {  }; # allows queries from "trusted" clients
...

ファイルの最後に、次の行を追加します。

/etc/named.conf-4/4

include "/etc/named/named.conf.local";

次に、 `+ named.conf +`を保存して終了します。 上記の構成では、自分のサーバー(「信頼できる」サーバー)のみがDNSサーバーにクエリを実行できるように指定されています。

次に、ローカルファイルを構成して、DNSゾーンを指定します。

保存して、 `+ named.conf +`を終了します。

次に、 `+ named.conf.local +`ファイルを編集します。

sudo chmod 755 /etc/named
sudo vi /etc/named/named.conf.local

プライマリDNSサーバーのマスターゾーンに対応するスレーブゾーンを定義します。 タイプは「スレーブ」であり、ファイルにはパスが含まれておらず、プライマリDNSサーバーのプライベートIPに設定する必要がある「+ masters +」ディレクティブがあることに注意してください。 プライマリDNSサーバーで複数の逆ゾーンを定義した場合は、それらをすべてここに追加してください。

/etc/named/named.conf.local

zone "" {
   type slave;
   file "slaves/db.";
   masters { ; };  # ns1 private IP
};

zone ".in-addr.arpa" {
   type slave;
   file "slaves/db.";
   masters { ; };  # ns1 private IP
};

ここで、 `+ named.conf.local`を保存して終了します。

次のコマンドを実行して、構成ファイルの有効性を確認します。

sudo named-checkconf

チェックアウトしたら、BINDを開始します。

sudo systemctl start named

起動時にBINDを有効にする:

sudo systemctl enable named

これで、プライベートネットワーク名とIPアドレスを解決するためのプライマリおよびセカンダリDNSサーバーができました。 次に、プライベートDNSサーバーを使用するようにサーバーを構成する必要があります。

DNSクライアントを構成する

「信頼された」ACL内のすべてのサーバーがDNSサーバーを照会する前に、_ns1_および_ns2_をネームサーバーとして使用するように各サーバーを構成する必要があります。 このプロセスはOSによって異なりますが、ほとんどのLinuxディストリビューションでは、ネームサーバーを `+ / etc / resolv.conf +`ファイルに追加する必要があります。

CentOSクライアント

CentOS、RedHat、およびFedora Linux VPSでは、 `+ resolv.conf +`ファイルを編集するだけです:

sudo vi /etc/resolv.conf

次に、ファイルのTOPに次の行を追加します(プライベートドメイン、および_ns1_および_ns2_プライベートIPアドレスを置き換えます)。

/etc/resolv.conf

search   # your private domain
nameserver   # ns1 private IP address
nameserver   # ns2 private IP address

ここで保存して終了します。 これで、クライアントはDNSサーバーを使用するように構成されました。

Ubuntuクライアント

UbuntuおよびDebian Linux VPSでは、起動時に `+ resolv.conf `の前に追加される ` head +`ファイルを編集できます。

sudo vi /etc/resolvconf/resolv.conf.d/head

ファイルに次の行を追加します(プライベートドメイン、および_ns1_および_ns2_プライベートIPアドレスを置き換えます)。

/etc/resolvconf/resolv.conf.d/head

search   # your private domain
nameserver   # ns1 private IP address
nameserver   # ns2 private IP address

次に、 + resolvconf`を実行して、新しい + resolv.conf`ファイルを生成します。

sudo resolvconf -u

これで、クライアントはDNSサーバーを使用するように構成されました。

テストクライアント

「bind-utils」パッケージに含まれている「+ nslookup +」を使用して、クライアントがネームサーバーにクエリできるかどうかをテストします。 これは、設定済みで「信頼できる」ACLにあるすべてのクライアントで実行できるはずです。

前方参照

たとえば、次のコマンドを実行することにより、_host1.nyc3.example.com_のIPアドレスを取得するために前方参照を実行できます。

nslookup host1

「+ search +」オプションがプライベートサブドメインに設定されているため、「host1」をクエリすると「host1.nyc3.example.com」に展開され、DNSクエリは他の場所でホストを検索する前にそのサブドメインを検索しようとします。 上記のコマンドの出力は次のようになります。

Output:Server:     10.128.10.11
Address:    10.128.10.11#53

Name:   host1.nyc3.example.com
Address: 10.128.100.101

逆引き

逆引きをテストするには、_host1_のプライベートIPアドレスでDNSサーバーを照会します:

nslookup 10.128.100.101

次のような出力が表示されます。

Output:Server:     10.128.10.11
Address:    10.128.10.11#53

11.10.128.10.in-addr.arpa   name = host1.nyc3.example.com.

すべての名前とIPアドレスが正しい値に解決される場合、ゾーンファイルが適切に構成されていることを意味します。 予期しない値を受け取った場合は、必ずプライマリDNSサーバーのゾーンファイルを確認してください(例: + db.nyc3.example.com +`および `+ db.10.128 +)。

おめでとうございます。 これで、内部DNSサーバーが適切にセットアップされました! 次に、ゾーンレコードの管理について説明します。

DNSレコードの維持

動作する内部DNSができたので、サーバー環境を正確に反映するようにDNSレコードを維持する必要があります。

DNSへのホストの追加

(同じデータセンター内の)環境にホストを追加するたびに、DNSに追加する必要があります。 実行する必要がある手順のリストは次のとおりです。

プライマリネームサーバー
  • 順ゾーンファイル:新しいホストの「A」レコードを追加し、「シリアル」の値を増やします

  • リバースゾーンファイル:新しいホストの「PTR」レコードを追加し、「シリアル」の値を増やします

  • 新しいホストのプライベートIPアドレスを「信頼できる」ACL( + named.conf.options)に追加します

次に、BINDをリロードします。

sudo systemctl reload named
セカンダリネームサーバー
  • 新しいホストのプライベートIPアドレスを「信頼できる」ACL( + named.conf.options)に追加します

次に、BINDをリロードします。

sudo systemctl reload named
DNSを使用するように新しいホストを構成する
  • DNSサーバーを使用するようにresolv.confを構成します

  • `+ nslookup +`を使用してテストする

DNSからホストを削除する

環境からホストを削除する場合、またはDNSからホストを削除する場合は、サーバーをDNSに追加したときに追加されたすべてのものを削除します(つまり、 上記の手順の逆)。

結論

サーバーのプライベートネットワークインターフェイスを、IPアドレスではなく名前で参照できるようになりました。 これにより、プライベートIPアドレスを覚えておく必要がなくなり、ファイルの読み取りと理解が容易になるため、サービスとアプリケーションの構成が簡単になります。 また、さまざまな分散構成ファイルを編集する必要がなく、単一の場所にあるプライマリサーバーである新しいサーバーを指すように構成を変更できるようになり、メンテナンスが容易になりました。

内部DNSをセットアップし、構成ファイルでプライベートFQDNを使用してネットワーク接続を指定したら、DNSサーバーを適切に維持することが*重要*です。 両方が使用できなくなった場合、それらに依存するサービスとアプリケーションは適切に機能しなくなります。 これが、少なくとも1つのセカンダリサーバーでDNSをセットアップし、それらすべての作業バックアップを維持することが推奨される理由です。