【Linux】Linuxの名前解決の仕組み

 Linuxでは、ホスト名をIPアドレスに解決する「名前解決」を行うために、主に2つの方法が利用されます。これらの方法は、システムの設定によって順序が決められており、その順序に従って解決が試みられます。

名前解決の手段:DNSとファイル

  • DNS
     通常、インターネット上の名前解決はDNSサーバを利用して行われます。DNSは分散型のデータベースで、ドメイン名とIPアドレスの対応を管理しています。
  • /etc/hostsファイル
     小規模なネットワークや特定の環境では、/etc/hostsファイルを使用して手動でホスト名とIPアドレスの対応を設定することもできます。例えば、全クライアントにこのファイルを配布することで、ローカルネットワーク内での名前解決を行うことが可能です。ただし、変更が発生した場合、すべてのクライアントでこのファイルを更新する必要があり、管理が煩雑になる可能性があります。

/etc/hostsファイルの内容(CentOS 7)

 /etc/hostsファイルには、IPアドレスとホスト名の対応が記述されています。CentOS 7の場合、次のように表示されます。

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • 127.0.0.1 :これはループバックアドレスで、自分自身を指すIPアドレスです。通常、localhostというホスト名に関連付けられています。
  • ::1 :これはIPv6のループバックアドレスで、IPv4の127.0.0.1に対応します。

これらのエントリは、システムが自分自身と通信する際に利用されます。

/etc/nsswitch.confファイル(CentOS 7)

名前解決の順序は、/etc/nsswitch.confファイルで定義されています。

例えば、次のような出力がある場合、

$ grep hosts /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname
  • files: 最初に/etc/hostsファイルを参照します。
  • dns: 次に/etc/resolv.confを参照してDNSサーバへ問い合わせます。
  • myhostname: 最後に、自身のホスト名(localhostなど)を確認します。

Linuxの名前解決の流れ図

下図を使用して、名前解決の具体的な流れを説明します。

/etc/nsswitch.confファイルに定義された順序に従って、ホスト名をIPアドレスに解決します。

ステップ説明
① ユーザーの要求ユーザーがブラウザなどを使って www.company.co.jp にアクセスしようとしますが、IPアドレスが不明なため、名前解決が必要です。
② 名前解決の順序確認システムはまず /etc/nsswitch.conf ファイルを参照し、名前解決の順序を確認します。この場合、hosts: files dns myhostname と定義されています。
/etc/hosts を確認最初に files が指定されているため、システムは /etc/hosts ファイルを確認します。このファイルには、ローカルで定義されたホスト名とIPアドレスのマッピングが含まれています。
/etc/hosts に該当なし/etc/hostswww.company.co.jp に対応するエントリがないため、次の手順に進みます。
⑤ どのDNSサーバに問い合わせるのかを確認する次に dns が指定されているため、システムは /etc/resolv.conf ファイルを参照します。このファイルには、システムが問い合わせるDNSサーバのアドレスが定義されています。
⑥ DNSサーバに問い合わせresolv.conf に記載されたDNSサーバ(例:8.8.8.8)に問い合わせを行います。
⑦ 名前解決の結果DNSサーバは www.company.co.jp に対応するIPアドレス 182.22.16.123 を返します。
⑧ IPアドレスにアクセス最後に、システムは取得したIPアドレス 182.22.16.123 に対して接続を試み、ユーザーの要求を処理します。
Linuxの名前解決の流れ図

 Linuxシステムがホスト名の名前解決を/etc/nsswitch.conf で定義された順序に従って実行します。まず /etc/hosts ファイルを参照し、それで解決できない場合は DNS サーバを使用して名前解決を行います。このプロセスによって、ユーザーが www.company.co.jp にアクセスできるようになります。

ディストリビューションで/etc/hostsと/etc/nsswitch.confの細部は異なる

 注意すべき点は、/etc/hosts/etc/nsswitch.confの内容がLinuxディストリビューションごとに異なる場合があることです。例えば、Ubuntuなどの異なるディストリビューションでは、設定の細部が異なる場合があります。

まとめ

 Linuxの名前解決は、主にDNSと/etc/hostsファイルを利用して行われます。その順序や具体的な設定は、/etc/nsswitch.confファイルによって決定されます。システム管理者は、この設定を理解し、適切に管理することで、ネットワーク内外での通信を円滑に行うことができます。