Ubuntu 22.04でプライベートネットワークDNSサーバーとしてBINDを設定する方法

はじめに

サーバーの構成とインフラストラクチャを管理するために重要な部分は、名前によってネットワークインターフェースとIPアドレスを見つける手段を維持することです。これを行う方法のひとつは、適切なドメイン名システム(DNS)を設定することです。IPアドレスの代わりに完全修飾ドメイン名(FQDN)を使用してネットワークアドレスを指定することは、サービスやアプリケーションの設定を最適化し、設定ファイルの保守性を向上させます。専用のDNSをプライベートネットワークに設定することは、サーバーの管理を改善する素晴らしい方法です。

このチュートリアルでは、2台のUbuntu 22.04サーバーを使用して内部DNSサーバーを設定します。BINDネームサーバーソフトウェア(BIND9)を使用して、プライベートホスト名とプライベートIPアドレスを解決します。これにより、環境が数ホストを超えて拡大する場合に不可欠となる、内部ホスト名とプライベートIPアドレスの集中管理が可能になります。

前提条件

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

  • A fresh Ubuntu 22.04 server to serve as the Primary DNS server, ns1.
  • (Recommended) A second Ubuntu 22.04 server to serve as a Secondary DNS server, ns2.
  • At least one additional server. This guide assumes you have two additional servers, which will be referred to as client servers. These client servers must be created in the same datacenter where your DNS servers are located.

これらのサーバーそれぞれについて、管理者権限を持つsudoユーザーを設定し、Ubuntu 22.04初期サーバーセットアップガイドに従ってファイアウォールを設定してください。

DNSの概念に詳しくない場合は、当社のDNS管理の導入の最初の3つのパートを少なくともお読みいただくことをおすすめします。

Info

Silicon Cloudでは、デフォルトですべての新しいvServersはVirtual Private Cloud(VPC)に配置されます。詳細については、VPCの製品ドキュメントをご覧ください。

例えば、インフラストラクチャと目標

この記事では、以下を前提とします。

  • You have two servers which will be designated as your DNS name servers. This guide will refer to these as ns1 and ns2.
  • You have two additional client servers that will be using the DNS infrastructure you create, referred to as host1 and host2 in this guide. You can add as many client servers as you’d like.
  • All of these servers exist in the same datacenter. This tutorial assumes that this datacenter is called nyc3.
  • All of these servers have private networking enabled and are on the 10.128.0.0/16 subnet (you will likely have to adjust this for your servers).
  • All servers are connected to a project that runs on example.com. This guide outlines how to set up an internal, private DNS system, so you can use any domain name you’d like instead of example.com. The DNS servers will always attempt to first route requests internally, meaning they won’t try to reach the given domain on the public internet. However, using a domain you own may help avoid conflicts with publicly routable domains.

これらの前提を考慮に入れると、このガイドの例では、サブドメインnyc3.example.comを基にした命名方法を使用して、例としてのプライベートサブネットまたはゾーンを参照します。そのため、host1のプライベートの完全修飾ドメイン名(FQDN)はhost1.nyc3.example.comになります。このガイド全体で使用される関連する詳細は、以下のテーブルに示されています。

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
host1 Generic Host 1 host1.nyc3.example.com 10.128.100.101
host2 Generic Host 2 host2.nyc3.example.com 10.128.200.102

Note

注意: あなたのセットアップは異なるかもしれませんが、例として使用する名前とIPアドレスを使って、DNSサーバーを設定して内部DNSを機能させる方法を示すために使用します。 ホスト名とプライベートIPアドレスを自分のものに置き換えることで、このセットアップを自分の環境に適用することができるはずです。 データセンターの地域名を命名規則に使用する必要はありませんが、ここではこれらのホストが特定のデータセンターのプライベートネットワークに属していることを示すために使用しています。 複数のデータセンターでサーバーを実行している場合は、それぞれのデータセンター内に内部DNSを設定することができます。

このチュートリアルの最後までに、優先DNSサーバーであるns1とオプションで二次DNSサーバーであるns2を設定することができます。ns2はバックアップとしての役割を果たします。

このチュートリアルに従っている途中で、このセットアップの特定のサーバーで特定のコマンドを実行する必要がある場合があります。ns1で実行する必要があるコマンドは、このように青い背景で表示されます。

 

同様に、ns2上で実行する必要のあるコマンドは赤い背景で表示されます。

 

クライアントサーバーのいずれかで実行する必要のあるコマンドは、緑の背景で表示されます。

 

そして、複数のサーバで実行する必要がある任意のコマンドには、標準のネイビーの背景があります。

 

最後に、コマンドやコードブロックにこのようにハイライトされたテキストが含まれている場合、そのテキストは重要な意味を持つことに注意してください。このガイドでは、自分自身の設定で置き換える必要がある詳細や、変更や追加が必要なハイライトされたテキストを示すために、このようなハイライトが使用されます。例えば、host1.nyc3.example.comのような例が含まれている場合は、自分自身のサーバーのFQDNで置き換えてください。

ns1とns2というプライマリDNSサーバーとセカンダリDNSサーバーの両方にBINDをインストールして、始めましょう。

ステップ1 – DNSサーバーにBINDをインストールする

ns1とns2の両方のDNSサーバーにて、aptパッケージキャッシュをアップデートするには、以下のコマンドを入力してください。

  1. sudo apt update

 

それぞれのマシンにBINDをインストールしてください。

  1. sudo apt install bind9 bind9utils bind9-doc

 

デジタルオーシャンのプライベートネットワーキングはIPv4のみを使用しています。それがあなたの場合は、BINDをIPv4モードに設定してください。両方のサーバーで、好みのテキストエディタを使用して、namedのデフォルト設定ファイルを編集してください。以下の例では、nanoを使用しています。

  1. sudo nano /etc/default/named

 

オプションパラメーターの末尾に-4を追加してください。

以下を日本語で言い換えます(1つのオプションのみ):
「/etc/default/named」
. . .
OPTIONS="-u bind -4"

編集が終わったら、ファイルを保存して閉じてください。もしファイルの編集にnanoを使用した場合、CTRL + X、Y、そしてENTERを押すことで保存と閉じることができます。

変更を実施するためにBINDを再起動してください。 (Henkō o jisshi suru tame ni BIND o saikidō shite kudasai.)

  1. sudo systemctl restart bind9

 

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

ステップ2:プライマリDNSサーバーの設定を行います。

BINDの設定は、メインの設定ファイルであるnamed.confからインクルードされる複数のファイルで構成されています。これらのファイル名は、BINDが実行するプロセスの名前であるnamedで始まります(namedは「ドメイン名デーモン」という意味の「name daemon」の略です)。まず、named.conf.optionsファイルの設定から始めましょう。

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

ns1で、named.conf.optionsファイルを編集するために開いてください。

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

 

既存のオプションブロックの上に、trustedという新しいACL(アクセス制御リスト)ブロックを作成してください。ここでは、ns1と同じデータセンターにあるサーバーからのリカーシブDNSクエリを許可するクライアントのリストを定義します。以下の行を追加して、ns1、ns2、host1、およびhost2を信頼されたクライアントのリストに追加してください。例のプライベートIPアドレスを自分のサーバーのものに置き換えることを忘れずにお願いします。

/etc/bind/named.conf.options — 3つのうちの1つ
acl "trusted" {
        10.128.10.11;    # ns1 
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

信頼できるDNSクライアントのリストを持っているので、オプションブロックを編集することができます。現在のブロックの開始部分は次のとおりです。

/etc/bind/named.conf.options のうちの 2 番目のものは何ですか?
        . . .
};

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

ディレクトリディレクティブの下に、強調された設定行を追加してください(適切なns1のプライベートIPアドレスに置き換えてください)。

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

};

options {
        directory "/var/cache/bind";
        
        recursion yes;                 # enables recursive 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;
        };

        . . .
};

フォワーダーブロックに注意してください。このブロックには8.8.8.8と8.8.4.4の2つのIPアドレスが含まれています。フォワーダーはBINDが外部ネームサーバーへのリンク上のトラフィックを減らすために使用する特別なメカニズムです。また、直接インターネットにアクセスできないサーバーからのクエリを許可するためにもフォワーダーを使用することができます。これにより、ローカルネットワークの負荷を軽減することで、これらのクエリへの応答をより速くするのに役立ちます。

このブロック内の2つのIPアドレスは、GoogleのパブリックDNSリゾルバを表しますが、公開されている再帰的なネームサーバのIPアドレスならどれでも機能します。例えば、代わりにCloudflareのDNSサーバのIPアドレス(1.1.1.1)を使用することもできます。

設定が完了したら、named.conf.options ファイルを保存して閉じてください。上記の設定により、信頼できる自分自身のサーバーのみが外部ドメインの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/16のIPスペースにそれぞれ存在するため、以下の例ではその範囲内で逆引きを定義できるようにリバースゾーンを設定します。

次の行を追加して、ゾーン名をご自身のものに置き換え、allow-transferディレクティブの中にはセカンダリDNSサーバーのプライベートIPアドレスを指定して、フォワードゾーンを追加してください。

/etc/bind/named.conf.local – 2つの1つ
. . .

zone "nyc3.example.com" {
    type primary;
    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の8ビット反転である128.10で始まることに注意してください)。

/etc/bind/named.conf.localの2つ目のファイルです。
    . . .
};

zone "128.10.in-addr.arpa" {
    type primary;
    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

 

最初の段階では、以下のようなコンテンツが含まれます。 (Saisho no dankai de wa, ika no yōna kontentsu ga fukumaremasu.)

/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レコードを編集する必要があります。最初のlocalhostをns1の完全修飾ドメイン名(FQDN)で置き換え、root.localhostをadmin.nyc3.example.comに置き換えます。ゾーンファイルを編集するたびに、namedプロセスを再起動する前にSerial値を増やす必要があります。ここでは、Serial値を3に増やしてください。

/etc/bind/zones/db.nyc3.example.comは3つのうち1つが更新されました。
. . .
;
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

次に、ファイルの最後の3つのレコード(SOAレコードの後)を削除してください。どの行を削除するか分からない場合は、前の例で「この行を削除」とコメントが記されています。

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

/db.nyc3.example.comのゾーンファイルは3つ中2つが更新されました。
. . .

; 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

最終的なフォワードゾーンファイルの例は、以下のコンテンツを含んでいます。

「/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

「db.nyc3.example.com」ファイルを保存して閉じてください。

では、逆ゾーンファイルに移りましょう。

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

逆引きゾーンファイルは、逆引きDNS検索のためにDNS PTRレコードを定義する場所です。すなわち、DNSがIPアドレス(例えば10.128.100.101)によるクエリを受信すると、逆引きゾーンファイル(複数)を参照して、対応するFQDN(host1.nyc3.example.com)を解決します。

ns1には、named.conf.localファイルで指定された各逆引きゾーンに対して、逆引きゾーンファイルを作成してください。例として、サンプルのdb.127ゾーンファイルを基にして逆引きゾーンファイルを作成します。BINDはこのファイルを使用してローカルループバックインターフェースの情報を保存します。localhostを表すIPアドレスの最初のオクテットである127に基づいています(127.0.0.1)。次のコマンドを使用して、このファイルを正しい場所にコピーしてください(逆引きゾーンの定義に合わせて宛先のファイル名を置き換えてください)。

  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レコードを編集してシリアルの値を増やす必要があります。

/etc/bind/zones/db.10.128の更新が3つのうちの1つ行われました。
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

最後のSOAレコードの後にある2つのレコードを削除してください。削除する行がわからない場合は、前の例で「この行を削除します」とコメントが付いています。

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

/etc/bind/zones/db.10.128の更新は3つ中2つ完了しました。
. . .

; 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

 

もし設定ファイルの名前に文法エラーがなければ、エラーメッセージは表示されず、シェルプロンプトに戻ります。もし設定ファイルに問題がある場合は、エラーメッセージと「プライマリDNSサーバーの設定」のセクションを確認し、再度named-checkconfを試してください。

named-checkzoneコマンドは、ゾーンファイルの正確性をチェックするために使用できます。最初の引数はゾーン名を指定し、二番目の引数は対応するゾーンファイルを指定します。これらはいずれもnamed.conf.localで定義されています。

例えば、nyc3.example.comのフォワードゾーンの設定を確認する場合は、次のコマンドを実行してください(フォワードゾーンとファイル名は自分のものに変更してください)。

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

 

Output

zone nyc3.example.com/IN: loaded serial 3 OK

そして、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サーバーの設定を進めましょう。

ステップ3 — セカンダリDNSサーバーの設定

ほとんどの環境では、プライマリDNSサーバーが利用できなくなった場合に応答するセカンダリDNSサーバーを設定することは良い考えです。幸いなことに、セカンダリDNSサーバーの設定はプライマリよりも複雑ではありません。

ns2で、named.conf.optionsファイルを編集してください。

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

 

ファイルの先頭に、信頼できる全てのサーバーのプライベートIPアドレスを用いたACLを追加してください。

/etc/bind/named.conf.optionsは、2つのうち1つ(セカンダリ)が更新されました。
acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

ディレクトリディレクティブの下に、以下の行を追加してください。

/etc/bind/named.conf.optionsの更新(2番目の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ファイルを保存して閉じます。このファイルは、ns1のnamed.conf.optionsファイルと同じである必要がありますが、ns2のプライベートIPアドレスでリスンするように設定してください。

named.conf.localファイルを編集してください。

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

 

主DNSサーバーに対応するセカンダリゾーンを定義します。タイプはセカンダリであり、ファイルにはパスが含まれていません。また、プライマリDNSサーバーのプライベートIPアドレスを指定するためのprimariesディレクティブがあります。プライマリDNSサーバーで複数の逆引きゾーンを定義した場合は、すべてここに追加してください。

/etc/bind/named.conf.localの更新が完了しました。(セカンダリ)
zone "nyc3.example.com" {
    type secondary;
    file "db.nyc3.example.com";
    primaries { 10.128.10.11; };  # ns1 private IP
};

zone "128.10.in-addr.arpa" {
    type secondary;
    file "db.10.128";
    primaries { 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サーバーを使用するように設定する必要があります。

ステップ4:DNSクライアントの設定

信頼されたACL内のすべてのサーバーがDNSサーバーにクエリを送信する前に、各サーバーをns1とns2を名前サーバーとして設定する必要があります。

もしクライアントサーバーがUbuntuで稼働している場合、プライベートネットワークに関連付けられているデバイスを見つける必要があります。これは、ipアドレスコマンドを使用してプライベートサブネットに問い合わせることで行うことができます。クライアントマシンごとに以下のコマンドを実行し、自分のハイライトされたサブネットを置き換えてください。

  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 altname enp0s4 altname ens4 inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1 valid_lft forever preferred_lft forever

この例では、プライベートインターフェースはeth1です。このセクション全体を通しての例では、eth1をプライベートインターフェースと呼びますが、これらの例を自身のサーバーのプライベートインターフェースに合わせて変更してください。

Ubuntu 22.04では、ネットワーキングはNetplanを使用して構成されます。Netplanは標準化されたネットワーク構成を記述し、互換性のあるバックエンドネットワーキングソフトウェアに適用するための抽象化された仕組みです。DNSを設定するには、Netplanの設定ファイルを作成する必要があります。

/etc/netplan に新しいファイル 00-private-nameservers.yaml を作成してください。

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

 

内部には、次の内容を追加してください。 プライベートネットワークのインターフェース、ns1とns2のDNSサーバーのアドレス、およびDNSゾーンを変更する必要があります。

Note

注意:Netplanは、その構成ファイルにYAMLデータシリアライゼーション形式を使用しています。YAMLはインデントと空白を使用してデータ構造を定義するため、エラーを回避するためには一貫したインデントを使用することを確認してください。
YAML Lintのような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に新しい設定ファイルを使用しようとするよう指示しましょう。それには、netplan tryを使用します。ネットワーキングに問題が発生して通信が途切れた場合、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 resolvectl status

 

自分のプライベートネットワークインターフェースのセクションを見つけるまで、スクロールダウンしてください。 DNSサーバーのプライベートIPアドレスは最初にリストされ、その後にいくつかの予備値が続きます。 DNSドメインの後に、あなたのドメインがリストされるはずです。

Output

. . . Link 3 (eth1) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 67.207.67.3 DNS Servers: 10.128.10.11 10.128.20.12 67.207.67.3 67.207.67.2 DNS Domain: nyc3.example.com

あなたのUbuntuクライアントは、内部のDNSサーバーを使用するように設定されています。

ステップ5 – クライアントのテスト

クライアントが名前サーバーにクエリを送信できるかどうかをテストするために、nslookupを使用してください。設定済みで信頼されたACLに含まれているすべてのクライアントでこれを行うことができるはずです。

「まず、フォワードルックアップを実行することから始めることができます。」

予測検索

host1.nyc3.example.comのIPアドレスを取得するために、以下のコマンドを実行してください。

  1. nslookup host1

 

検索オプションがプライベートサブドメインに設定されているため、host1のクエリはhost1.nyc3.example.comへ展開されます。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

次に、逆引き検索を確認することができます。

逆引き

逆引きのテストをするために、ホスト1のプライベート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)を確認してください。

最後のステップとして、このチュートリアルでは、ゾーンレコードの管理方法について説明します。

ステップ6 ー DNSレコードの維持

内部DNSが機能しているので、サーバー環境を正確に反映するためにDNSレコードを適切に保守する必要があります。

DNSにホストを追加する

同じデータセンター内でホストを追加する場合、DNSにも追加する必要があります。以下に、必要な手順のリストを示します。

主要な名前サーバー

  • Forward zone file: Add an A record for the new host, increment the value of Serial
  • Reverse zone file: Add a PTR record for the new host, increment the value of Serial
  • Add your new host’s private IP address to the trusted ACL (named.conf.options)

設定ファイルをテストしてみてください。

  1. sudo named-checkconf
  2. sudo named-checkzone nyc3.example.com /etc/bind/zones/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

 

新しいホストには、現在、あなたのプライマリーサーバーを設定する必要があります。

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

  • Add your new host’s private IP address to the trusted ACL (named.conf.options)

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

  1. sudo named-checkconf

 

それからBINDを再読み込みしてください。 (Sorekara BIND wo saiyomikomishite kudasai.)

  1. sudo systemctl reload bind9

 

新たなホストからの接続は、お手数ですが、ご利用いただいている二次サーバーで受け付けることができます。

新しいホストを設定し、あなたのDNSを使用させる。

  • Configure /etc/resolv.conf to use your DNS servers
  • Test using nslookup

DNSからホストを削除する。

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

結論

今後は、IPアドレスではなく、サーバーのプライベートネットワークインタフェースの名前で参照することができます。これにより、サービスやアプリケーションの設定がより簡単になります。プライベートIPアドレスを覚える必要もなくなり、ファイルの読みやすさと理解しやすさが向上します。また、今後は設定を変更する場合、分散された構成ファイルを複数編集する必要はありません。代わりに、メンテナンスを最適化するため、新しいサーバーを指す構成は主DNSサーバーの一か所で変更できます。

内部DNSの設定が完了し、構成ファイルがプライベートFQDNを使用してネットワーク接続を指定するようになったら、DNSサーバーを適切に管理することが重要です。もしDNSサーバーのどちらかが利用できなくなると、それに依存するサービスやアプリケーションも正常に機能しなくなります。そのため、DNSを少なくとも1つのセカンダリサーバーで設定し、すべてのDNSサーバーのバックアップを定期的に作成することが推奨されています。

もしDNSについてもっと学びたい場合は、当社の記事「DNS用語、コンポーネント、概念の入門」を読んでみることをおすすめします。

コメントを残す 0

Your email address will not be published. Required fields are marked *