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行まで指定できます。 |
| search | DNSサーバーを利用した名前解決の際に補完するドメイン名を指定します。名前解決が成功するまで、ドメイン名補完された名前を指定順に処理します。複数のドメイン名を指定する場合、半角スペースまたはタブで区切り、最大6ドメイン/計256文字が指定できます。 なお、後述のdomainと同時に設定できません。 |
| domain | DNSサーバーを利用した名前解決の際に補完するドメイン名を指定します。設定した場合の処理は前述の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 または localhost | 127.0.0.1 |
| mail または server1.localnet | 192.168.0.11 |
| server2 | 192.168.0.12 |
| www.localnet | 192.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アドレス |
| CNAME | Aレコードに定義されているホスト名の別名(エイリアス) |
| MX | メールアドレスのドメイン名に対するメールサーバー名 |
| NS | ドメインを管理するDNSサーバー名 |
| PTR | IPアドレスに対するホスト名 |
| SOA | DNSのドメインを定義するための名称、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アドレスの範囲を示す「クラス・サブネットマスク」について解説します。


