序章

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

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

前提条件

このチュートリアルを完了するには、次のインフラストラクチャが必要です。 プライベートネットワークを有効にして、同じデータセンターに各サーバーを作成します。

  • プライマリDNSサーバーとして機能する新しいUbuntu18.04サーバーns1
  • (推奨)セカンダリDNSサーバーとして機能する2番目のUbuntu18.04サーバーns2
  • DNSサーバーを使用する同じデータセンター内の追加サーバー

これらの各サーバーで、 Ubuntu 18.04初期サーバーセットアップガイドに従って、sudoユーザーとファイアウォールを介した管理アクセスを構成します。

DNSの概念に慣れていない場合は、DNS管理の概要の最初の3つの部分を読むことをお勧めします。

インフラストラクチャと目標の例

この記事では、次のことを前提としています。

  • DNSネームサーバーとして指定される2つのサーバーがあります。 このガイドでは、これらをns1およびns2と呼びます。
  • 作成したDNSインフラストラクチャを使用する2つの追加のクライアントサーバーがあります。 このガイドでは、これらをhost1およびhost2と呼びます。 インフラストラクチャに必要な数だけ追加できます。
  • これらのサーバーはすべて同じデータセンターに存在します。 これがnyc3データセンターであると想定します。
  • これらのサーバーはすべてプライベートネットワークが有効になっており、10.128.0.0/16サブネット上にあります(サーバーに合わせてこれを調整する必要があります)。
  • すべてのサーバーは、example.comで実行されるプロジェクトに接続されています。 DNSシステムは完全に内部およびプライベートであるため、ドメイン名を購入する必要はありません。 ただし、所有しているドメインを使用すると、公的にルーティング可能なドメインとの競合を回避できる場合があります。

これらの仮定を念頭に置いて、サブドメインnyc3.example.comに基づく命名スキームを使用して、このガイド全体で参照されているプライベートサブネットまたはゾーンの例を参照します。 したがって、 host1 のプライベート完全修飾ドメイン名(FQDN)はhost1.nyc3.example.comになります。 次の表に関連する詳細を参照してください。

亭主 役割 プライベートFQDN プライベートIPアドレス
ns1 プライマリDNSサーバー ns1.nyc3.example.com 10.128.10.11
ns2 セカンダリDNSサーバー ns2.nyc3.example.com 10.128.20.12
host1 ジェネリックホスト1 host1.nyc3.example.com 10.128.100.101
host2 ジェネリックホスト2 host2.nyc3.example.com 10.128.200.102

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

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

まず、プライマリDNSサーバーとセカンダリDNSサーバーの両方であるns1ns2のBINDをインストールしてみましょう。

DNSサーバーへのBINDのインストール

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

ns1ns2の両方のDNSサーバーで、次のように入力してaptパッケージキャッシュを更新します。

  1. sudo apt-get update

次に、BINDをインストールします。

  1. sudo apt-get install bind9 bind9utils bind9-doc

IPv4モードへのバインドの設定

続行する前に、プライベートネットワークはIPv4のみを使用するため、BINDをIPv4モードに設定しましょう。 両方のサーバーで、お好みのテキストエディタを使用してbind9のデフォルト設定ファイルを編集します。 次の例では、nanoを使用しています。

  1. sudo nano /etc/default/bind9

OPTIONSパラメーターの最後に-4を追加します。 次のようになります。

/ etc / default / bind9
. . .
OPTIONS="-u bind -4"

終了したら、ファイルを保存して閉じます。 nanoを使用してファイルを編集した場合は、CTRL + XYENTERの順に押すと編集できます。

BINDを再起動して、変更を実装します。

  1. sudo systemctl restart bind9

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

プライマリDNSサーバーの構成

BINDの構成は、メイン構成ファイルnamed.confから含まれている複数のファイルで構成されています。 これらのファイル名はnamedで始まります。これは、BINDが実行するプロセスの名前であるためです(namedは、「ドメイン名デーモン」のように「 namedaemon」の略です。 」)。 named.conf.optionsファイルの構成から始めます。

オプションファイルの設定

ns1 で、named.conf.optionsファイルを開いて編集します。

  1. sudo nano /etc/bind/named.conf.options

既存のoptionsブロックの上に、trustedという新しいACL(アクセス制御リスト)ブロックを作成します。 ここで、再帰DNSクエリを許可するクライアントのリストを定義します(つまり、 ns1 と同じデータセンターにあるサーバー)。 プライベートIPアドレスの例を使用して、 ns1 ns2 host1 、およびhost2を信頼できるクライアントのリストに追加します。

/etc/bind/named.conf.options —1/3
acl "trusted" {
        10.128.10.11;    # ns1 - can be set to localhost
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

信頼できるDNSクライアントのリストができたので、optionsブロックを編集します。 現在、ブロックの開始は次のようになります。

/etc/bind/named.conf.options — 2 of 3
        . . .
};

options {
        directory "/var/cache/bind";
        . . .
}

directoryディレクティブの下に、強調表示された構成行を追加します(そして、適切な ns1 プライベートIPアドレスに置き換えます)。次のようになります。

/etc/bind/named.conf.options — 3/3
        . . .

};

options {
        directory "/var/cache/bind";
        
        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network only
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

        . . .
};

終了したら、named.conf.optionsファイルを保存して閉じます。 上記の構成では、独自のサーバー(trustedサーバー)のみがDNSサーバーに外部ドメインを照会できるように指定されています。

次に、named.conf.localファイルを構成してDNSゾーンを指定します。

ローカルファイルの構成

ns1 で、named.conf.localファイルを開いて編集します。

  1. sudo nano /etc/bind/named.conf.local

いくつかのコメントを除いて、ファイルは空である必要があります。 ここでは、順方向ゾーンと逆方向ゾーンを指定します。 DNSゾーンは、DNSレコードを管理および定義するための特定のスコープを指定します。 サンプルドメインはすべてnyc3.example.comサブドメイン内にあるため、これをフォワードゾーンとして使用します。 サーバーのプライベートIPアドレスはそれぞれ10.128.0.0/16IPスペースにあるため、その範囲内で逆引き参照を定義できるように逆引きゾーンを設定します。

allow-transferディレクティブで、ゾーン名を独自のゾーン名とセカンダリDNSサーバーのプライベートIPアドレスに置き換えて、次の行で転送ゾーンを追加します。

/etc/bind/named.conf.local —1/2
zone "nyc3.example.com" {
    type master;
    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
    allow-transfer { 10.128.20.12; };           # ns2 private IP address - secondary
};

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

/etc/bind/named.conf.local — 2 of 2
    . . .
};

zone "128.10.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.10.128";  # 10.128.0.0/16 subnet
    allow-transfer { 10.128.20.12; };  # ns2 private IP address - secondary
};

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

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

フォワードゾーンファイルの作成

フォワードゾーンファイルは、フォワードDNSルックアップのDNSレコードを定義する場所です。 つまり、DNSが名前クエリ(たとえばhost1.nyc3.example.com)を受信すると、転送ゾーンファイルを調べて、host1の対応するプライベートIPアドレスを解決します。

ゾーンファイルが存在するディレクトリを作成しましょう。 named.conf.local構成によると、その場所は/etc/bind/zonesである必要があります。

  1. sudo mkdir /etc/bind/zones

サンプルのdb.localゾーンファイルに基づいてフォワードゾーンファイルを作成します。 次のコマンドを使用して、適切な場所にコピーします。

  1. sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com

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

  1. sudo nano /etc/bind/zones/db.nyc3.example.com

最初は、次のようになります。

/etc/bind/zones/db.nyc3.example.com —オリジナル
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
@       IN      A       127.0.0.1       ; delete this line
@       IN      AAAA    ::1             ; delete this line

まず、SOAレコードを編集する必要があります。 最初のlocalhostns1のFQDNに置き換えてから、root.localhostadmin.nyc3.example.comに置き換えます。 ゾーンファイルを編集するたびに、namedプロセスを再開する前に、Serialの値をインクリメントする必要があります。 3にインクリメントします。 これで、次のようになります。

/etc/bind/zones/db.nyc3.example.com —更新された1/3
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

次に、ファイルの最後(SOAレコードの後)にある3つのレコードを削除します。 削除する行がわからない場合は、上記のdelete this lineというコメントでマークされています。

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

/etc/bind/zones/db.nyc3.example.com —更新された2/3
. . .

; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

次に、このゾーンに属するホストのAレコードを追加します。 これには、名前を.nyc3.example.comで終わらせたいサーバーが含まれます(名前とプライベートIPアドレスに置き換えてください)。 例の名前とプライベートIPアドレスを使用して、 ns1 ns2 host1 、およびhost2のAレコードを次のように追加します。

/etc/bind/zones/db.nyc3.example.com —3/3を更新
. . .

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

db.nyc3.example.comファイルを保存して閉じます。

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

/etc/bind/zones/db.nyc3.example.com —更新
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                  3     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.nyc3.example.com.
     IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

次に、リバースゾーンファイルに移動しましょう。

リバースゾーンファイルの作成

逆引きゾーンファイルは、逆引きDNSルックアップのDNSPTRレコードを定義する場所です。 つまり、DNSがIPアドレス10.128.100.101でクエリを受信すると、リバースゾーンファイルを調べて、対応するFQDN(この場合はhost1.nyc3.example.com)を解決します。

ns1 で、named.conf.localファイルで指定された逆引きゾーンごとに、逆引きゾーンファイルを作成します。 サンプルのdb.127ゾーンファイルに基づいてリバースゾーンファイルを作成します。 次のコマンドを使用して、適切な場所にコピーします(逆引きゾーンの定義と一致するように宛先ファイル名を置き換えます)。

  1. sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128

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

  1. sudo nano /etc/bind/zones/db.10.128

最初は、次のようになります。

/etc/bind/zones/db.10.128 —オリジナル
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
1.0.0   IN      PTR     localhost.      ; delete this line

フォワードゾーンファイルと同じ方法で、SOAレコードを編集し、serial値をインクリメントします。 次のようになります。

/etc/bind/zones/db.10.128 —更新された1/3
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

次に、ファイルの最後(SOAレコードの後)にある2つのレコードを削除します。 削除する行がわからない場合は、上記のdelete this lineコメントでマークされています。

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

/etc/bind/zones/db.10.128 —更新された2/3
. . .

; name servers - NS records
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

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

/etc/bind/zones/db.10.128 —3/3を更新
. . .

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

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

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

/etc/bind/zones/db.10.128 —更新
$TTL    604800
@       IN      SOA     nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

ファイルの編集が完了したので、次にファイルにエラーがないか確認します。

BIND構成構文の確認

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

  1. sudo named-checkconf

名前付き構成ファイルに構文エラーがない場合は、シェルプロンプトに戻り、エラーメッセージは表示されません。 設定ファイルに問題がある場合は、エラーメッセージとConfigure Primary DNS Serverセクションを確認してから、named-checkconfを再試行してください。

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

たとえば、nyc3.example.com転送ゾーンの構成を確認するには、次のコマンドを実行します(転送ゾーンとファイルに一致するように名前を変更します)。

  1. sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com

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

  1. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

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

BINDを再起動します

BINDを再起動します。

  1. sudo systemctl restart bind9

UFWファイアウォールを構成している場合は、次のように入力してBINDへのアクセスを開きます。

  1. sudo ufw allow Bind9

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

セカンダリDNSサーバーの構成

ほとんどの環境では、プライマリが使用できなくなった場合に要求に応答するセカンダリDNSサーバーを設定することをお勧めします。 幸い、セカンダリDNSサーバーの構成はそれほど複雑ではありません。

ns2 で、named.conf.optionsファイルを編集します。

  1. sudo nano /etc/bind/named.conf.options

ファイルの先頭に、すべての信頼できるサーバーのプライベートIPアドレスを含むACLを追加します。

/etc/bind/named.conf.options —更新された1/2(セカンダリ)
acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 - can be set to localhost
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

directoryディレクティブの下に、次の行を追加します。

/etc/bind/named.conf.options — 2 of 2を更新(セカンダリ)
        recursion yes;
        allow-recursion { trusted; };
        listen-on { 10.128.20.12; };      # ns2 private IP address
        allow-transfer { none; };          # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

named.conf.optionsファイルを保存して閉じます。 このファイルは、 ns2 のプライベートIPアドレスでリッスンするように構成する必要があることを除いて、ns1named.conf.optionsファイルとまったく同じになります。

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

  1. sudo nano /etc/bind/named.conf.local

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

/etc/bind/named.conf.local —更新(セカンダリ)
zone "nyc3.example.com" {
    type slave;
    file "db.nyc3.example.com";
    masters { 10.128.10.11; };  # ns1 private IP
};

zone "128.10.in-addr.arpa" {
    type slave;
    file "db.10.128";
    masters { 10.128.10.11; };  # ns1 private IP
};

次に、named.conf.localファイルを保存して閉じます。

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

  1. sudo named-checkconf

このコマンドがエラーを返さない場合は、BINDを再起動します。

  1. sudo systemctl restart bind9

次に、UFWファイアウォールルールを変更して、サーバーへのDNS接続を許可します。

  1. sudo ufw allow Bind9

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

DNSクライアントの構成

trusted ACL内のすべてのサーバーがDNSサーバーにクエリを実行する前に、ns1およびns2をネームサーバーとして使用するように各サーバーを構成する必要があります。 このプロセスはOSによって異なりますが、ほとんどのLinuxディストリビューションでは、ネームサーバーを/etc/resolv.confファイルに追加する必要があります。

Ubuntu18.04クライアント

Ubuntu 18.04では、ネットワークはNetplanで構成されます。これは、標準化されたネットワーク構成を記述して、互換性のないバックエンドネットワークソフトウェアに適用できるようにする抽象化です。 DNSを構成するには、Netplan構成ファイルを作成する必要があります。

まず、ip addressコマンドでプライベートサブネットにクエリを実行して、プライベートネットワークに関連付けられているデバイスを見つけます。

  1. ip address show to 10.128.0.0/16
Output
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1 valid_lft forever preferred_lft forever

この例では、プライベートインターフェイスはeth1です。

次に、/etc/netplan00-private-nameservers.yamlという名前の新しいファイルを作成します。

  1. sudo nano /etc/netplan/00-private-nameservers.yaml

中に、以下の内容を貼り付けます。 プライベートネットワークのインターフェイス、ns1およびns2 DNSサーバーのアドレス、およびDNSゾーンを変更する必要があります。

注: Netplanは、構成ファイルにYAMLデータシリアル化形式を使用します。 YAMLはインデントと空白を使用してデータ構造を定義するため、エラーを回避するために、定義で一貫したインデントを使用するようにしてください。

/ etc / netplan 00-private-nameservers.yaml
network:
    version: 2
    ethernets:
        eth1:                                    # Private network interface
            nameservers:
                addresses:
                - 10.128.10.11                # Private IP for ns1
                - 10.132.20.12                # Private IP for ns2
                search: [ nyc3.example.com ]    # DNS zone

終了したら、ファイルを保存して閉じます。

次に、netplan tryを使用して新しい構成ファイルの使用を試みるようにNetplanに指示します。 ネットワークの損失を引き起こす問題がある場合、Netplanはタイムアウト後に変更を自動的にロールバックします。

  1. sudo netplan try
Output
Warning: Stopping systemd-networkd.service, but it can still be activated by: systemd-networkd.socket Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 120 seconds

カウントダウンが下部で正しく更新されている場合、新しい構成は少なくともSSH接続を切断しないように十分に機能しています。 ENTER を押して、新しい構成を受け入れます。

次に、システムのDNSリゾルバーを確認して、DNS構成が適用されているかどうかを確認します。

  1. sudo systemd-resolve --status

プライベートネットワークインターフェイスのセクションが表示されるまで下にスクロールします。 DNSサーバーのプライベートIPアドレスが最初に表示され、その後にいくつかのフォールバック値が表示されます。 ドメインはDNS Domainにある必要があります。

Output
. . . Link 3 (eth1) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.128.10.11 10.128.20.12 67.207.67.2 67.207.67.3 DNS Domain: nyc3.example.com . . .

これで、内部DNSサーバーを使用するようにクライアントを構成する必要があります。

Ubuntu16.04およびDebianクライアント

Ubuntu16.04およびDebianLinuxサーバーでは、/etc/network/interfacesファイルを編集できます。

  1. sudo nano /etc/network/interfaces

内部でdns-nameservers行を見つけ、現在そこにあるリストの前に独自のネームサーバーを追加します。 その行の下に、インフラストラクチャのベースドメインを指すdns-searchオプションを追加します。 この場合、これはnyc3.example.comになります。

/ etc / network / interfaces
    . . .

    dns-nameservers 10.128.10.11 10.128.20.12 8.8.8.8
    dns-search nyc3.example.com

    . . .

終了したら、ファイルを保存して閉じます。

次に、ネットワークサービスを再起動し、次のコマンドを使用して新しい変更を適用します。 eth0をネットワークインターフェイスの名前に置き換えてください。

  1. sudo ifdown --force eth0 && sudo ip addr flush dev eth0 && sudo ifup --force eth0

これにより、現在の接続を切断せずにネットワークを再起動する必要があります。 正しく機能した場合は、次のように表示されます。

Output
RTNETLINK answers: No such process Waiting for DAD... Done

次のように入力して、設定が適用されたことを再確認します。

  1. cat /etc/resolv.conf

/etc/resolv.confファイルと検索ドメインにネームサーバーが表示されます。

Output
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 10.128.10.11 nameserver 10.128.20.12 nameserver 8.8.8.8 search nyc3.example.com

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

CentOSクライアント

CentOS、RedHat、およびFedora Linuxで、/etc/sysconfig/network-scripts/ifcfg-eth0ファイルを編集します。 eth0をプライマリネットワークインターフェイスの名前に置き換える必要がある場合があります。

  1. sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

DNS1およびDNS2オプションを検索し、プライマリおよびセカンダリネームサーバーのプライベートIPアドレスに設定します。 DOMAINパラメータを追加し、その後にインフラストラクチャのベースドメインを追加します。 このガイドでは、それはnyc3.example.comになります。

/ etc / sysconfig / network-scripts / ifcfg-eth0
. . .
DNS1=10.128.10.11
DNS2=10.128.20.12
DOMAIN='nyc3.example.com'
. . .

終了したら、ファイルを保存して閉じます。

次に、次のように入力してネットワークサービスを再起動します。

  1. sudo systemctl restart network

コマンドは数秒間ハングする場合がありますが、すぐにプロンプトに戻るはずです。

次のように入力して、変更が適用されたことを確認します。

  1. cat /etc/resolv.conf

リストにネームサーバーと検索ドメインが表示されます。

/etc/resolv.conf
nameserver 10.128.10.11
nameserver 10.128.20.12
search nyc3.example.com

これで、クライアントはDNSサーバーに接続して使用できるようになります。

クライアントのテスト

nslookupを使用して、クライアントがネームサーバーにクエリを実行できるかどうかをテストします。 これは、構成済みでtrustedACLにあるすべてのクライアントで実行できるはずです。

CentOSクライアントの場合、次の機能を使用してユーティリティをインストールする必要があります。

  1. sudo yum install bind-utils

前方参照を実行することから始めることができます。

フォワードルックアップ

host1.nyc3.example.comのIPアドレスを取得するために前方参照を実行するには、次のコマンドを実行します。

  1. nslookup host1

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

Output
Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: host1.nyc3.example.com Address: 10.128.100.101

次に、逆引き参照を確認できます。

逆引き参照

逆引き参照をテストするには、host1のプライベートIPアドレスを使用してDNSサーバーにクエリを実行します。

  1. nslookup 10.128.100.101

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

Output
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com. Authoritative answers can be found from:

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

最後のステップとして、ゾーンレコードを維持する方法について説明します。

DNSレコードの維持

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

DNSへのホストの追加

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

プライマリネームサーバー

  • 転送ゾーンファイル:新しいホストのAレコードを追加し、Serialの値をインクリメントします
  • 逆引きゾーンファイル:新しいホストのPTRレコードを追加し、Serialの値をインクリメントします
  • 新しいホストのプライベートIPアドレスをtrustedACL(named.conf.options)に追加します

構成ファイルをテストします。

  1. sudo named-checkconf
  2. sudo named-checkzone nyc3.example.com db.nyc3.example.com
  3. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

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

  1. sudo systemctl reload bind9

これで、プライマリサーバーを新しいホスト用に構成する必要があります。

セカンダリネームサーバー

  • 新しいホストのプライベートIPアドレスをtrustedACL(named.conf.options)に追加します

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

  1. sudo named-checkconf

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

  1. sudo systemctl reload bind9

これで、セカンダリサーバーは新しいホストからの接続を受け入れます。

DNSを使用するように新しいホストを構成する

  • DNSサーバーを使用するように/etc/resolv.confを構成します
  • nslookupを使用してテストします

DNSからのホストの削除

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

結論

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

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