3) DNSリゾルバー設定

インターネット上のWebサーバーへのアクセスや電子メール送受信をサポートするための仕組みがあります。ここでは、クライアント側でのホスト名とIPアドレスの名前解決を行うことで、これを行なう「DNSリゾルバー」の設定方法について解説します。
インターネットリサーチ・コンサルティング・企画、ウェブ翻訳から、Web制作、システム開発までオープンソース・ネットワークビジネスを提供

DNSリゾルバーについて

 DNS (Domain Name System) とは、インターネット上に設置される階層的な分散型データベースシステムです。Webサーバーや電子メールに使われるドメイン名とIPアドレスとの対応付けを管理するためにDNSが使用され、このサーバーをDNSサーバーまたはネームサーバー (以下、DNSサーバー) と呼びます。
 DNSの仕組みは、ホスト名とIPアドレスを対応付けて相互に変換することにあり、この変換を「名前解決」と呼びます。特にホスト名からIPアドレスへの変換を「正引き」といい、IPアドレスからホスト名への変換を「逆引き」と呼びます。

 また、DNSサーバーに問い合わせを行い、名前解決を行うクライアント側の機能をDNSリゾルバーと呼びます。

 上記DNSの仕組みにより、通信先にアクセスする際、人は覚えやすい名前を使用する一方、OSやソフトウェアは、DNSリゾルバー機能により「192.168.234.100」のような人間から見てどのサーバーを指すのかわかりづらい最大12桁の数字の組合せ (IPアドレス) に変換し、通信を行います。

 名前解決がよく使用されるケースは、Webページ閲覧とメール送信です。Webページ閲覧の場合、WebブラウザーURL欄の「http://」の後ろに記述されるホスト名が名前解決され、該当するWebサーバーにアクセスします。メール送信の場合、送信先メールアドレスの「@」の後ろのドメイン名が名前解決され、適切なメールサーバーにメールが配送されます。

設定ファイルについて

 ここでは、LinuxにおけるDNSリゾルバーに関連する設定ファイル・設定反映方法・設定確認方法について解説します。

1. DNSリゾルバー設定

DNSリゾルバー設定は/etc/resolv.confで設定します。主な設定項目は以下の通りです。

設定項目設定内容
nameserver名前解決に利用するDNSサーバーのIPアドレスを指定します。複数のnameserverを指定することにより、指定順にDNSサーバーを検索し、応答がなかった場合、次のDNSサーバーを検索します。
nameserverは1行につき1つのDNSサーバーを指定し、複数指定する場合、最大3行まで指定できます。
searchDNSサーバーを利用した名前解決の際に補完するドメイン名を指定します。名前解決が成功するまで、ドメイン名補完された名前を指定順に処理します。複数のドメイン名を指定する場合、半角スペースまたはタブで区切り、最大6ドメイン/計256文字が指定できます。
なお、後述のdomainと同時に設定できません。
domainDNSサーバーを利用した名前解決の際に補完するドメイン名を指定します。設定した場合の処理は前述のsearchと同じですが、domainはドメイン名を複数指定できません。
なお、前述のsearchと同時に設定できません。


/etc/resolv.conf設定例

search it.jfe-tec.jp jfe-tec.jp nameserver 192.168.0.1 nameserver 192.168.0.2


 上記nameserver設定例にて名前解決を行った場合、最初に192.168.0.1にDNS問い合わせを行います。192.168.0.1の応答がなかった場合、192.168.0.2にDNS問い合わせを行います。

 上記search設定例にて「test」の名前解決を試みた場合、「test.jfe-tec.jp」、「test.jp」、「test」の順に名前解決を行い、名前解決できた時点でその結果が「test」の名前解決結果となります。

※名前にドットが含まれる場合、その名前のみ名前解決を試みて終了します。

2. 静的な名前解決テーブル設定

 DNSリゾルバーは、DNSサーバーを参照するだけでなく、ローカルに保持している静的な名前解決テーブルを参照して名前解決を行うことができます。
 この名前解決テーブルには、任意の名前とIPアドレスの関連付けを登録することができます。初期設定では、localhostとlocalhost.localdomainが127.0.0.1と関連付けられています。

 ホスト名の静的な名前解決テーブルの設定ファイルは/etc/hostsです。/etc/hostsの設定例は下記の通りです。

127.0.0.1    localhost.localdomain    localhost
192.168.0.11    mail    server1.localnet
192.168.0.12    server2
192.168.0.13    www.localnet


※IPアドレスとホスト名またはホスト名同士を、空白またはタブで区切ります。
 ホスト名にはFQDN (*1) と、ドットを含まない名前のどちらでも指定できます。
 # (半角シャープ) から行末までのテキストはコメントとして無視されます。

上記設定例の場合、下記の通り名前解決されます。

名前解決前のホスト名名前解決後のIPアドレス
localhost.localdomain または localhost127.0.0.1
mail または server1.localnet192.168.0.11
server2192.168.0.12
www.localnet192.168.0.13


 また、DNSと静的な名前解決テーブル (/etc/hosts) の名前解決順序を/etc/host.confと/etc/nsswitch.confの2つの設定ファイルで設定できますが、ソフトウェアが使用するglibcおよびlibc (いずれもC言語ライブラリー) のバージョンにより、参照する設定ファイルが違うため、ここでは両ファイルについて解説することにします。

 なお、デフォルトの名前解決順序は名前解決テーブル (/etc/hosts)、DNSの順になっており、特別な理由が無い限り、変更する必要はありません。

 /etc/host.confは、標準では下記の通り名前解決テーブル (/etc/hosts) による名前解決が最初に行われるよう設定されており、名前解決できなかった場合、DNSによる名前解決を行います。

order hosts,bind


 「order」行に名前解決順序を左から半角カンマ区切りで設定します。名前解決方法にはhosts(/etc/hostsによる名前解決)、bind(DNSによる名前解決)、nis(NIS (*2) による名前解決) が指定できます。

 /etc/nsswitch.confは、/etc/host.confと同様、標準では下記の通り名前解決テーブル (/etc/hosts) による名前解決が最初に行われるよう設定されており、名前解決できなかった場合、DNSによる名前解決を行います。

hosts:      files dns


 「hosts:」行に名前解決順序を左から半角スペースまたはタブ区切りで設定します。名前解決の方法にはfiles(/etc/hostsによる名前解決)、dns(DNSによる名前解決)、nisまたはyp(NISによる名前解決)、nisplusまたはnis+(NIS+ (*3) による名前解決) が指定できます。

(*1) FQDN (Fully Qualified Domain Name) とは、インターネットやイントラネットなどのTCP/IPネットワーク上で、ドメイン名・サブドメイン名・ホスト名を省略せずに、すべて指定した記述形式のドメイン名のこと。
(*2) NIS (Network Infomation Service) は、Sun Microsystems社が開発した、ネットワーク上の複数のUNIXコンピューター間でユーザー情報 (パスワードファイル、グループファイル) やホスト名情報などを共有するシステムのこと。
(*3) NIS+は、NISのセキュリティーやパフォーマンスを改良したシステムのこと。

3. 設定反映について

 DNSリゾルバー設定(/etc/resolv.conf)、静的な名前解決テーブル設定(/etc/hosts)、名前解決の優先設定(/etc/host.conf)を変更すると同時に設定が反映されるため、設定を反映するための作業は不要です。

 /etc/nsswitch.confを変更した場合、/etc/nsswitch.confを参照するサービス、およびプロセスを再起動する必要があります。場合によっては、OSを再起動する必要があります。

4. 設定反映の確認方法

 DNSサーバーによる名前解決の設定反映は、nslookup、host、dig等のDNS名前解決コマンドで確認できます。下記はnslookupコマンドを使用したabc.jfe-tec.jpの名前解決例です。

# nslookup abc.jfe-tec.jp

nslookup abc.jfe-tec.jp実行結果表示例

Server:         192.168.0.1
Address:        192.168.0.1#53
Name: abc.jfe-tec.jp Address: 192.168.0.20


※192.168.0.1に問い合わせを行い、abc.jfe-tec.jpの正引き結果が192.168.0.20であることを示しています。

 下記はnslookupコマンドを使用して、メールアドレスのドメイン名がjfe-tec.jpの、メール配送先を表示する例です。
 電子メール配送先サーバーの優先度、およびFQDNが表示されます。配送先サーバーのIPアドレスが表示されるケースもありますが、一般的にはFQDNが表示されます。配送先サーバーのIPアドレスを知りたい場合は、表示されたFQDNを別途名前解決する必要があります。

# nslookup -type=MX jfe-tec.jp

*nslookupのオプションについて
  • -type = 検索するDNSレコード (*4) の種類を指定する。指定しない場合、Aレコード、CNAMEレコード、PTRレコードを検索します。


(*4) DNSレコードとは、DNSサーバーで定義される情報であり、様々な情報が定義されています。主なDNSレコードの種類と定義されている情報は、以下の通りです。

DNSレコード名定義情報
Aホスト名に対するIPアドレス
CNAMEAレコードに定義されているホスト名の別名(エイリアス)
MXメールアドレスのドメイン名に対するメールサーバー名
NSドメインを管理するDNSサーバー名
PTRIPアドレスに対するホスト名
SOADNSのドメインを定義するための名称、DNSの定義情報のバージョンを管理するためのシリアル番号、名前解決の際のキャッシングに関する設定など


nslookup -type=MX jfe-tec.jp実行結果表示例

Server:         192.168.0.1
Address:        192.168.0.1#53
jfe-tec.jp mail exchanger = 10 mail01.jfe-tec.jp. jfe-tec.jp mail exchanger = 100 mail02.jfe-tec.jp.


※192.168.0.1に問い合わせを行い、jfe-tec.jpドメイン宛のメール配送先サーバーがmail01.jfe-tec.jp (優先度10)、mail02.jfe-tec.jp (優先度100) であることを示しています。

 ドメインによっては、負荷分散や耐障害性の向上を目的としてメール配送先が複数設定され、優先度の数値が小さいサーバーに対して優先的にメール配送されます。上記例では、メールは最初に優先度10のサーバーに配送されますが、配送に失敗した場合、優先度100のサーバーに配送されます。

 名前解決テーブル(/etc/hosts)による名前解決の設定反映は、ping、traceroute等のネットワーク疎通確認コマンドで確認できますが、名前解決テーブルに存在しない名前の場合、DNSサーバーに問い合わせます。
 下記はpingコマンドを利用した名前解決例です。

# ping -c 4 server2

*pingコマンドのオプションについて
  • -c = パケット送信数を指定し、全ての応答パケット受信後、終了する。


ping -c 4 server2実行結果表示例

PING server2 (192.168.0.12) 56(84) bytes of data. 64 bytes from server2 (192.168.0.12): icmp_seq=0 ttl=64 time=0.139 ms 64 bytes from server2 (192.168.0.12): icmp_seq=1 ttl=64 time=0.308 ms 64 bytes from server2 (192.168.0.12): icmp_seq=2 ttl=64 time=0.152 ms 64 bytes from server2 (192.168.0.12): icmp_seq=3 ttl=64 time=0.122 ms
--- server2 (192.168.0.12) ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3018ms rtt min/avg/max/mdev = 0.122/0.180/0.308/0.075 ms, pipe 2


 名前解決テーブル(/etc/hosts)にserver2と192.168.0.12が関連付けられていて、かつ192.168.0.12が応答を返す場合、上記のような実行結果を表示し、server2が192.168.0.12と関連付けられていることを示します。

 次回は、IPアドレスの範囲を示す「クラス・サブネットマスク」について解説します。

関連キーワード
Linux,LINUX,ネットワーク設定,DNSリゾルバー,DNSサーバー,Domain Name System,名前解決,正引き,逆引き,IPアドレス,ホスト名,nslookup,host,dig,hostname

コメントをお待ちしています

お名前:

メールアドレス:

コメント:

このエントリーのトラックバックURL

http://it.jfe-tec.jp/mt/mt-tb.cgi/24