resolv.confとは?
resolv.confはスタブリゾルバが参照する設定ファイルです。resolv.confには問い合わせを行うフルリゾルバのアドレスが書かれています。
Linuxではresolv.confは「/etc/resolv.conf」にあります。
/etc/hostsファイルを参照して名前解決ができない場合、スタブリゾルバがresolv.confに書かれているネームサーバーを参照して名前解決を要求します。
それでは実際にresolv.confファイルを見てみましょう。
resolv.confにはnameserverとして3つ登録されています。
スタブリゾルバはホストの/etc/hostsを参照して名前解決ができない場合、resolv.confに記載されているネームサーバーに問い合わせます。
スタブリゾルバはnamedなどの特定のプロセスがあるものではなく、OSが提供しているライブラリ群です(ブラウザなどのアプリケーションはこのライブラリ使ってスタブリゾルバを利用している)。フルリゾルバはBINDなどのミドルウェアを利用することによって自身のホストに構築できます。その場合はnameserverに自身のループバックアドレスを指定しておきます。
resolv.confの書き方、詳細
resolv.confの書式は簡単で3つの項目
- nameserver (IPアドレス)
- domain (ドメイン名)
- search (ドメイン名)
があります。
nameserverの項目にはネームサーバーを指定します。この項目は最大3台までのネームサーバーを登録できます。
domainはホスト名を指定して名前解決しようとした際にここで指定したドメイン名を付加して名前解決してくれるようになる設定です。searchにexample.comと設定しておくと、ホスト名hogehogeで名前解決しようとするとhogehoge.example.comで検索してくれます。
searchも同様ですが、ドメイン名を設定できるようです。
参考 Man page of RESOLV.CONF取得できませんでした
resolv.confの初期設定がデフォルトゲートウェイ(ルーター)のアドレスに設定されている理由
resolv.confのアドレスにデフォルトゲートウェイのアドレスが設定されていることが多いです。家庭内のLANなどではDNSなど意識しなくてもインターネットにつながっていますがどうなっているのでしょうか?また、ルーターはフルリゾルバとして機能を持っているのでしょうか?
普通の家庭ではプロバイダが提供するネームサーバーがフルリゾルバで、ルーターは名前解決を中継しているだけのようです。ルーターによっては内部にDNSのキャッシュを残すものもあるようです。このような機能を「DNSフォワーダ」といいます。クライアント側からみるとルーターがフルリゾルバとして働いているように見えますが実際はスタブリゾルバからの名前解決要求をプロバイダが提供するフルリゾルバに渡す中継をしているのです。
フルリゾルバの処理を分散する目的でDNSフォワーダを設置することもあります。通常フルリゾルバは複数のクライアントからの名前解決要求を受けて、権威DNSサーバーへ名前解決の問い合わせる2つの役割を担っています。
DNSフォーワーダを設置することにより複数のクライアントからの名前解決要求を受ける部分を任せることでフルリゾルバの負荷を減少させることができます。
resolv.confが書き変えられる
resolv.confは再起動するとDCHPクライアントなどによって書き変えられてしまうことがあります。