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

この章では、BINDを使用してDNSネーム・サーバーを設定する方法について説明します。

DNSおよびBINDについて

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

DNSは階層的な分散データベースで、階層の各レベルはピリオド(.)で区切られています。次の完全修飾ドメイン名(FQDN)を考えてみます。

wiki.us.mydom.com.

FQDNの最後のピリオドで表されるルート・ドメインは、通常、DNS構成ファイル以外では省略されます。

wiki.us.mydom.com

この例では、最上位レベルのドメインがcomで、mydomcomのサブドメイン、usmydomのサブドメイン、wikiはホスト名です。これらの各ドメインは、管理の目的でゾーンにグループ化されています。DNSサーバー(つまり、ネーム・サーバー)には、ゾーン内のコンポーネント・ドメインの解決に必要な情報が格納されます。さらに、ゾーンのDNSサーバーには、各サブドメインの解決を行うDNSサーバーへのポインタが格納されます。

us.mydom.comドメイン外のクライアントが、そのローカル・ネーム・サーバーでFQDN (wiki.us.mydom.comなど)をオーソリタティブでないネーム・サーバーのIPアドレスに解決するようにリクエストした場合、ネーム・サーバーは、comドメインに対してオーソリタティブなネーム・サーバーのアドレスをルート・ネーム・サーバーに問い合せます。このネーム・サーバーを問い合せると、mydom.comのネーム・サーバーのIPアドレスが返されます。次に、このネーム・サーバーを問い合せると、us.oracle.comのネーム・サーバーのIPアドレスが返され、この最後のネーム・サーバーを問い合せると、FQDNのIPアドレスが返されます。このプロセスは再帰問合せと呼ばれ、ローカル・ネーム・サーバーは、リゾルバのかわりに、外部ネーム・サーバーから別のネーム・サーバーへの各参照を処理します。

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

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

/etc/named.conf

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

/etc/named.rfc1912.zones

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

/var/named/named.ca

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

ネーム・サーバーのタイプについて

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

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

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

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

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

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

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

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

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

転送ネーム・サーバー

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

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

DNS構成ファイルについて

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

BIND構成ファイルの例は、/usr/share/doc/bind-version/sample/を参照してください。

/etc/named.conf

namedのメイン構成ファイルは/etc/named.confで、namedの設定およびゾーンの最上位レベルの定義が格納されます。たとえば:

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

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

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

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";
    allow-query { localnets; };
    recursion yes;

    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";
};

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セクションでは、ヒント・ゾーンを使用して、ルート・サーバーの初期セットを指定します。このゾーンでは、ルート・ドメイン(.)のオーソリタティブ・サーバーのIPアドレスについて、named/var/named/named.caを参照する必要があることを指定します。

詳細は、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ドキュメントを参照してください。

ネーム・サーバーの構成

デフォルトでは、BINDのインストールにより、/etc/named.confで提供される構成設定と、そこに格納されたファイルを使用して、キャッシュ専用ネーム・サーバーを構成できます。この手順では、管理者がデフォルトの設定を使用するか、新規のnamed構成およびゾーン・ファイルを構成すると仮定します。

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

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

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

    DNS1=127.0.0.1

    この行を指定することで、ネットワーク・サービスの開始時にNetworkManagerによって/etc/resolv.confに次のエントリが追加されます。

    nameserver 127.0.0.1

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

    NetworkManagerを無効にした場合は、/etc/resolv.confを編集してnameserver 127.0.0.1エントリを挿入します。

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

  4. システム・ファイアウォールを構成して、ポート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
  5. networkサービスを再起動し、namedサービスを再起動して、システムの再起動後にnamedが開始するように構成します。

    sudo systemctl restart network
    sudo systemctl start named
    sudo systemctl enable named

名前サービスの管理

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

# rndc-confgen -a
wrote key file "/etc/rndc.key"

rootのみがファイルの読取りを実行できるようにするには:

# chmod o-rwx /etc/rndc.key

namedサービスのステータスをチェックするには:

# 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に指示します。

# rndc reload
server reload successful 

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

DNSルックアップの実行

DNSルックアップの実行には、hostユーティリティを使用することをお薦めします。引数を指定しないhostで、コマンドライン引数とオプションの要約が表示されます。たとえば、host01のIPアドレスを参照します:

host host01

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

host 192.168.2.101

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

host dns.us.mydoc.com

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

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

-aオプション(-v -t ANYと同等)を使用すると、ゾーンで使用可能なすべてのレコードが表示されます。

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)マニュアル・ページを参照してください。