【初心者用】【Linux】DNS名前解決の設定方法 (nsswitch.conf resolv.conf hosts)

最終更新日 2024年10月24日

【Linux】DNS名前解決の設定方法 (nsswitch.conf resolv.conf hosts)

この記事はこんな人におすすめ!

Linuxマシンにおける名前解決の仕組みが知りたい

名前解決に失敗したので、とりあえず名前解決をすぐに出来るようにする方法を教えてほしい

実際の設定ファイルの中身を確認したい

記事の概要

仮想マシンを2つ使用して、その仮想マシン間で通信をするときに、ホスト名で通信をすることが

できず、その原因について調べました。結果、名前解決の設定が必要ということが分かったので、

名前解決の設定方法と名前解決の仕組みについて記載します。

DNS(名前解決)とは

TCP/IPのネットワークでは、ネットワーク上のコンピュータを識別するためにIPアドレスを使用しています。

しかし、IPアドレスは我々人間には分かりにくいため、コンピュータにホスト名を設定し、

ホスト名を使用してコンピュータを識別しています。

しかしコンピュータはホスト名を識別できないため、ホスト名とIPアドレスを変換する必要が出てきます。

そこで使用されるのがDNS(名前解決)という仕組みです。

DNSでは、DNSサーバがIPアドレスとホスト名の変換を行います。

※DNSサーバを使用しなくても、/etc/hosts ファイルを使用することでIPアドレスとホスト名の紐づきを

確認することが出来ますが、多数のホストを設定する場合は、手間がかかるため、DNSサーバを使用します。

名前解決に必要な知識

ドメインについて

名前解決を理解するにあたり、ドメインとは何かを理解する必要があります。

そこで、ドメインとは何かについてご紹介します。

DNS(名前解決)で使用するドメインとは、インターネット上にあるコンピュータを、グループで分け(組織ごとなどで)、

その分けられたグループを表す単位のことです。

ドメインは階層構造になっており、階層構造の頂点には、「.」ルートドメインが存在します。

※ルートドメインですが、ドメイン名を記載するときには一般的に省略されます。

ルートドメインの下位のドメインには、「jp」や「com」などの複数のドメインが存在し、「jp」や「com」の

下にも、また、複数のドメインが存在しています。

例えば、www.goritarou.com. というドメインは↓のように解釈されます。

.:ルートドメイン

com:ルートドメインの下位の階層のドメイン

goritarou:comのさらに下の階層のドメイン

www:ホスト名(機器に与えられた名前)

※通常ドメイン名の最後の「.」のルートドメインは省略して表記されます。

ゾーンについて

ドメイン名とIPアドレスの情報が紐づけされている情報のことをゾーンと呼びます。

FQDNとは

FQDNとは、ルートドメインを除く、ドメイン名を省略しないで記載したドメイン名のことです。

完全修飾ドメイン名とも呼ばれています。

先ほど紹介したwww.goritarou.com. もFQDNです。

名前解決の具体的な処理手順

この章では、どのように名前解決(ドメイン名とIPアドレスの変換)が行われているのか説明します。

クライアントのブラウザのアドレス欄にドメイン名(www.goritarou.comなど)を入力し、

そのサイトが表示されるまでに、どのような処理がされているのかをご紹介します。

1.クライアントのブラウザが、入力されたURLから、名前解決の対象のドメイン名を抽出する。

2.クライアントは、抽出されたドメイン名をOS(Linux等)の名前解決の機能に引き渡す。

3.クライアントの名前解決機能は、ドメイン名に対応するIPアドレスを、ネットワーク上のDNSサーバに問い合わせする。

4.DNSサーバは、クライアントからの問い合わせに対する回答を所持している場合、その問い合わせに回答する。

5.問い合わせが行われたDNSサーバが、回答を所持していない場合は、別の上位のDNSサーバに問い合わせを行う。

6.上位のDNSサーバが問い合わせに対して回答を行う。

※回答を所持していない場合は、別の上位のDNSサーバに問い合わせを行う。

7.DNSサーバは、上位のDNSサーバから回答された内容を、クライアントに回答する。

8.DNSサーバは、クライアントに回答をするのと同時に、自身のキャッシュに、回答内容を保存する。

9.クライアントは、DNSサーバから回答のあったIPアドレスをブラウザに戻す。

10.クライアントのブラウザは、IPアドレスを参照し、そのIPアドレスを使用して、サイトにアクセスする。

DNSキャッシュとは

DNSサーバはクライアントからの名前解決の問い合わせに対して、ホストの情報(IPアドレスなど)を回答します。

この問い合わせがあった際に、回答したホストの情報は、クライアントから問い合わせが行われたDNSサーバの

キャッシュに保存されます。

キャッシュに問い合わせが行われたホストの情報を保存しておくことで、同じ問い合わせが再度あったときに、

上位のDNSサーバに問い合わせを行うことなく、問い合わせに回答をすることが出来ます。

/etc/nsswitch.conf ファイルについて

前の章で説明した、DNSに問い合わせを行う際に、どのように名前解決を行うかを設定するのが、

この/etc/nsswitch.conf ファイルです。

この章では/etc/nsswitch.conf ファイルについて説明していきます。

名前解決をする方法

まず、名前解決をする方法はいくつかやり方があります。

例えば↓のような方法です。

・/etc/hosts ファイルを使用する

・DNSサーバに問い合わせる

・LDAPサーバーに問い合わせる

上記のような方法がありますが、それらの方法をどのような順番で行うかが記載されているのが、

/etc/nsswitch.conf ファイルです。

/etc/nsswitch.conf ファイルの中身

/etc/nsswitch.conf ファイルの中身は↓のような内容になっています。

[root@centosvm ~]#
[root@centosvm ~]# cat /etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Valid entries include:
#
# nisplus Use NIS+ (NIS version 3)
# nis Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the local database (.db) files
# compat Use NIS on compat mode
# hesiod Use Hesiod for user lookups
# sss Use sssd (System Security Services Daemon)
# [NOTFOUND=return] Stop searching if not found so far
#
# WARNING: Running nscd with a secondary caching service like sssd may lead to
#   unexpected behaviour, especially with how long entries are cached.

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd:    db files nisplus nis
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files sss
shadow:     files sss
group:      files sss
#initgroups: files sss

#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files    

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss

netgroup:   nisplus sss

publickey:  nisplus

automount:  files nisplus sss
aliases:    files nisplus

[root@centosvm ~]#

上記の「hosts:」の行に記載されているのが、ホスト名の名前解決を行う際の問い合わせの順番です。

この場合はまず、/etc/hostsファイル(file)を使用し、次に、DNSサーバ(dns)を使用し、

最後に自分のホスト名やデフォルトゲートウェイなどの名前解決(myhostname)を行うよう設定されています。

hosts:      files dns myhostname

/etc/hosts ファイルの編集

名前解決を行う方法の1つとして /etc/hosts ファイルで名前解決を行う方法があります。

名前解決ができない場合は /etc/hosts ファイル にホスト名とIPアドレスの対応を記載することで、

名前解決が出来るようになります。

/etc/hosts ファイルの変更方法

/etc/hosts ファイルを編集する際には、「IPアドレス」「ホスト名1」「ホスト名2」「ホスト名3」のように記載します。

1つのIPアドレスに複数のホスト名を対応させることもできます。その場合は、対応させたいIPアドレスの行に、複数の

ホスト名を記載すればOKです。

/etc/hostsのファイルの中身

/etc/hostsのファイルの中身は↓のような感じになっています。

今回は以下のホスト名とIPアドレスの対応を追加しています。

IPアドレス:192.168.74.130

ホスト名:debianvm.goritarou.com

[root@centosvm ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.74.130 debianvm.goritarou.com
[root@centosvm ~]#

1つのIPアドレスに複数のホスト名を対応させる場合は↓のような感じで記載します。

192.168.74.130 debianvm.goritarou.com debianvm2.goritarou.com

/etc/resolv.confファイルについて

DNSサーバを使用して名前解決をするためには、どのDNSサーバを使用するか指定する必要があります。

どのDNSサーバを使用するのか指定する際に使用するのが、/etc/resolv.conf ファイルです。

/etc/resolv.confファイル編集方法

domain行:自身(ホスト)が所属するドメイン名を記載します。

search行:ホスト名のみなど、ドメイン名が省略された場合に、補完するドメインを記載します。

※domain行とsearch行は通常どちらか一方のみ記載し、両方とも記載された場合は、最後に指定した項目が有効になります。

nameserver行:参照するDNSサーバのIPアドレスを記載します。複数のDNSサーバを指定しる場合は、複数行に分けて記載します。

複数行に記載した場合は、最初の行に記載したDNSサーバから応答がなければ次の行のDNSサーバに問い合わせる

という動作をします。

/etc/resolv.confファイルの実際の中身

/etc/resolv.confファイルの中身の例です。

[root@centosvm ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain goritarou.com
nameserver 192.168.74.2
[root@centosvm ~]#