5 ネーム・サービスの構成
この章では、Berkeley Internet Name Domain (BIND)を使用してドメイン・ネーム・システム(DNS)ネーム・サーバーを設定する方法について説明します。
DNSおよびBINDについて
DNSは、ドメイン名をIPアドレスに解決するネットワークベースのサービスです。分離された小規模なネットワークの場合は、/etc/hosts
ファイルのエントリを使用して、名前からアドレスへのマッピングを提供できます。ただし、インターネットに接続しているほとんどのネットワークではDNSが使用されます。
DNSは階層型の分散型データベースです。
完全修飾ドメイン名(FQDN) wiki.us.mydom.com
について考えてみましょう。この例では、トップレベル・ドメインがcom
で、mydom
はcom
のサブドメイン、us
はmydom
のサブドメイン、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
構成およびゾーン・ファイルを構成すると仮定します。
ネーム・サーバーを構成するには:
-
bindパッケージをインストールします。
sudo dnf install bind
-
システムで
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
エントリを含めます。 -
必要な場合は、
named
構成およびゾーン・ファイルを変更します。詳細は、「namedデーモンの構成」を参照してください。
-
システム・ファイアウォールを、ポート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: ファイアウォールの構成を参照してください。
-
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)
マニュアル・ページを参照してください。