【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/hosts に www.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システムがホスト名の名前解決を/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
ファイルによって決定されます。システム管理者は、この設定を理解し、適切に管理することで、ネットワーク内外での通信を円滑に行うことができます。