5 ネーム・サービスの構成

この章では、Berkeley Internet Name Domain (BIND)を使用してドメイン・ネーム・システム(DNS)ネーム・サーバーを設定する方法について説明します。

DNSおよびBINDについて

DNSは、ドメイン名をIPアドレスに解決するネットワークベースのサービスです。分離された小規模なネットワークの場合は、/etc/hostsファイルのエントリを使用して、名前からアドレスへのマッピングを提供できます。ただし、インターネットに接続しているほとんどのネットワークではDNSが使用されます。

DNSは階層型の分散型データベースです。

完全修飾ドメイン名(FQDN) wiki.us.mydom.comについて考えてみましょう。この例では、トップレベル・ドメインがcomで、mydomcomのサブドメイン、usmydomのサブドメイン、wikiはホスト名です。

これらの各ドメインは、管理の目的でゾーンにグループ化されています。DNSサーバー(つまり、ネーム・サーバー)には、ゾーン内のコンポーネント・ドメインの解決に必要な情報が格納されます。また、ゾーンのDNSサーバーには、各サブドメインの解決を担当する他のDNSサーバーへのポインタが格納されます。

外部クライアントがそのローカル・ネーム・サーバーに、FQDN (wiki.us.mydom.comなど)をそのサーバーに権威がないIPアドレスに解決するようにリクエストした場合、そのサーバーは、.comドメインに対して権威のある(オーソリタティブな)ネーム・サーバーのアドレスをrootネーム・サーバーに問い合せます。このサーバーは、mydom.comドメインに対してオーソリタティブな別のネーム・サーバーのIPアドレスを提供し、これにより、us.mydom.comのオーソリタティブ・ネーム・サーバーのIPアドレスが提供され、以降同様に続きます。

問合せプロセスは、リクエストを行った外部クライアントに提供されるFQDNのIPアドレスで終了します。このプロセスは再帰問合せと呼ばれ、ローカル・ネーム・サーバーは、リゾルバのかわりに、外部ネーム・サーバーから別のネーム・サーバーへの各参照を処理します。

反復問合せは、リゾルバが各外部ネーム・サーバーからの参照を処理してFQDNに対してオーソリタティブなネーム・サーバーをトレースできることに依存しています。ほとんどのリゾルバは、再帰問合せを使用するため、反復問合せのみをサポートしているネーム・サーバーは使用できません。

ほとんどのOracle Linuxリリースでは、DNSのBIND実装が提供されています。bindパッケージには、DNSサーバー・デーモン(named)、DNSで使用するツール(rndcなど)、および次に示すいくつかの構成ファイルが含まれています。

/etc/named.conf

namedの設定が含まれており、ドメインについてゾーン・ファイルの場所と特性がリストされています。通常、ゾーン・ファイルは/var/namedに格納されます。

/etc/named.rfc1912.zones

ローカル・ループバック名とアドレスを解決するための複数のゾーン・セクションが含まれます。

/var/named/named.ca

オーソリタティブなルートDNSサーバーのリストが含まれます。

ネーム・サーバーのタイプ

BINDを使用して、次のような様々なタイプのネーム・サーバーを構成できます。

マスター・ネーム・サーバー

1つ以上のドメインに対してオーソリタティブなプライマリ(マスター)ネーム・サーバーはそのゾーン・データを複数のデータベース・ファイルに保持し、この情報をゾーンでも構成されている任意のバックアップ・ネーム・サーバーに定期的に転送できます。組織はゾーンに対して次の2つのプライマリ・ネーム・サーバーを保持できます。1つは、パブリックにアクセスできる、ホストおよびサービスのゾーンに関する制限された情報を提供するファイアウォールのプライマリ・サーバーで、もう1つは、内部のホストおよびサービスの詳細を含むファイアウォール内部の非表示またはステルスのプライマリ・サーバーです。

セカンダリまたはバックアップ・ネーム・サーバー

プライマリ・ネーム・サーバーのバックアップとして機能するバックアップ・ネーム・サーバーは、ゾーン・データのコピーを保持し、そのデータはプライマリ・サーバーのコピーから定期的にリフレッシュされます。

スタブ・ネーム・サーバー

ゾーンのプライマリ・ネーム・サーバーは、子ゾーンのプライマリおよびバックアップのネーム・サーバーに関する情報を保持するスタブ・ネーム・サーバーとして構成することもできます。

キャッシュ専用ネーム・サーバー

クライアントのかわりに問合せを実行し、結果をクライアントに返した後でレスポンスをキャッシュに保存します。このサーバーはドメインに対してオーソリタティブではなく、これによって記録される情報は、キャッシュされた問合せの結果のみになります。

転送ネーム・サーバー

すべての問合せを別のネーム・サーバーに転送し、結果をキャッシュします。これにより、ローカル処理、外部アクセスおよびネットワーク・トラフィックが減少します。

実際には、複雑な構成のネーム・サーバーは、これらの複数のタイプの組合せになります。

ネーム・サーバーのインストールおよび構成

デフォルトでは、BINDインストールを使用して、/etc/named.confファイル内で指定されている構成設定と、それに含まれているファイルで、キャッシュ専用ネーム・サーバーを構成できます。次の手順では、デフォルトの設定を使用するか新規のnamed構成およびゾーン・ファイルを構成すると仮定します。

ネーム・サーバーを構成するには:

  1. bindパッケージをインストールします。

    sudo dnf install bind
  2. システムでNetworkManagerが有効になっている場合は、/etc/sysconfig/network-scripts/ifcfg-interfaceファイルを編集して、次のエントリを追加します。

    DNS1=127.0.0.1

    この行により、ネットワーク・サービスの開始時にNetworkManager/etc/resolv.confに次のエントリが追加されるようになります。

    nameserver 127.0.0.1

    このエントリは、ローカル・ネーム・サーバーのリゾルバを指します。

  3. NetworkManagerを無効にした場合は、/etc/resolv.confファイルを編集してnameserver 127.0.0.1エントリを含めます。

  4. 必要な場合は、named構成およびゾーン・ファイルを変更します。

    詳細は、「namedデーモンの構成」を参照してください。

  5. システム・ファイアウォールを、ポート53への着信TCP接続、およびポート53での着信UDPデータグラムを受け入れるように構成します。

    sudo firewall-cmd --zone=zone --add-port=53/tcp --add-port=53/udp
    sudo firewall-cmd --permanent --zone=zone --add-port=53/tcp --add-port=53/udp

    ファイアウォールの保護の詳細は、Oracle Linux 8: ファイアウォールの構成を参照してください。

  6. NetworkManagerサービスおよびnamedサービスを再起動し、システムの再起動後にnamedサービスが開始するように構成します。

    sudo systemctl restart NetworkManager
    sudo systemctl start named
    sudo systemctl enable named

DNS構成ファイルの使用

ドメインは、ゾーン・ファイルによって構成されているゾーンにグループ化されます。ゾーン・ファイルには、DNSデータベースのドメインに関する情報が保存されます。各ゾーン・ファイルには、ディレクティブとリソース・レコードが格納されます。オプションのディレクティブで、設定をゾーンに適用したり、特定のタスクを実行するネーム・サーバーを指定します。リソース・レコードで、ゾーン・パラメータを指定し、ゾーンのシステムまたはホストに関する情報を定義します。

BIND構成ファイルの例は、/usr/share/doc/BIND/sample/etcファイルにあります。

namedデーモンの構成

namedサービスの主要な構成ファイルは/etc/named.confです。次の例は、bindパッケージとともにインストールされる、デフォルトの/etc/named.confファイルからの抜粋であり、キャッシュ専用ネーム・サーバーを構成しています。

options {
    listen-on port 53 { 127.0.0.1; };
    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";
    secroots-file   "/var/named/data/named.secroots";
    recursing-file  "/var/named/data/named.recursing";
    allow-query { localnets; };
    recursion yes;

    dnssec-enable yes;
    dnssec-validation yes;

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

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

   pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";

    /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
    include "/etc/crypto-policies/back-ends/bind.config";

};

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

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

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

options文は、グローバル・サーバー構成オプションを定義し、他の文に対するデフォルトを設定します。

listen-on

namedが問合せをリスニングするポートです。

directory

相対パス名が指定された場合のゾーン・ファイルのデフォルト・ディレクトリを指定します。

dump-file

クラッシュした場合に、namedがそのキャッシュをダンプする場所を指定します。

statistics-file

rndc statsコマンドの出力ファイルを指定します。

memstatistics-file

namedのメモリー使用量統計の出力ファイルを指定します。

allow-query

どのIPアドレスでそのサーバーを問い合せることができるかを指定します。localnetsにすると、ローカルにアタッチされているすべてのネットワークが指定されます。

recursion

ネーム・サーバーが再帰問合せを実行するかどうかを指定します。

dnssec-enable

セキュアDNS (DNSSEC)を使用するかどうかを指定します。

dnssec-validation

DNSSEC対応ゾーンからの応答をネーム・サーバーで検証する必要があるかどうかを指定します。

dnssec-lookaside

bindkeys-fileで定義されている/etc/named.iscdlv.key内のキーを使用したDNSSECルックアサイド検証(DLV)を有効にするかどうかを指定します。

loggingセクションにより、/var/named/data/named.runへのメッセージのロギングをアクティブ化します。severityパラメータにより、ロギング・レベルを制御します。dynamicという値は、rndc traceコマンドを使用してこのレベルを制御できることを意味します。

zoneセクションでは、ヒント・ゾーンを使用して、ルート・サーバーの初期セットを指定します。このゾーンにより、named/var/named/named.caを調べてルート・ドメイン(.)のオーソリタティブ・サーバーのIPアドレスを確認することを指定します。

ネットワーク環境に適した定義を構成ファイルに追加できます。次の例では、サービスの設定を定義し、ゾーンのトップレベル定義を行います。

include "/etc/rndc.key";

controls {
    inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; }
};

zone "us.mydom.com" {
    type master;
    file "master-data";
    allow-update { key "rndc-key"; };
    notify yes;
};

zone "mydom.com" IN {
    type slave;
    file "sec/slave-data";
    allow-update { key "rndc-key"; };
    masters {10.1.32.1;};
};

zone "2.168.192.in-addr.arpa" IN {
    type master;
    file "reverse-192.168.2";
    allow-update { key “rndc-key”; };
    notify yes;
};

include文により、外部ファイルを参照可能になり、権限が制限されている別個のファイルにキー・ハッシュなどの機密データを配置できるようになります。

controls文は、rndcコマンドをnamedサーバーで使用するために必要なアクセス情報およびセキュリティ要件を定義します。

inet

rndcを実行してnamedを制御できるホストを指定します。この例では、rndcはローカル・ホスト(127.0.0.1)で実行する必要があります。

keys

使用できるキーの名前を指定します。この例では、/etc/rndc.keyで定義されているrndc-keyというキーを使用することを指定しています。キーは、namedに基づいて様々なアクションを認証します。また、これはリモート・アクセスおよび管理を制御する主要な方法です。

zone文は、様々なゾーンのサーバーのロールを定義します。

次のゾーン・オプションを使用できます。

type

このシステムがゾーンus.mydom.comのプライマリ・ネーム・サーバーで、mydom.comのバックアップ・サーバーであることを指定します。2.168.192.in-addr.arpaは、IPアドレスをホスト名に解決するための逆引きゾーンです。「逆引き名前解決のリソース・レコードについて」を参照してください。

file

/var/namedを基準にしてゾーン・ファイルのパスを指定します。us.mydom.comのゾーン・ファイルは/var/named/master-dataに格納され、mydom.comの転送されるゾーン・データは/var/named/sec/slave-dataにキャッシュされます。

allow-update

プライマリからバックアップへのゾーン転送を行うには、プライマリとバックアップの両方のネーム・サーバーに共有キーが存在する必要があることを指定します。/etc/rndc.keyファイル内のキーについてレコード例を次に示します。

key "rndc-key" {
    algorithm hmac-md5;
    secret "XQX8NmM41+RfbbSdcqOejg==";
};

キー・ファイルは、rndc-confgen -aコマンドを使用して生成できます。

notify

ゾーン情報の更新時にバックアップ・ネーム・サーバーに通知するかどうかを指定します。

masters

バックアップ・ネーム・サーバーのプライマリ・ネーム・サーバーを指定します。

詳細は、named.conf(5)マニュアル・ページ、および/usr/share/doc/BIND-version/armにあるBINDドキュメントを参照してください。

ゾーン・ファイルのリソース・レコードについて

ゾーン・ファイルのリソース・レコードには次のフィールドが格納され、レコード・タイプによってはその一部はオプションです。

名前

ドメイン名またはIPアドレス。

TTL (有効期間)

ネーム・サーバーが、より新しいレコードが使用可能かどうかをチェックせずにレコードをキャッシュする最大時間。

クラス

インターネットの場合は常にINです。

タイプ

レコードのタイプ。たとえば:

A (アドレス)

ホストに相当するIPv4アドレス。

AAAA (アドレス)

ホストに相当するIPv6アドレス。

CNAME (正規名)

ホスト名に相当する別名。

MX (メール交換)

ドメインに対応する電子メールの宛先。

NS (ネーム・サーバー)

ドメインのオーソリタティブ・ネーム・サーバーの完全修飾ドメイン名。

PTR (ポインタ)

アドレスから名前への参照(逆引き名前解決)のIPアドレスに対応するホスト名。

SOA (オーソリティ開始)

ゾーンに関するオーソリタティブ情報(プライマリ・ネーム・サーバー、ドメイン管理者の電子メール・アドレス、ドメインのシリアル番号など)。SOAレコードの後に続く、次のSOAレコードまでのすべてのレコードは、定義するゾーンに関係します。

データ

AレコードのIPアドレスやCNAMEまたはPTRレコードのホスト名など、レコードに保存される情報。

次の例では、/var/named/master-dataなどの典型的なゾーン・ファイルの内容を示します。

$TTL 86400        ; 1 day
@ IN SOA dns.us.mydom.com. root.us.mydom.com. (
            57 ; serial
            28800 ; refresh (8 hours)
            7200 ; retry (2 hours)
            2419200 ; expire (4 weeks)
            86400 ; minimum (1 day)
            )
              IN  NS      dns.us.mydom.com.

dns           IN  A       192.168.2.1
us.mydom.com  IN  A       192.168.2.1
svr01         IN  A       192.168.2.2
www           IN  CNAME   svr01
host01        IN  A       192.168.2.101
host02        IN  A       192.168.2.102
host03        IN  A       192.168.2.103
...

セミコロン(;)の後ろは、行のコメントです。

$TTLディレクティブには、ゾーンの全リソース・レコードのデフォルトの有効期間値を定義します。各リソース・レコードには、グローバル設定をオーバーライドする独自の有効期間値を定義できます。

SOAレコードは必須で、次の情報が含まれます。

us.mydom.com

ドメインの名前。

dns.us.mydom.com.

ネーム・サーバーの完全修飾ドメイン名で、ルート・ドメインの後のピリオド(.)も指定します。

root.us.mydom.com.

ドメイン管理者の電子メール・アドレス。

serial

カウンタの増分時に、ゾーン・ファイルをリロードするようにnamedに伝達します。

refresh

この時間が経過すると、プライマリ・ネーム・サーバーからバックアップ・ネーム・サーバーに、データベースをリフレッシュする必要があることが通知されます。

retry

リフレッシュに失敗した場合は、バックアップ・ネーム・サーバーが別のリフレッシュを試みるまで待機する時間。

expire

バックアップ・ネーム・サーバーがリフレッシュを完了しないうちにこの時間が経過すると、バックアップ・ネーム・サーバーのゾーン・レコードがオーソリタティブでなくなり、問合せの応答を停止します。

minimum

他のサーバーがこのゾーンから取得した情報をキャッシュする最小時間。

NSレコードは、ドメインのオーソリタティブ・ネーム・サーバーを宣言します。

Aレコードには、ドメインのホスト名に相当するIPアドレスを指定します。

CNAMEレコードは、svr01の別名wwwを作成します。

詳細は、/usr/share/doc/BIND-version/armにあるBINDドキュメントを参照してください。

逆引き名前解決のリソース・レコードについて

正引き解決では、指定のドメイン名に対応するIPアドレスを返します。逆引き名前解決では、指定のIPアドレスに対応するドメイン名を返します。DNSでは、IPv4およびIPv6に対して特別なin-addr.arpaおよびip6.arpaドメインを使用することで逆引き名前解決を実装しています。

ゾーンのin-addr.arpaドメインまたはip6.arpaドメインの特性は、通常、/etc/named.conf内で定義されます。次に例を示します。

zone "2.168.192.in-addr.arpa" IN {
    type master;
    file "reverse-192.168.2";
    allow-update { key “rndc-key”; };
    notify yes;
};

ゾーンの名前は、in-addr.arpaと、その前にあるドメインのIPアドレスのネットワーク部分(ドットで区切られた4つの部分が逆の順序で記述された)で構成されます。

ネットワークの接頭辞の長さが8の倍数でない場合は、かわりに使用する必要がある書式について、RFC 2317を参照してください。

in-addr.arpaドメインまたはip6.arpaドメインにあるPTRレコードでは、IPアドレスのホスト部分に相当するホスト名を定義します。次の例は、/var/named/reverse-192.168.2ゾーン・ファイルからの抜粋です。

$TTL 86400        ;
@ IN SOA dns.us.mydom.com. root.us.mydom.com. (
            57 ;
            28800 ;
            7200 ;
            2419200 ;
            86400 ;
            )
              IN  NS      dns.us.mydom.com.

1             IN  PTR     dns.us.mydom.com.
1             IN  PTR     us.mydom.com.
2             IN  PTR     svr01.us.mydom.com.
101           IN  PTR     host01.us.mydom.com.
102           IN  PTR     host02.us.mydom.com.
103           IN  PTR     host03.us.mydom.com.
...

詳細は、/usr/share/doc/BIND-version/armにあるBINDドキュメントを参照してください。

名前サービスの管理

rndcコマンドでは、namedサービスを管理できます。このサービスはローカルで管理されます。このサービスが/etc/named.confファイルのcontrolsセクションで構成されている場合は、コマンドラインを使用してnamedをリモートで管理することもできます。サービスへの不正なアクセスを防止するために、選択されたポート(デフォルトではポート953)でリスニングするようにrndcを構成して、namedとrndcの両方に同じキーへのアクセス権を付与する必要があります。適切なキーを生成するには、rndc-confgenコマンドを使用します。

sudo rndc-confgen -a

このコマンドでは、/etc/rndc.keyファイルが作成されます。

次のように、namedサービスのステータスを確認します。

sudo rndc status
number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running

named構成ファイルまたはゾーン・ファイルを変更した場合は、rndc reloadコマンドを使用して、そのファイルをリロードするようにnamedに指示します。

sudo rndc reload

詳細は、named(8)rndc(8)およびrndc-confgen(8)の各マニュアル・ページを参照してください。

DNSルックアップの実行

DNSルックアップの実行には、hostユーティリティを使用することをお薦めします。引数を指定しなかった場合、このコマンドでは、そのコマンドラインの引数とオプションのサマリーが表示されます。

たとえば、host01のIPアドレスを参照します:

host host01

IPアドレスに相当するドメイン名の逆参照を実行します。

sudo host 192.168.2.101

DNSに対してドメインに相当するIPアドレスを問い合せます。

sudo host dns.us.mydoc.com

-vおよび-tオプションを使用すると、特定のタイプのレコードに関する詳細な情報が表示されます。

sudo host -v -t MX  www.mydom.com
Trying "www.mydom.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49643
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.mydom.com.			IN	MX

;; ANSWER SECTION:
www.mydom.com.		135	IN	CNAME	www.mydom.com.acme.net.
www.mydom.com.acme.net. 1240 IN	CNAME	d4077.c.miscacme.net.

;; AUTHORITY SECTION:
c.miscacme.net.	2000	IN	SOA	m0e.miscacme.net. hostmaster.misc.com. ...

Received 163 bytes from 10.0.0.1#53 in 40 ms

-v-tおよびANYオプションと同等の-aオプションでは、ゾーンで使用可能なすべてのレコードが表示されます。次に例を示します。

sudo host -a www.us.mydom.com
Trying "www.us.mydom.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40030
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.us.mydom.com.			IN	ANY

;; ANSWER SECTION:
www.us.mydom.com.		263	IN	CNAME	www.us.mydom.acme.net.

Received 72 bytes from 10.0.0.1#53 in 32 ms

詳細は、host(1)マニュアル・ページを参照してください。